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
Plotting with different color for a single curve
Is my Rep in Stack-Exchange Form?
How come I was asked by a CBP officer why I was in the US?
Did Karl Marx ever use any example that involved cotton and dollars to illustrate the way capital and surplus value were generated?
Is there any evidence that the small canisters (10 liters) of 95% oxygen actually help with altitude sickness?
Why do some professors with PhDs leave their professorships to teach high school?
Do French speakers not use the subjunctive informally?
Links to webpages in books
What do you call a weak person's act of taking on bigger opponents?
Impossible darts scores
Can the negators "jamais, rien, personne, plus, ni, aucun" be used in a single sentence?
What kind of wire should I use to pigtail an outlet?
Why do textbooks often include the solutions to odd or even numbered problems but not both?
Is it damaging to turn off a small fridge for two days every week?
Character discovers anti gravity emitters, flies a shipping container into space and docks with space station
Analog is Obtuse!
Unusual mail headers, evidence of an attempted attack. Have I been pwned?
Dimensions of list used in test
How to determine what is the correct level of detail when modelling?
First-year PhD giving a talk among well-established researchers in the field
Through the Looking-Glass
What happens when I sacrifice a creature when my Teysa Karlov is on the battlefield?
A player is constantly pestering me about rules, what do I do as a DM?
No IMPLICIT_CONVERSION warning in this query plan
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;
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
add a comment |
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
add a comment |
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
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
data-exchange-framework
edited Jun 7 at 13:25
Gatogordo
13.1k2 gold badges18 silver badges66 bronze badges
13.1k2 gold badges18 silver badges66 bronze badges
asked Jun 7 at 12:26
Igor EvstratovIgor Evstratov
1383 bronze badges
1383 bronze badges
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
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:
- Add a custom pipeline step template
- Add a plugin for settings
- Add a pipeline step converter
- Add a pipeline step processor
- Update the standard values of your template to reference your step converter and processor
1. Create your template
- 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
- I created mine at
- Add
/sitecore/templates/Data Exchange/Framework/Pipeline Steps/Base Pipeline Steps/Base Pipeline Step
as a base template - 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)
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)
5. Update standard values
- In Sitecore, navigate to the standard values of your custom pipeline step template you created back in step 1
- 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
Thank you for sharing your approach with codes! Makes perfect sense for me.
– Igor Evstratov
Jun 8 at 15:55
add a comment |
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
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
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:
- Add a custom pipeline step template
- Add a plugin for settings
- Add a pipeline step converter
- Add a pipeline step processor
- Update the standard values of your template to reference your step converter and processor
1. Create your template
- 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
- I created mine at
- Add
/sitecore/templates/Data Exchange/Framework/Pipeline Steps/Base Pipeline Steps/Base Pipeline Step
as a base template - 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)
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)
5. Update standard values
- In Sitecore, navigate to the standard values of your custom pipeline step template you created back in step 1
- 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
Thank you for sharing your approach with codes! Makes perfect sense for me.
– Igor Evstratov
Jun 8 at 15:55
add a comment |
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:
- Add a custom pipeline step template
- Add a plugin for settings
- Add a pipeline step converter
- Add a pipeline step processor
- Update the standard values of your template to reference your step converter and processor
1. Create your template
- 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
- I created mine at
- Add
/sitecore/templates/Data Exchange/Framework/Pipeline Steps/Base Pipeline Steps/Base Pipeline Step
as a base template - 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)
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)
5. Update standard values
- In Sitecore, navigate to the standard values of your custom pipeline step template you created back in step 1
- 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
Thank you for sharing your approach with codes! Makes perfect sense for me.
– Igor Evstratov
Jun 8 at 15:55
add a comment |
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:
- Add a custom pipeline step template
- Add a plugin for settings
- Add a pipeline step converter
- Add a pipeline step processor
- Update the standard values of your template to reference your step converter and processor
1. Create your template
- 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
- I created mine at
- Add
/sitecore/templates/Data Exchange/Framework/Pipeline Steps/Base Pipeline Steps/Base Pipeline Step
as a base template - 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)
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)
5. Update standard values
- In Sitecore, navigate to the standard values of your custom pipeline step template you created back in step 1
- 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
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:
- Add a custom pipeline step template
- Add a plugin for settings
- Add a pipeline step converter
- Add a pipeline step processor
- Update the standard values of your template to reference your step converter and processor
1. Create your template
- 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
- I created mine at
- Add
/sitecore/templates/Data Exchange/Framework/Pipeline Steps/Base Pipeline Steps/Base Pipeline Step
as a base template - 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)
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)
5. Update standard values
- In Sitecore, navigate to the standard values of your custom pipeline step template you created back in step 1
- 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
edited Jun 7 at 13:31
answered Jun 7 at 13:14
Dan SinclairDan Sinclair
2,9732 gold badges8 silver badges30 bronze badges
2,9732 gold badges8 silver badges30 bronze badges
Thank you for sharing your approach with codes! Makes perfect sense for me.
– Igor Evstratov
Jun 8 at 15:55
add a comment |
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
add a comment |
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.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
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