One of the most important things in technology is curiosity and this will lead you to find new ways to do things, the other day I was checking all the Tridion 2013 configuration files and I realized that the new version of Tridion.ContentManager.config file has a new section that allow me to register different types of Workflow Scripts.
<workflowScriptTypes>
<add
name="CSharp"
scriptContentHandlerType="Tridion.ContentManager.Workflow.CSharpScriptContentHandler"
executorType="Tridion.ContentManager.Workflow.CSharpScriptExecutor"
assemblyName="Tridion.ContentManager.Workflow, Version=7.0.0.2303, Culture=neutral, PublicKeyToken=ddfc895746e5ee6b" />
<add
name="ExternalActivity"
titleResource="msgExternalActivityScriptType"
scriptContentHandlerType="Tridion.ContentManager.Workflow.ExternalActivityScriptContentHandler"
executorType="Tridion.ContentManager.Workflow.ExternalActivityExecutor"
assemblyName="Tridion.ContentManager.Workflow, Version=7.0.0.2303, Culture=neutral, PublicKeyToken=ddfc895746e5ee6b" />
</workflowScriptTypes>
This feature is not documented but with some .Net knowledge we will make it to work
What I need to create my own Workflow Script Type?
It is mandatory to develop 2 classes, one to execute your new script type and one to validate it.Script Type Executor
In order to develop a new Script Type Executor we will need implement the IScriptExecutor interface and implement the ExecuteScript method as in the following sample.using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Reflection;
using System.ServiceModel;
using System.Text;
using System.Text.RegularExpressions;
using Tridion.ContentManager;
using Tridion.ContentManager.CoreService.Client;
using Tridion.ContentManager.Workflow;
using Tridion.Extension.Framework.Workflow.Handlers;
using Tridion.Localization;
using Tridion.Logging;
namespace Tridion.Extension.Framework.Workflow {
public class YAWFActivityExecutor : IScriptExecutor {
public string ExecuteScript(string script, string currentActivityInstanceId, string processInstanceXml) {
}
}
}
The ExecuteScript receives the following parameters.
- Script: the script specified in the Activity Script box.
- currentActivityInstanceId: executing activity id, it is the starting point to start creating tridion objects.
- processInstanceXml: process instance xml, it will allow you to manage Process Variables.
Script Content Handler
This class will validate your script and make sure it is a valid script. The syntax depends on you since the script you are defining is your own design.using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Tridion.ContentManager.Workflow;
namespace Tridion.Extension.Framework.Workflow {
public class YAWFActivityScriptContentHandler : ScriptContentHandler {
public override void Validate() {
}
}
}
Registering your Script Type
The assembly needs to have a strong name and be registered in the GAC. Once your assembly is registered in the GAC the next step is to add your script to the list of WorkflowScriptTypes.<workflowScriptTypes>
<add
name="CSharp"
titleResource="msgCSharpWorkflowScriptType"
scriptContentHandlerType="Tridion.ContentManager.Workflow.CSharpScriptContentHandler"
executorType="Tridion.ContentManager.Workflow.CSharpScriptExecutor"
assemblyName="Tridion.ContentManager.Workflow, Version=7.0.0.2303, Culture=neutral, PublicKeyToken=ddfc895746e5ee6b" />
<add
name="ExternalActivity"
titleResource="msgExternalActivityScriptType"
scriptContentHandlerType="Tridion.ContentManager.Workflow.ExternalActivityScriptContentHandler"
executorType="Tridion.ContentManager.Workflow.ExternalActivityExecutor"
assemblyName="Tridion.ContentManager.Workflow, Version=7.0.0.2303, Culture=neutral, PublicKeyToken=ddfc895746e5ee6b" />
<add
name="YAWF ExternalActivity"
scriptContentHandlerType="Tridion.Extension.Framework.Workflow.YAWFActivityScriptContentHandler"
executorType="Tridion.Extension.Framework.Workflow.YAWFActivityExecutor"
assemblyName="WorkflowFramework, Version=4.0.0.0, Culture=neutral, PublicKeyToken=a7e94891d1e8b7e1" />
</workflowScriptTypes>
Using your Custom Script
You should be able to see it in the Workflow Designer in Visio.And add your own script