/// <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; } }