Exemple #1
0
        /// <summary>
        /// Run
        /// </summary>
        /// <param name="arg">arg</param>
        /// <param name="context">context</param>
        /// <returns>flag if the process was sucessfull</returns>
        public override async Task <ImportComposerTemplatePipelineModel> Run(ImportComposerTemplatePipelineModel arg, CommercePipelineExecutionContext context)
        {
            Condition.Requires(arg).IsNotNull($"{this.Name}: The arg can not be null");
            Condition.Requires(arg.Arguments).IsNotNull($"{this.Name}: The import arguments can not be null");
            Condition.Requires(arg.InputComposerTemplates).IsNotNull($"{this.Name}: The composer templates can not be null");

            if (arg.Arguments.ImportType != ImportType.Override)
            {
                return(await Task.FromResult(arg));
            }

            IList <ComposerTemplate> existingComposerTemplates = _composerTemplateService.GetAllComposerTemplates(context.CommerceContext);

            foreach (CustomComposerTemplate composerTemplate in arg.InputComposerTemplates)
            {
                ComposerTemplate newComposerTemplate      = composerTemplate.ToComposerTemplate();
                ComposerTemplate existingComposerTemplate = existingComposerTemplates.FirstOrDefault(element => element.Id.Equals(newComposerTemplate.Id));
                if (existingComposerTemplate != null)
                {
                    // Try to increase version count instead of delete
                    DeleteEntityArgument result = await _deleteEntityCommand.Process(context.CommerceContext, existingComposerTemplate.Id);

                    if (!result.Success)
                    {
                        Log.Error($"OverrideComposerTemplatesBlock: Deletion of {newComposerTemplate.Id} failed - new Template was not imported");
                    }
                }

                var persistResult = await this._persistEntityCommand.Process(context.CommerceContext, newComposerTemplate);
            }

            arg.Success = true;
            return(await Task.FromResult(arg));
        }
        /// <summary>
        /// Save Commmerce Entities collection into Commerce DB
        /// </summary>
        /// <param name="entityModel"></param>
        /// <param name="context"></param>
        /// <returns></returns>
        public async Task ImportCommerceEntities(EntityCollectionModel entityModel, CommercePipelineExecutionContext context)
        {
            try
            {
                foreach (var commerceEntity in entityModel.Entities)
                {
                    var entity         = Cast(commerceEntity, entityModel.EntityType);
                    var existingEntity = await _findEntityCommand.Process(context.CommerceContext, entity.GetType(), entity.Id);

                    if (existingEntity != null)
                    {
                        // Try to increase version count instead of delete
                        DeleteEntityArgument result = await _deleteEntityCommand.Process(context.CommerceContext, existingEntity.Id);

                        if (!result.Success)
                        {
                            Log.Error($"{this.GetType().Name}: Deletion of {existingEntity.Id} failed - new Entity was not imported");
                        }
                        else
                        {
                            entity.Version = 0;
                        }
                    }

                    //entity.EntityVersion = 1;
                    //entity.Version = 0;
                    entity.IsPersisted = false;
                    context.CommerceContext.AddUniqueEntityByType(entity);


                    var persistResult = await this._persistEntityCommand.Process(context.CommerceContext, entity);
                }

                if (entityModel.EntityType == typeof(Category))
                {
                    await AssociateCategoriesToParent(entityModel, context);
                }

                if (entityModel.EntityType == typeof(SellableItem))
                {
                    await AssociateSellableItemsToParent(entityModel, context);
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }