I am trying to publish a component just after Save event using Event System automatically. I have used the below code.
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Tridion.ContentManager;
using Tridion.ContentManager.CommunicationManagement;
using Tridion.ContentManager.ContentManagement;
using Tridion.ContentManager.Extensibility;
using Tridion.ContentManager.Extensibility.Events;
using Tridion.ContentManager.Publishing;
using Tridion.Logging;
namespace PublishComponentOnSave
{
[TcmExtension("PublishComponentOnSaveExtension")]
public class PublishComponentOnSave : TcmExtension
{
public PublishComponentOnSave()
{
Subscribe();
}
public void Subscribe()
{
EventSystem.Subscribe<IdentifiableObject, SaveEventArgs>(PublishComponent, EventPhases.TransactionCommitted);
}
private void PublishComponent(IdentifiableObject subject, SaveEventArgs args, EventPhases phase)
{
Component cmp = subject as Component;
if (cmp.Schema.Title == "Article")
{
IdentifiableObject item = (IdentifiableObject)subject;
IEnumerable<IdentifiableObject> items = new List<IdentifiableObject>() { subject };
RenderInstruction rndr = new RenderInstruction(subject.Session);
rndr.RenderMode = RenderMode.Publish;
ResolveInstruction resolveIns = new ResolveInstruction(subject.Session);
resolveIns.IncludeComponentLinks = true;
PublishInstruction pubInstruction = new PublishInstruction(subject.Session)
{
DeployAt = DateTime.Now,
MaximumNumberOfRenderFailures = 5,
RenderInstruction = rndr,
ResolveInstruction = resolveIns,
StartAt = DateTime.MinValue
};
TcmUri pubTargeturi = new TcmUri("tcm:0-4-65537");
PublicationTarget pubTarget = new PublicationTarget(pubTargeturi, subject.Session);
IEnumerable<PublicationTarget> lstPubTarget = new List<PublicationTarget>() { pubTarget };
PublishEngine.Publish(items, pubInstruction, lstPubTarget);
}
}
}
}
But at the time of Publishing the item I am getting an error The item tcm:2033-5959-v0
does not exist." The component Id is tcm:2033-5959
.
Looks like the TCM id of the component is changed and the Publish engine can not recognize this. Below is the Event Viewer log
The item tcm:2033-5959-v0 does not exist.
Component: Tridion.ContentManager Errorcode: 810 User: NT AUTHORITY\NETWORK SERVICE StackTrace Information Details:
at Tridion.ContentManager.Utilities.AssertItemExists(TcmUri uri, Session session)
at Tridion.ContentManager.Publishing.PublishEngine.InternalCreatePublishTransactions(IEnumerable`1 items, PublishInstructionBase instruction, IEnumerable`1 targets, Nullable`1 priority)
at Tridion.ContentManager.Publishing.PublishEngine.CreatePublishTransactions(IEnumerable`1 items, PublishInstructionBase instruction, IEnumerable`1 targets, Nullable`1 priority)
at Tridion.ContentManager.Publishing.PublishEngine.Publish(IEnumerable`1 items, PublishInstruction publishInstruction, IEnumerable`1 publicationTargets)
at PublishComponentOnSave.PublishComponentOnSave.PublishComponent(Component subject, SaveEventArgs args, EventPhases phase) in c:\TridionEventHandler\PublishComponentOnSave\PublishComponentOnSave.cs:line 46
Please help.