Documentation Center

External Activity samples

Some simple sample implementations of External Activities.

Stub

This stub implementation only logs a message.

using System.IO;
using Tridion.ContentManager.CoreService.Client;
using Tridion.ContentManager.CoreService.Workflow;

namespace ExternalClassLibrary
{
	public class MyClass : ExternalActivity
	{
		protected override void Execute()
		{
			CoreServiceClient.FinishActivity(ActivityInstance.Id, new ActivityFinishData { Message = "Finished" }, null);
		}
	}
}
One-day delay

This stub implementation delays finishing the Activity for one day.

using System;
using Tridion.ContentManager.CoreService.Client;
using Tridion.ContentManager.CoreService.Workflow;

namespace ExternalAssemblyOverrideMethods
{
	public class MyClass : ExternalActivity
	{
		protected override void Resume()
		{
			CoreServiceClient.FinishActivity(ActivityInstance.Id, new ActivityFinishData(), null);
		}
		protected override void Execute()
		{
			CoreServiceClient.SuspendActivity(ActivityInstance.Id, "Reason", DateTime.Now.AddDays(1), "ResumeBookmark", null);
		}
	}
}
Passing a variable
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Tridion.ContentManager.CoreService.Client;
using Tridion.ContentManager.CoreService.Workflow;

namespace ExternalAssemblyProperties
{
	public class MyClass : ExternalActivity
	{
		protected override void Execute()
		{
			ProcessInstance.Variables.Add("SomeActivityFinished", true.ToString());
			CoreServiceClient.FinishActivity(ActivityInstance.Id, new ActivityFinishData { Message = "Finished" }, null);
		}
	}
}
Publishing content

This class publishes content to a target. (Both the content and the Target Type are presented as hardcoded Content Manager URIs.)

using System;
using Tridion.ContentManager.CoreService.Client;
using Tridion.ContentManager.CoreService.Workflow;

namespace ExternalAssemblyProperties
{
	public class MyClass : ExternalActivity
	{
		protected override void Execute()
		{
			PublishInstructionData publishInstruction = new PublishInstructionData();
			publishInstruction.ResolveInstruction = new ResolveInstructionData();
			publishInstruction.RenderInstruction = new RenderInstructionData();

			String[] itemsToPublish = new [] { "tcm:1-45" };
			String[] targets = new [] { "tcm:0-1-65537" };

			PublishTransactionData[] publishTransactions = CoreServiceClient.Publish(itemsToPublish, publishInstruction, targets, PublishPriority.Normal, null);
			ProcessInstance.Variables.Add("PublishTransaction", publishTransactions[0].Id);

			CoreServiceClient.FinishActivity(ActivityInstance.Id, new ActivityFinishData { Message = "Finished" }, null);
		}
	}
}
Undoing a publish transaction

This implementation undoes a publish transaction. This functionality is preferably used in a Workflow Process Definition, where the chances of achieving a successful undo are optimal. This code sample assumes a variable called "PublishTransaction", as introduced in the code sample above.

using System;
using Tridion.ContentManager.CoreService.Client;
using Tridion.ContentManager.CoreService.Workflow;

namespace ExternalAssemblyProperties
{
	public class MyClass : ExternalActivity
	{
		protected override void Execute()
		{
			String publishTransactionId = ProcessInstance.Variables["PublishTransaction"];
			CoreServiceClient.UndoPublishTransaction(publishTransactionId, QueueMessagePriority.Normal, null);

			CoreServiceClient.FinishActivity(ActivityInstance.Id, new ActivityFinishData { Message = "Finished" }, null);
		}
	}
}