Documentation Center

Automatic Activity C# sample scripts

Some simple sample C# scripts of Automatic Activities.

Stub script

This stub script only logs a message.

ActivityFinishData finishData = new ActivityFinishData()
{
	Message = "Finished"
};
SessionAwareCoreServiceClient.FinishActivity(CurrentActivityInstance.Id, finishData, null);
One-day delay

This stub script delays finishing the Activity for one day. The script is reached in two situations:

  • when the Activity has just started (the if clause)
  • when the Activity has been resumed after being suspended (the else clause)
if (string.IsNullOrEmpty(ResumeBookmark))
{
	SessionAwareCoreServiceClient.Suspend(CurrentActivityInstance.Id, "Temporary suspension", 
		DateTime.Now.AddDays(1), "TempBookmark", null);
}
else if (ResumeBookmark == "TempBookmark")
{
	ActivityFinishData finishData = new ActivityFinishData()
	{
		Message = "Finished"
	};
	SessionAwareCoreServiceClient.FinishActivity(CurrentActivityInstance.Id, finishData, null);
}
Passing a variable

The first Activity script (for an Activity called SomeActivity) sets a variable whose presence and value of true is used as a precondition for the second Activity script.

Script for SomeActivity:

ActivityFinishData finishData = new ActivityFinishData()
{
	Message = "Finished"
};
SessionAwareCoreServiceClient.FinishActivity(CurrentActivityInstance.Id, finishData, null);
ProcessInstance.Variables.Add("SomeActivityFinished", true.ToString());

Script for the other Activity:

if (!ProcessInstance.Variables.ContainsKey("SpecificActivityFinished")) || !bool.Parse(ProcessInstance.Variables["SpecificActivityFinished"]))
{
	throw new Exception("Incorrect Activity was executed");
}
ActivityFinishData finishData = new ActivityFinishData()
{
	Message = "Finished"
};
SessionAwareCoreServiceClient.FinishActivity(CurrentActivityInstance.Id, finishData, null);
Defining a method

This script the FinishedMessage method. Note that if the assembly and namespace being added here are supposed to be available in every C# script fragment you create, you can configure them in the Content Manager configuration file, Tridion.ContentManager.config, instead of mentioning them here.

<%@Assembly Name="System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"%>
<%@ Import Namespace="System.ServiceModel"%>
<%!
	private string FinishedMessage()
	{
		return "Finished " + BasicHttpSecurityMode.Message.ToString();
	}
%>
Logger.Verbose("Executing C# script");
ActivityFinishData finishData = new ActivityFinishData()
{
	Message = "Finished"
};
SessionAwareCoreServiceClient.FinishActivity(CurrentActivityInstance.Id, finishData, null);
Publishing content

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

PublishInstructionData publishInstruction = new PublishInstructionData();
publishInstruction.ResolveInstruction = new ResolveInstructionData();
publishInstruction.RenderInstruction = new RenderInstructionData();

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

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

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

This script 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.

String publishTransactionId = ProcessInstance.Variables["PublishTransaction"];
SessionAwareCoreServiceClient.UndoPublishTransaction(publishTransactionId, QueueMessagePriority.Normal, null);

ActivityFinishData finishData = new ActivityFinishData()
{
	Message = "Finished"
};
SessionAwareCoreServiceClient.FinishActivity(CurrentActivityInstance.Id, finishData, null);