How to publish items after pipeline is finished?How to add sitecore items with different language version by using Data Exchange frameworkRun Pipeline Batch button disabledGetting errors in Apply Mapping Pipeline Step when running pipeline batchSitecore Data Exchange Framework - Pipeline step to execute after Update Sitecore Item Pipeline StepDon't Index An Item In DEF Until All Items Have Been AddedPipeline Step to Resolve Target ItemCustom Pipeline Step never calledEmpty Pipeline Batch Log file after runningRESTful provider Pipeline Batch error: “One or more errors occurred”Batch Pipeline to sync contact

The last tree in the Universe

Looking for an iPhone app for working out chess problems

The title "Mord mit Aussicht" explained

How did the European Union reach the figure of 3% as a maximum allowed deficit?

New Site Design!

Converting 3x7 to a 1x7. Is it possible with only existing parts?

Idiom for 'person who gets violent when drunk"

Can an open source licence be revoked if it violates employer's IP?

How would Japanese people react to someone refusing to say “itadakimasu” for religious reasons?

SQL Server has encountered occurences of I/O requests taking longer than 15 seconds

Why can't we feel the Earth's revolution?

Fastest path on a snakes and ladders board

Any Volunteers for Card Counting?

Was the Lonely Mountain, where Smaug lived, a volcano?

Is fission/fusion to iron the most efficient way to convert mass to energy?

Arcane Tradition and Cost Efficiency: Learn spells on level-up, or learn them from scrolls/spellbooks?

My parents claim they cannot pay for my college education; what are my options?

How to search for Android apps without ads?

How long would it take for sucrose to undergo hydrolysis in boiling water?

Why is Skinner so awkward in Hot Fuzz?

How can Caller ID be faked?

How many times to repeat an event with known probability before it has occurred a number of times

Should I email my professor to clear up a (possibly very irrelevant) awkward misunderstanding?

What made the Ancient One do this in Endgame?



How to publish items after pipeline is finished?


How to add sitecore items with different language version by using Data Exchange frameworkRun Pipeline Batch button disabledGetting errors in Apply Mapping Pipeline Step when running pipeline batchSitecore Data Exchange Framework - Pipeline step to execute after Update Sitecore Item Pipeline StepDon't Index An Item In DEF Until All Items Have Been AddedPipeline Step to Resolve Target ItemCustom Pipeline Step never calledEmpty Pipeline Batch Log file after runningRESTful provider Pipeline Batch error: “One or more errors occurred”Batch Pipeline to sync contact






.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty margin-bottom:0;








6















I've utilized Data Exchange Framework and built pipeline batches.



Now it's unclear how the created/updated items can be published automatically. I did not find any publishing pipeline steps or even mention of publishing stuff in Sitecore.DataExchange. Publishing seems to be an essential step within pipeline after pulling data but looks like DEF is not responsible for that.



So, what is the right way of doing automatic publish when DEF is used?










share|improve this question









New contributor



Igor Evstratov is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.

























    6















    I've utilized Data Exchange Framework and built pipeline batches.



    Now it's unclear how the created/updated items can be published automatically. I did not find any publishing pipeline steps or even mention of publishing stuff in Sitecore.DataExchange. Publishing seems to be an essential step within pipeline after pulling data but looks like DEF is not responsible for that.



    So, what is the right way of doing automatic publish when DEF is used?










    share|improve this question









    New contributor



    Igor Evstratov is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
    Check out our Code of Conduct.





















      6












      6








      6


      1






      I've utilized Data Exchange Framework and built pipeline batches.



      Now it's unclear how the created/updated items can be published automatically. I did not find any publishing pipeline steps or even mention of publishing stuff in Sitecore.DataExchange. Publishing seems to be an essential step within pipeline after pulling data but looks like DEF is not responsible for that.



      So, what is the right way of doing automatic publish when DEF is used?










      share|improve this question









      New contributor



      Igor Evstratov is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.











      I've utilized Data Exchange Framework and built pipeline batches.



      Now it's unclear how the created/updated items can be published automatically. I did not find any publishing pipeline steps or even mention of publishing stuff in Sitecore.DataExchange. Publishing seems to be an essential step within pipeline after pulling data but looks like DEF is not responsible for that.



      So, what is the right way of doing automatic publish when DEF is used?







      data-exchange-framework






      share|improve this question









      New contributor



      Igor Evstratov is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.










      share|improve this question









      New contributor



      Igor Evstratov is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.








      share|improve this question




      share|improve this question








      edited Jun 7 at 13:25









      Gatogordo

      13.1k21866




      13.1k21866






      New contributor



      Igor Evstratov is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.








      asked Jun 7 at 12:26









      Igor EvstratovIgor Evstratov

      1333




      1333




      New contributor



      Igor Evstratov is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.




      New contributor




      Igor Evstratov is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.






















          1 Answer
          1






          active

          oldest

          votes


















          18














          You can add a custom pipeline step to perform the publishing. Below is an example of one that can publish either a specific item (e.g. the root item below which all your DEF items were imported) or an item in the pipeline context (e.g. each item as it's imported).



          As with all custom pipeline steps, you'll need to perform the following steps:



          1. Add a custom pipeline step template

          2. Add a plugin for settings

          3. Add a pipeline step converter

          4. Add a pipeline step processor

          5. Update the standard values of your template to reference your step converter and processor

          1. Create your template



          1. Create a new template called Publish Item Pipeline Step

            • I created mine at /sitecore/templates/Data Exchange/Providers/Sitecore/Pipeline Steps/Publish Item Pipeline Step


          2. Add /sitecore/templates/Data Exchange/Framework/Pipeline Steps/Base Pipeline Steps/Base Pipeline Step as a base template

          3. Add fields


            • EndpointFrom

              • Type: Droptree

              • Source: query:./ancestor-or-self::*[@@templateid='327A381B-59F8-4E88-B331-BEBC7BD87E4E']//descendant-or-self::*[@@templateid='CAADA2F1-1D71-452A-87BF-A3AE335CA169']



            • Item

              • Type: Droptree

              • Short Description: The exact item to publish. A value in this field will override the Item Location field.



            • ItemLocation

              • Type: Droplink

              • Source: DD61BBDB-CF41-40F6-9923-3031C7AB47C8

              • Short Description: Location within the pipeline's context of the item to publish



            • Publishing Targets

              • Type: Checklist

              • Source: /sitecore/system/Publishing targets



            • Publish Subitems

              • Type: Checkbox



          2. Add plugin



          using Sitecore.DataExchange;
          using Sitecore.Services.Core.Model;

          public class PublishItemSettings : IPlugin

          public ItemModel ItemModel get; set;
          public string[] TargetDatabaseNames get; set;
          public bool PublishSubitems get; set;



          3. Add pipeline step converter



          using System;
          using System.Collections.Generic;
          using System.Linq;
          using Sitecore.DataExchange;
          using Sitecore.DataExchange.Attributes;
          using Sitecore.DataExchange.Converters.PipelineSteps;
          using Sitecore.DataExchange.Extensions;
          using Sitecore.DataExchange.Models;
          using Sitecore.DataExchange.Plugins;
          using Sitecore.DataExchange.Repositories;
          using Sitecore.Services.Core.Model;

          [SupportedIds("YOUR-TEMPLATE-ID")]
          public class PublishItemPipelineStepConverter : BasePipelineStepConverter

          public PublishItemPipelineStepConverter(IItemModelRepository repository) : base(repository)

          private void AddPublishItemSettings(ItemModel source, PipelineStep pipelineStep)
          !publishingTargets.Any())

          Context.Logger.Error($"No publishing targets were selected for the pipeline step. (pipeline step: pipelineStep.Name, pipeline step item: source.GetItemId(), field: Publishing Targets)");
          return;


          var settings = new PublishItemSettings

          ItemModel = GetReferenceAsModel(source, "Item"),
          TargetDatabaseNames = publishingTargets.Select(model => GetStringValue(model, "Target database")).ToArray(),
          PublishSubitems = GetBoolValue(source, "Publish Subitems")
          ;

          pipelineStep.AddPlugin(settings);


          private void AddDataLocationSettings(ItemModel source, PipelineStep pipelineStep)

          if (pipelineStep == null)

          throw new ArgumentNullException(nameof(pipelineStep));


          var settings = new DataLocationSettings

          DataLocation = GetGuidValue(source, "ItemLocation")
          ;
          pipelineStep.AddPlugin(settings);


          private void AddEndpointSettings(ItemModel source, PipelineStep pipelineStep)

          var settings = new EndpointSettings();
          var endpoint = ConvertReferenceToModel<Endpoint>(source, "EndpointFrom");
          if (endpoint != null)

          settings.EndpointFrom = endpoint;


          pipelineStep.AddPlugin(settings);


          protected override void AddPlugins(ItemModel source, PipelineStep pipelineStep)

          this.AddPublishItemSettings(source, pipelineStep);
          this.AddDataLocationSettings(source, pipelineStep);
          this.AddEndpointSettings(source, pipelineStep);




          4. Add pipeline step processor



          using System;
          using System.Collections.Generic;
          using System.Linq;
          using Sitecore.Data;
          using Sitecore.Data.Items;
          using Sitecore.DataExchange.Attributes;
          using Sitecore.DataExchange.Contexts;
          using Sitecore.DataExchange.Extensions;
          using Sitecore.DataExchange.Models;
          using Sitecore.DataExchange.Plugins;
          using Sitecore.DataExchange.Providers.Sc.Extensions;
          using Sitecore.DataExchange.Providers.Sc.Processors.PipelineSteps;
          using Sitecore.Publishing;
          using Sitecore.Services.Core.Diagnostics;
          using Sitecore.Services.Core.Model;

          [RequiredPipelineStepPlugins(typeof(PublishItemSettings), typeof(DataLocationSettings), typeof(EndpointSettings))]
          public class PublishItemPipelineStepProcessor : UpdateSitecoreItemStepProcessor

          protected override void ProcessPipelineStep(PipelineStep pipelineStep, PipelineContext pipelineContext, ILogger logger)

          if (pipelineStep == null) throw new ArgumentNullException(nameof(pipelineStep));
          if (pipelineContext == null) throw new ArgumentNullException(nameof(pipelineContext));
          if (logger == null) throw new ArgumentNullException(nameof(logger));

          PublishItemSettings publishItemSettings = pipelineStep.GetPlugin<PublishItemSettings>();
          IEnumerable<ItemModel> itemsToPublish;
          if (publishItemSettings.ItemModel != null)

          itemsToPublish = new [] publishItemSettings.ItemModel ;

          else

          logger.Debug($"No direct item reference was specified in the pipeline step, so we are looking in the DataLocation field instead. (pipeline step: pipelineStep.Name, pipeline step identifier: pipelineStep.Identifier)");
          itemsToPublish = GetTargetObjectAsItemModels(pipelineStep, pipelineContext, logger);


          if (itemsToPublish == null



          5. Update standard values



          1. In Sitecore, navigate to the standard values of your custom pipeline step template you created back in step 1

          2. Populate the Converter Type and Processor Type fields with your custom types, for example:

            • Custom.DataExchange.Providers.Sc.PipelineSteps.PublishItemPipelineStepConverter,Custom.DataExchange

            • Custom.DataExchange.Providers.Sc.PipelineSteps.PublishItemPipelineStepProcessor,Custom.DataExchange






          share|improve this answer

























          • Thank you for sharing your approach with codes! Makes perfect sense for me.

            – Igor Evstratov
            Jun 8 at 15:55











          Your Answer








          StackExchange.ready(function()
          var channelOptions =
          tags: "".split(" "),
          id: "664"
          ;
          initTagRenderer("".split(" "), "".split(" "), channelOptions);

          StackExchange.using("externalEditor", function()
          // Have to fire editor after snippets, if snippets enabled
          if (StackExchange.settings.snippets.snippetsEnabled)
          StackExchange.using("snippets", function()
          createEditor();
          );

          else
          createEditor();

          );

          function createEditor()
          StackExchange.prepareEditor(
          heartbeatType: 'answer',
          autoActivateHeartbeat: false,
          convertImagesToLinks: false,
          noModals: true,
          showLowRepImageUploadWarning: true,
          reputationToPostImages: null,
          bindNavPrevention: true,
          postfix: "",
          imageUploader:
          brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
          contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
          allowUrls: true
          ,
          onDemand: true,
          discardSelector: ".discard-answer"
          ,immediatelyShowMarkdownHelp:true
          );



          );






          Igor Evstratov is a new contributor. Be nice, and check out our Code of Conduct.









          draft saved

          draft discarded


















          StackExchange.ready(
          function ()
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fsitecore.stackexchange.com%2fquestions%2f19237%2fhow-to-publish-items-after-pipeline-is-finished%23new-answer', 'question_page');

          );

          Post as a guest















          Required, but never shown

























          1 Answer
          1






          active

          oldest

          votes








          1 Answer
          1






          active

          oldest

          votes









          active

          oldest

          votes






          active

          oldest

          votes









          18














          You can add a custom pipeline step to perform the publishing. Below is an example of one that can publish either a specific item (e.g. the root item below which all your DEF items were imported) or an item in the pipeline context (e.g. each item as it's imported).



          As with all custom pipeline steps, you'll need to perform the following steps:



          1. Add a custom pipeline step template

          2. Add a plugin for settings

          3. Add a pipeline step converter

          4. Add a pipeline step processor

          5. Update the standard values of your template to reference your step converter and processor

          1. Create your template



          1. Create a new template called Publish Item Pipeline Step

            • I created mine at /sitecore/templates/Data Exchange/Providers/Sitecore/Pipeline Steps/Publish Item Pipeline Step


          2. Add /sitecore/templates/Data Exchange/Framework/Pipeline Steps/Base Pipeline Steps/Base Pipeline Step as a base template

          3. Add fields


            • EndpointFrom

              • Type: Droptree

              • Source: query:./ancestor-or-self::*[@@templateid='327A381B-59F8-4E88-B331-BEBC7BD87E4E']//descendant-or-self::*[@@templateid='CAADA2F1-1D71-452A-87BF-A3AE335CA169']



            • Item

              • Type: Droptree

              • Short Description: The exact item to publish. A value in this field will override the Item Location field.



            • ItemLocation

              • Type: Droplink

              • Source: DD61BBDB-CF41-40F6-9923-3031C7AB47C8

              • Short Description: Location within the pipeline's context of the item to publish



            • Publishing Targets

              • Type: Checklist

              • Source: /sitecore/system/Publishing targets



            • Publish Subitems

              • Type: Checkbox



          2. Add plugin



          using Sitecore.DataExchange;
          using Sitecore.Services.Core.Model;

          public class PublishItemSettings : IPlugin

          public ItemModel ItemModel get; set;
          public string[] TargetDatabaseNames get; set;
          public bool PublishSubitems get; set;



          3. Add pipeline step converter



          using System;
          using System.Collections.Generic;
          using System.Linq;
          using Sitecore.DataExchange;
          using Sitecore.DataExchange.Attributes;
          using Sitecore.DataExchange.Converters.PipelineSteps;
          using Sitecore.DataExchange.Extensions;
          using Sitecore.DataExchange.Models;
          using Sitecore.DataExchange.Plugins;
          using Sitecore.DataExchange.Repositories;
          using Sitecore.Services.Core.Model;

          [SupportedIds("YOUR-TEMPLATE-ID")]
          public class PublishItemPipelineStepConverter : BasePipelineStepConverter

          public PublishItemPipelineStepConverter(IItemModelRepository repository) : base(repository)

          private void AddPublishItemSettings(ItemModel source, PipelineStep pipelineStep)
          !publishingTargets.Any())

          Context.Logger.Error($"No publishing targets were selected for the pipeline step. (pipeline step: pipelineStep.Name, pipeline step item: source.GetItemId(), field: Publishing Targets)");
          return;


          var settings = new PublishItemSettings

          ItemModel = GetReferenceAsModel(source, "Item"),
          TargetDatabaseNames = publishingTargets.Select(model => GetStringValue(model, "Target database")).ToArray(),
          PublishSubitems = GetBoolValue(source, "Publish Subitems")
          ;

          pipelineStep.AddPlugin(settings);


          private void AddDataLocationSettings(ItemModel source, PipelineStep pipelineStep)

          if (pipelineStep == null)

          throw new ArgumentNullException(nameof(pipelineStep));


          var settings = new DataLocationSettings

          DataLocation = GetGuidValue(source, "ItemLocation")
          ;
          pipelineStep.AddPlugin(settings);


          private void AddEndpointSettings(ItemModel source, PipelineStep pipelineStep)

          var settings = new EndpointSettings();
          var endpoint = ConvertReferenceToModel<Endpoint>(source, "EndpointFrom");
          if (endpoint != null)

          settings.EndpointFrom = endpoint;


          pipelineStep.AddPlugin(settings);


          protected override void AddPlugins(ItemModel source, PipelineStep pipelineStep)

          this.AddPublishItemSettings(source, pipelineStep);
          this.AddDataLocationSettings(source, pipelineStep);
          this.AddEndpointSettings(source, pipelineStep);




          4. Add pipeline step processor



          using System;
          using System.Collections.Generic;
          using System.Linq;
          using Sitecore.Data;
          using Sitecore.Data.Items;
          using Sitecore.DataExchange.Attributes;
          using Sitecore.DataExchange.Contexts;
          using Sitecore.DataExchange.Extensions;
          using Sitecore.DataExchange.Models;
          using Sitecore.DataExchange.Plugins;
          using Sitecore.DataExchange.Providers.Sc.Extensions;
          using Sitecore.DataExchange.Providers.Sc.Processors.PipelineSteps;
          using Sitecore.Publishing;
          using Sitecore.Services.Core.Diagnostics;
          using Sitecore.Services.Core.Model;

          [RequiredPipelineStepPlugins(typeof(PublishItemSettings), typeof(DataLocationSettings), typeof(EndpointSettings))]
          public class PublishItemPipelineStepProcessor : UpdateSitecoreItemStepProcessor

          protected override void ProcessPipelineStep(PipelineStep pipelineStep, PipelineContext pipelineContext, ILogger logger)

          if (pipelineStep == null) throw new ArgumentNullException(nameof(pipelineStep));
          if (pipelineContext == null) throw new ArgumentNullException(nameof(pipelineContext));
          if (logger == null) throw new ArgumentNullException(nameof(logger));

          PublishItemSettings publishItemSettings = pipelineStep.GetPlugin<PublishItemSettings>();
          IEnumerable<ItemModel> itemsToPublish;
          if (publishItemSettings.ItemModel != null)

          itemsToPublish = new [] publishItemSettings.ItemModel ;

          else

          logger.Debug($"No direct item reference was specified in the pipeline step, so we are looking in the DataLocation field instead. (pipeline step: pipelineStep.Name, pipeline step identifier: pipelineStep.Identifier)");
          itemsToPublish = GetTargetObjectAsItemModels(pipelineStep, pipelineContext, logger);


          if (itemsToPublish == null



          5. Update standard values



          1. In Sitecore, navigate to the standard values of your custom pipeline step template you created back in step 1

          2. Populate the Converter Type and Processor Type fields with your custom types, for example:

            • Custom.DataExchange.Providers.Sc.PipelineSteps.PublishItemPipelineStepConverter,Custom.DataExchange

            • Custom.DataExchange.Providers.Sc.PipelineSteps.PublishItemPipelineStepProcessor,Custom.DataExchange






          share|improve this answer

























          • Thank you for sharing your approach with codes! Makes perfect sense for me.

            – Igor Evstratov
            Jun 8 at 15:55















          18














          You can add a custom pipeline step to perform the publishing. Below is an example of one that can publish either a specific item (e.g. the root item below which all your DEF items were imported) or an item in the pipeline context (e.g. each item as it's imported).



          As with all custom pipeline steps, you'll need to perform the following steps:



          1. Add a custom pipeline step template

          2. Add a plugin for settings

          3. Add a pipeline step converter

          4. Add a pipeline step processor

          5. Update the standard values of your template to reference your step converter and processor

          1. Create your template



          1. Create a new template called Publish Item Pipeline Step

            • I created mine at /sitecore/templates/Data Exchange/Providers/Sitecore/Pipeline Steps/Publish Item Pipeline Step


          2. Add /sitecore/templates/Data Exchange/Framework/Pipeline Steps/Base Pipeline Steps/Base Pipeline Step as a base template

          3. Add fields


            • EndpointFrom

              • Type: Droptree

              • Source: query:./ancestor-or-self::*[@@templateid='327A381B-59F8-4E88-B331-BEBC7BD87E4E']//descendant-or-self::*[@@templateid='CAADA2F1-1D71-452A-87BF-A3AE335CA169']



            • Item

              • Type: Droptree

              • Short Description: The exact item to publish. A value in this field will override the Item Location field.



            • ItemLocation

              • Type: Droplink

              • Source: DD61BBDB-CF41-40F6-9923-3031C7AB47C8

              • Short Description: Location within the pipeline's context of the item to publish



            • Publishing Targets

              • Type: Checklist

              • Source: /sitecore/system/Publishing targets



            • Publish Subitems

              • Type: Checkbox



          2. Add plugin



          using Sitecore.DataExchange;
          using Sitecore.Services.Core.Model;

          public class PublishItemSettings : IPlugin

          public ItemModel ItemModel get; set;
          public string[] TargetDatabaseNames get; set;
          public bool PublishSubitems get; set;



          3. Add pipeline step converter



          using System;
          using System.Collections.Generic;
          using System.Linq;
          using Sitecore.DataExchange;
          using Sitecore.DataExchange.Attributes;
          using Sitecore.DataExchange.Converters.PipelineSteps;
          using Sitecore.DataExchange.Extensions;
          using Sitecore.DataExchange.Models;
          using Sitecore.DataExchange.Plugins;
          using Sitecore.DataExchange.Repositories;
          using Sitecore.Services.Core.Model;

          [SupportedIds("YOUR-TEMPLATE-ID")]
          public class PublishItemPipelineStepConverter : BasePipelineStepConverter

          public PublishItemPipelineStepConverter(IItemModelRepository repository) : base(repository)

          private void AddPublishItemSettings(ItemModel source, PipelineStep pipelineStep)
          !publishingTargets.Any())

          Context.Logger.Error($"No publishing targets were selected for the pipeline step. (pipeline step: pipelineStep.Name, pipeline step item: source.GetItemId(), field: Publishing Targets)");
          return;


          var settings = new PublishItemSettings

          ItemModel = GetReferenceAsModel(source, "Item"),
          TargetDatabaseNames = publishingTargets.Select(model => GetStringValue(model, "Target database")).ToArray(),
          PublishSubitems = GetBoolValue(source, "Publish Subitems")
          ;

          pipelineStep.AddPlugin(settings);


          private void AddDataLocationSettings(ItemModel source, PipelineStep pipelineStep)

          if (pipelineStep == null)

          throw new ArgumentNullException(nameof(pipelineStep));


          var settings = new DataLocationSettings

          DataLocation = GetGuidValue(source, "ItemLocation")
          ;
          pipelineStep.AddPlugin(settings);


          private void AddEndpointSettings(ItemModel source, PipelineStep pipelineStep)

          var settings = new EndpointSettings();
          var endpoint = ConvertReferenceToModel<Endpoint>(source, "EndpointFrom");
          if (endpoint != null)

          settings.EndpointFrom = endpoint;


          pipelineStep.AddPlugin(settings);


          protected override void AddPlugins(ItemModel source, PipelineStep pipelineStep)

          this.AddPublishItemSettings(source, pipelineStep);
          this.AddDataLocationSettings(source, pipelineStep);
          this.AddEndpointSettings(source, pipelineStep);




          4. Add pipeline step processor



          using System;
          using System.Collections.Generic;
          using System.Linq;
          using Sitecore.Data;
          using Sitecore.Data.Items;
          using Sitecore.DataExchange.Attributes;
          using Sitecore.DataExchange.Contexts;
          using Sitecore.DataExchange.Extensions;
          using Sitecore.DataExchange.Models;
          using Sitecore.DataExchange.Plugins;
          using Sitecore.DataExchange.Providers.Sc.Extensions;
          using Sitecore.DataExchange.Providers.Sc.Processors.PipelineSteps;
          using Sitecore.Publishing;
          using Sitecore.Services.Core.Diagnostics;
          using Sitecore.Services.Core.Model;

          [RequiredPipelineStepPlugins(typeof(PublishItemSettings), typeof(DataLocationSettings), typeof(EndpointSettings))]
          public class PublishItemPipelineStepProcessor : UpdateSitecoreItemStepProcessor

          protected override void ProcessPipelineStep(PipelineStep pipelineStep, PipelineContext pipelineContext, ILogger logger)

          if (pipelineStep == null) throw new ArgumentNullException(nameof(pipelineStep));
          if (pipelineContext == null) throw new ArgumentNullException(nameof(pipelineContext));
          if (logger == null) throw new ArgumentNullException(nameof(logger));

          PublishItemSettings publishItemSettings = pipelineStep.GetPlugin<PublishItemSettings>();
          IEnumerable<ItemModel> itemsToPublish;
          if (publishItemSettings.ItemModel != null)

          itemsToPublish = new [] publishItemSettings.ItemModel ;

          else

          logger.Debug($"No direct item reference was specified in the pipeline step, so we are looking in the DataLocation field instead. (pipeline step: pipelineStep.Name, pipeline step identifier: pipelineStep.Identifier)");
          itemsToPublish = GetTargetObjectAsItemModels(pipelineStep, pipelineContext, logger);


          if (itemsToPublish == null



          5. Update standard values



          1. In Sitecore, navigate to the standard values of your custom pipeline step template you created back in step 1

          2. Populate the Converter Type and Processor Type fields with your custom types, for example:

            • Custom.DataExchange.Providers.Sc.PipelineSteps.PublishItemPipelineStepConverter,Custom.DataExchange

            • Custom.DataExchange.Providers.Sc.PipelineSteps.PublishItemPipelineStepProcessor,Custom.DataExchange






          share|improve this answer

























          • Thank you for sharing your approach with codes! Makes perfect sense for me.

            – Igor Evstratov
            Jun 8 at 15:55













          18












          18








          18







          You can add a custom pipeline step to perform the publishing. Below is an example of one that can publish either a specific item (e.g. the root item below which all your DEF items were imported) or an item in the pipeline context (e.g. each item as it's imported).



          As with all custom pipeline steps, you'll need to perform the following steps:



          1. Add a custom pipeline step template

          2. Add a plugin for settings

          3. Add a pipeline step converter

          4. Add a pipeline step processor

          5. Update the standard values of your template to reference your step converter and processor

          1. Create your template



          1. Create a new template called Publish Item Pipeline Step

            • I created mine at /sitecore/templates/Data Exchange/Providers/Sitecore/Pipeline Steps/Publish Item Pipeline Step


          2. Add /sitecore/templates/Data Exchange/Framework/Pipeline Steps/Base Pipeline Steps/Base Pipeline Step as a base template

          3. Add fields


            • EndpointFrom

              • Type: Droptree

              • Source: query:./ancestor-or-self::*[@@templateid='327A381B-59F8-4E88-B331-BEBC7BD87E4E']//descendant-or-self::*[@@templateid='CAADA2F1-1D71-452A-87BF-A3AE335CA169']



            • Item

              • Type: Droptree

              • Short Description: The exact item to publish. A value in this field will override the Item Location field.



            • ItemLocation

              • Type: Droplink

              • Source: DD61BBDB-CF41-40F6-9923-3031C7AB47C8

              • Short Description: Location within the pipeline's context of the item to publish



            • Publishing Targets

              • Type: Checklist

              • Source: /sitecore/system/Publishing targets



            • Publish Subitems

              • Type: Checkbox



          2. Add plugin



          using Sitecore.DataExchange;
          using Sitecore.Services.Core.Model;

          public class PublishItemSettings : IPlugin

          public ItemModel ItemModel get; set;
          public string[] TargetDatabaseNames get; set;
          public bool PublishSubitems get; set;



          3. Add pipeline step converter



          using System;
          using System.Collections.Generic;
          using System.Linq;
          using Sitecore.DataExchange;
          using Sitecore.DataExchange.Attributes;
          using Sitecore.DataExchange.Converters.PipelineSteps;
          using Sitecore.DataExchange.Extensions;
          using Sitecore.DataExchange.Models;
          using Sitecore.DataExchange.Plugins;
          using Sitecore.DataExchange.Repositories;
          using Sitecore.Services.Core.Model;

          [SupportedIds("YOUR-TEMPLATE-ID")]
          public class PublishItemPipelineStepConverter : BasePipelineStepConverter

          public PublishItemPipelineStepConverter(IItemModelRepository repository) : base(repository)

          private void AddPublishItemSettings(ItemModel source, PipelineStep pipelineStep)
          !publishingTargets.Any())

          Context.Logger.Error($"No publishing targets were selected for the pipeline step. (pipeline step: pipelineStep.Name, pipeline step item: source.GetItemId(), field: Publishing Targets)");
          return;


          var settings = new PublishItemSettings

          ItemModel = GetReferenceAsModel(source, "Item"),
          TargetDatabaseNames = publishingTargets.Select(model => GetStringValue(model, "Target database")).ToArray(),
          PublishSubitems = GetBoolValue(source, "Publish Subitems")
          ;

          pipelineStep.AddPlugin(settings);


          private void AddDataLocationSettings(ItemModel source, PipelineStep pipelineStep)

          if (pipelineStep == null)

          throw new ArgumentNullException(nameof(pipelineStep));


          var settings = new DataLocationSettings

          DataLocation = GetGuidValue(source, "ItemLocation")
          ;
          pipelineStep.AddPlugin(settings);


          private void AddEndpointSettings(ItemModel source, PipelineStep pipelineStep)

          var settings = new EndpointSettings();
          var endpoint = ConvertReferenceToModel<Endpoint>(source, "EndpointFrom");
          if (endpoint != null)

          settings.EndpointFrom = endpoint;


          pipelineStep.AddPlugin(settings);


          protected override void AddPlugins(ItemModel source, PipelineStep pipelineStep)

          this.AddPublishItemSettings(source, pipelineStep);
          this.AddDataLocationSettings(source, pipelineStep);
          this.AddEndpointSettings(source, pipelineStep);




          4. Add pipeline step processor



          using System;
          using System.Collections.Generic;
          using System.Linq;
          using Sitecore.Data;
          using Sitecore.Data.Items;
          using Sitecore.DataExchange.Attributes;
          using Sitecore.DataExchange.Contexts;
          using Sitecore.DataExchange.Extensions;
          using Sitecore.DataExchange.Models;
          using Sitecore.DataExchange.Plugins;
          using Sitecore.DataExchange.Providers.Sc.Extensions;
          using Sitecore.DataExchange.Providers.Sc.Processors.PipelineSteps;
          using Sitecore.Publishing;
          using Sitecore.Services.Core.Diagnostics;
          using Sitecore.Services.Core.Model;

          [RequiredPipelineStepPlugins(typeof(PublishItemSettings), typeof(DataLocationSettings), typeof(EndpointSettings))]
          public class PublishItemPipelineStepProcessor : UpdateSitecoreItemStepProcessor

          protected override void ProcessPipelineStep(PipelineStep pipelineStep, PipelineContext pipelineContext, ILogger logger)

          if (pipelineStep == null) throw new ArgumentNullException(nameof(pipelineStep));
          if (pipelineContext == null) throw new ArgumentNullException(nameof(pipelineContext));
          if (logger == null) throw new ArgumentNullException(nameof(logger));

          PublishItemSettings publishItemSettings = pipelineStep.GetPlugin<PublishItemSettings>();
          IEnumerable<ItemModel> itemsToPublish;
          if (publishItemSettings.ItemModel != null)

          itemsToPublish = new [] publishItemSettings.ItemModel ;

          else

          logger.Debug($"No direct item reference was specified in the pipeline step, so we are looking in the DataLocation field instead. (pipeline step: pipelineStep.Name, pipeline step identifier: pipelineStep.Identifier)");
          itemsToPublish = GetTargetObjectAsItemModels(pipelineStep, pipelineContext, logger);


          if (itemsToPublish == null



          5. Update standard values



          1. In Sitecore, navigate to the standard values of your custom pipeline step template you created back in step 1

          2. Populate the Converter Type and Processor Type fields with your custom types, for example:

            • Custom.DataExchange.Providers.Sc.PipelineSteps.PublishItemPipelineStepConverter,Custom.DataExchange

            • Custom.DataExchange.Providers.Sc.PipelineSteps.PublishItemPipelineStepProcessor,Custom.DataExchange






          share|improve this answer















          You can add a custom pipeline step to perform the publishing. Below is an example of one that can publish either a specific item (e.g. the root item below which all your DEF items were imported) or an item in the pipeline context (e.g. each item as it's imported).



          As with all custom pipeline steps, you'll need to perform the following steps:



          1. Add a custom pipeline step template

          2. Add a plugin for settings

          3. Add a pipeline step converter

          4. Add a pipeline step processor

          5. Update the standard values of your template to reference your step converter and processor

          1. Create your template



          1. Create a new template called Publish Item Pipeline Step

            • I created mine at /sitecore/templates/Data Exchange/Providers/Sitecore/Pipeline Steps/Publish Item Pipeline Step


          2. Add /sitecore/templates/Data Exchange/Framework/Pipeline Steps/Base Pipeline Steps/Base Pipeline Step as a base template

          3. Add fields


            • EndpointFrom

              • Type: Droptree

              • Source: query:./ancestor-or-self::*[@@templateid='327A381B-59F8-4E88-B331-BEBC7BD87E4E']//descendant-or-self::*[@@templateid='CAADA2F1-1D71-452A-87BF-A3AE335CA169']



            • Item

              • Type: Droptree

              • Short Description: The exact item to publish. A value in this field will override the Item Location field.



            • ItemLocation

              • Type: Droplink

              • Source: DD61BBDB-CF41-40F6-9923-3031C7AB47C8

              • Short Description: Location within the pipeline's context of the item to publish



            • Publishing Targets

              • Type: Checklist

              • Source: /sitecore/system/Publishing targets



            • Publish Subitems

              • Type: Checkbox



          2. Add plugin



          using Sitecore.DataExchange;
          using Sitecore.Services.Core.Model;

          public class PublishItemSettings : IPlugin

          public ItemModel ItemModel get; set;
          public string[] TargetDatabaseNames get; set;
          public bool PublishSubitems get; set;



          3. Add pipeline step converter



          using System;
          using System.Collections.Generic;
          using System.Linq;
          using Sitecore.DataExchange;
          using Sitecore.DataExchange.Attributes;
          using Sitecore.DataExchange.Converters.PipelineSteps;
          using Sitecore.DataExchange.Extensions;
          using Sitecore.DataExchange.Models;
          using Sitecore.DataExchange.Plugins;
          using Sitecore.DataExchange.Repositories;
          using Sitecore.Services.Core.Model;

          [SupportedIds("YOUR-TEMPLATE-ID")]
          public class PublishItemPipelineStepConverter : BasePipelineStepConverter

          public PublishItemPipelineStepConverter(IItemModelRepository repository) : base(repository)

          private void AddPublishItemSettings(ItemModel source, PipelineStep pipelineStep)
          !publishingTargets.Any())

          Context.Logger.Error($"No publishing targets were selected for the pipeline step. (pipeline step: pipelineStep.Name, pipeline step item: source.GetItemId(), field: Publishing Targets)");
          return;


          var settings = new PublishItemSettings

          ItemModel = GetReferenceAsModel(source, "Item"),
          TargetDatabaseNames = publishingTargets.Select(model => GetStringValue(model, "Target database")).ToArray(),
          PublishSubitems = GetBoolValue(source, "Publish Subitems")
          ;

          pipelineStep.AddPlugin(settings);


          private void AddDataLocationSettings(ItemModel source, PipelineStep pipelineStep)

          if (pipelineStep == null)

          throw new ArgumentNullException(nameof(pipelineStep));


          var settings = new DataLocationSettings

          DataLocation = GetGuidValue(source, "ItemLocation")
          ;
          pipelineStep.AddPlugin(settings);


          private void AddEndpointSettings(ItemModel source, PipelineStep pipelineStep)

          var settings = new EndpointSettings();
          var endpoint = ConvertReferenceToModel<Endpoint>(source, "EndpointFrom");
          if (endpoint != null)

          settings.EndpointFrom = endpoint;


          pipelineStep.AddPlugin(settings);


          protected override void AddPlugins(ItemModel source, PipelineStep pipelineStep)

          this.AddPublishItemSettings(source, pipelineStep);
          this.AddDataLocationSettings(source, pipelineStep);
          this.AddEndpointSettings(source, pipelineStep);




          4. Add pipeline step processor



          using System;
          using System.Collections.Generic;
          using System.Linq;
          using Sitecore.Data;
          using Sitecore.Data.Items;
          using Sitecore.DataExchange.Attributes;
          using Sitecore.DataExchange.Contexts;
          using Sitecore.DataExchange.Extensions;
          using Sitecore.DataExchange.Models;
          using Sitecore.DataExchange.Plugins;
          using Sitecore.DataExchange.Providers.Sc.Extensions;
          using Sitecore.DataExchange.Providers.Sc.Processors.PipelineSteps;
          using Sitecore.Publishing;
          using Sitecore.Services.Core.Diagnostics;
          using Sitecore.Services.Core.Model;

          [RequiredPipelineStepPlugins(typeof(PublishItemSettings), typeof(DataLocationSettings), typeof(EndpointSettings))]
          public class PublishItemPipelineStepProcessor : UpdateSitecoreItemStepProcessor

          protected override void ProcessPipelineStep(PipelineStep pipelineStep, PipelineContext pipelineContext, ILogger logger)

          if (pipelineStep == null) throw new ArgumentNullException(nameof(pipelineStep));
          if (pipelineContext == null) throw new ArgumentNullException(nameof(pipelineContext));
          if (logger == null) throw new ArgumentNullException(nameof(logger));

          PublishItemSettings publishItemSettings = pipelineStep.GetPlugin<PublishItemSettings>();
          IEnumerable<ItemModel> itemsToPublish;
          if (publishItemSettings.ItemModel != null)

          itemsToPublish = new [] publishItemSettings.ItemModel ;

          else

          logger.Debug($"No direct item reference was specified in the pipeline step, so we are looking in the DataLocation field instead. (pipeline step: pipelineStep.Name, pipeline step identifier: pipelineStep.Identifier)");
          itemsToPublish = GetTargetObjectAsItemModels(pipelineStep, pipelineContext, logger);


          if (itemsToPublish == null



          5. Update standard values



          1. In Sitecore, navigate to the standard values of your custom pipeline step template you created back in step 1

          2. Populate the Converter Type and Processor Type fields with your custom types, for example:

            • Custom.DataExchange.Providers.Sc.PipelineSteps.PublishItemPipelineStepConverter,Custom.DataExchange

            • Custom.DataExchange.Providers.Sc.PipelineSteps.PublishItemPipelineStepProcessor,Custom.DataExchange







          share|improve this answer














          share|improve this answer



          share|improve this answer








          edited Jun 7 at 13:31

























          answered Jun 7 at 13:14









          Dan SinclairDan Sinclair

          2,9532830




          2,9532830












          • Thank you for sharing your approach with codes! Makes perfect sense for me.

            – Igor Evstratov
            Jun 8 at 15:55

















          • Thank you for sharing your approach with codes! Makes perfect sense for me.

            – Igor Evstratov
            Jun 8 at 15:55
















          Thank you for sharing your approach with codes! Makes perfect sense for me.

          – Igor Evstratov
          Jun 8 at 15:55





          Thank you for sharing your approach with codes! Makes perfect sense for me.

          – Igor Evstratov
          Jun 8 at 15:55










          Igor Evstratov is a new contributor. Be nice, and check out our Code of Conduct.









          draft saved

          draft discarded


















          Igor Evstratov is a new contributor. Be nice, and check out our Code of Conduct.












          Igor Evstratov is a new contributor. Be nice, and check out our Code of Conduct.











          Igor Evstratov is a new contributor. Be nice, and check out our Code of Conduct.














          Thanks for contributing an answer to Sitecore Stack Exchange!


          • Please be sure to answer the question. Provide details and share your research!

          But avoid


          • Asking for help, clarification, or responding to other answers.

          • Making statements based on opinion; back them up with references or personal experience.

          To learn more, see our tips on writing great answers.




          draft saved


          draft discarded














          StackExchange.ready(
          function ()
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fsitecore.stackexchange.com%2fquestions%2f19237%2fhow-to-publish-items-after-pipeline-is-finished%23new-answer', 'question_page');

          );

          Post as a guest















          Required, but never shown





















































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown

































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown







          Popular posts from this blog

          Grendel Contents Story Scholarship Depictions Notes References Navigation menu10.1093/notesj/gjn112Berserkeree

          Area configuration aggregation error after install Porto themeMagento 2.1 CE Installed but front/backend not loading/workingCSS not loading on page within Magento 2 pageCannot install module in Magento 2no commands defined in the “setup” namespace. in Magento2Magento 2: Static files are present but shows 404Why do i have to always run the commands to clean cache in Magento 2.1.8?Failure reason: 'Unable to unserialize value.'Error 500 after magento migrationIn production mode the site does not loadMagento 2 : Error 500 after installing

          Middle Expansion Olielle Resaix Definition: Uttering songs of triumph shouting with joy triumphant exulting Sejunction Journal 붙다 달 고급 품목 외출 The stretch trades the screeching tin. Definition: The act of speaking with a drawl a drawl Cough Sand Definition: An uproar a quarrel a noisy outbreak Shake Iron Publicize Horse House Baby 사과 Resaix Flaggy Jelly Temporary Unequaled Puppet A drop in the bucket Shrew 성격 회원 성질 미팅 The burn frames the tacky quality. Materialistic The smoke reduces the way. Yammoe Nondescript Cheek 얼굴 배 약하다 날리다 타다 The illegal country shows the iron. Help Rule Drearien Smoke Teaching Meaty Wasp Abraham Lincoln Jaws 진심 수리하다 Size Cork Idea Convert Think Lark John Lennon 거울 청소 군 추천하다 아이스크림