private void AddCreateSitecoreItemSettings(ItemModel source, PipelineStep step) { //The default ResolveSitecoreItemSettings sitecoreItemSettings = new ResolveSitecoreItemSettings() { ParentItemIdItem = this.GetGuidValue(source, "ParentForItem"), MatchingFieldValueAccessor = this.ConvertReferenceToModel <IValueAccessor>(source, "MatchingFieldValueAccessor"), TemplateForNewItem = this.GetGuidValue(source, "TemplateForNewItem"), ItemNameValueAccessor = this.ConvertReferenceToModel <IValueAccessor>(source, "ItemNameValueAccessor") }; step.Plugins.Add((IPlugin)sitecoreItemSettings); //My endpoint and Language var settings = new ResolveSitecoreItemWithLanguageSettings(); var endpointFrom = base.ConvertReferenceToModel <Endpoint>(source, ResolveSitecoreItemWithLanguageStepItemModel.EndpointFrom); if (endpointFrom != null) { settings.EndpointFrom = endpointFrom; } settings.LanguageField = base.GetStringValue(source, ResolveSitecoreItemWithLanguageStepItemModel.LanguageField); step.Plugins.Add(settings); }
protected override object ResolveObject(object identifierValue, Endpoint endpoint, PipelineStep pipelineStep, PipelineContext pipelineContext) { if (identifierValue == null) { throw new ArgumentException("The value cannot be null.", "identifierValue"); } if (endpoint == null) { throw new ArgumentNullException("endpoint"); } if (pipelineStep == null) { throw new ArgumentNullException("pipelineStep"); } if (pipelineContext == null) { throw new ArgumentNullException("pipelineContext"); } ItemModelRepositorySettings repositorySettings = endpoint.GetItemModelRepositorySettings(); if (repositorySettings == null) { return((object)null); } IItemModelRepository itemModelRepository = repositorySettings.ItemModelRepository; if (itemModelRepository == null) { return((object)null); } ResolveSitecoreItemSettings sitecoreItemSettings = pipelineStep.GetResolveSitecoreItemSettings(); if (sitecoreItemSettings == null) { return((object)null); } ResolveObjectSettings resolveObjectSettings = pipelineStep.GetResolveObjectSettings(); if (resolveObjectSettings == null) { return((object)null); } ResolveSitecoreItemWithLanguageSettings languageSettings = pipelineStep.GetPlugin <ResolveSitecoreItemWithLanguageSettings>(); if (languageSettings == null) { return((ItemModel)null); } ItemModel sourceAsItemModel = this.GetSourceObjectAsItemModel(pipelineStep, pipelineContext); if (sourceAsItemModel == null) { return((ItemModel)null); } var language = sourceAsItemModel[languageSettings.LanguageField].ToString(); ILogger logger = pipelineContext.Logger; RepositoryObjectStatus status = RepositoryObjectStatus.DoesNotExist; ItemModel itemModel = this.DoSearch(identifierValue, sitecoreItemSettings, itemModelRepository, logger, pipelineContext); if (itemModel != null) { this.Log(new Action <string>(pipelineContext.Logger.Debug), pipelineContext, "Item was resolved.", string.Format("identifier: {0}", identifierValue), string.Format("item id: {0}", itemModel["ItemID"])); Sitecore.Diagnostics.Log.Error($"Item was resolved with identifierValue: {identifierValue} item id: {itemModel["ItemID"]}", this); status = RepositoryObjectStatus.Exists; } if (itemModel == null && !resolveObjectSettings.DoNotCreateIfObjectNotResolved) { this.Log(new Action <string>(logger.Debug), pipelineContext, "Item was not resolved. Will create it.", string.Format("identifier: {0}", identifierValue)); Sitecore.Diagnostics.Log.Error($"Item was not resolved. Will create it: {identifierValue} ", this); itemModel = this.CreateNewItem(this.GetIdentifierObject(pipelineStep, pipelineContext), itemModelRepository, sitecoreItemSettings, logger, pipelineContext, language); if (itemModel == null) { this.Log(new Action <string>(logger.Error), pipelineContext, "Unable to create new item.", string.Format("identifier: {0}", identifierValue)); Sitecore.Diagnostics.Log.Error($"Unable to create new item with identifierValue: {identifierValue} ", this); } else { this.Log(new Action <string>(logger.Debug), pipelineContext, "New item was created.", string.Format("identifier: {0}", identifierValue)); Sitecore.Diagnostics.Log.Info($"Create new item with identifierValue: {identifierValue} ", this); } } this.SetRepositoryStatusSettings(status, pipelineContext); return((object)itemModel); }