Custom Approval Activity
- Last UpdatedJun 10, 2024
- 10 minute read
AVEVA Work Tasks provides a set of interfaces and their supporting classes and members that can be implemented in the class of a custom activity to develop a AVEVA Work Tasks human activity.
The following code sample shows how to create a sample Approval activity that looks and behaves like the AVEVA Work Tasks defined Approval activity.
Procedure
Dll Reference
System.Web
Workflow.NET.NET2
Skelta.HWS.ActivityHandler
Namespace Used
System
System.Web
System.Web.UI
System.Collections.Generic
System.Text
System.Collections
Workflow.NET.Engine
Workflow.NET.Interfaces
Skelta.Core
Skelta.HWS
Skelta.HWS.ActivityHandler
To create a Sample Custom Approval Activity
-
Go to Start > Visual Studio 2005 > New > Projects->Class Library->SampleApprovalActivity. This step will create a Class Library project in the path specified by the name SampleApprovalActivity.
-
Create two class files under the project SampleApprovalHandler.cs and SampleApprovalControl.cs.
-
In the SampleApprovalHandler.cs class file, inherit the HWSActivityProviderBase class which is the base class for all the resource activities.
-
In the SampleApprovalControl.cs class file, inherit the class ActivityUIBase which while rendering the Work Item detail view. Inherit the INativeWebFormUIControl interface and it is used for setting the Current Work Item context to be used in Work Item detail view.
SampleApprovalHandler.cs
using System;
using System.Collections.Generic;
using System.Text;
using Workflow.NET;
using Workflow.NET.Storage;
using Workflow.NET.Interfaces;
using Workflow.NET.Engine;
using Workflow.NET.Engine.Interfaces;
using Skelta.Core;
using Skelta.HWS;
using Skelta.HWS.WorkListChannel;
namespace SampleApproval
{
public class SampleApprovalHandler : HWSActivityProviderBase
{
public SampleApprovalHandler()
{
}
/// <summary>
/// Resolves the property names. Existing properties can be given different names using this API.
/// MaximumActorsRequiredForActionCompletion is used in the Skelta for getting the property value
/// as for approval it will be Affirmative Answer for Approval [% or Number] and for checklist it will /// be Affirmative Answer for CheckList [% or Number].
/// </summary>
/// <param name="propertyName">Standard property name.</param>
/// <returns>Property name set for the activity.</returns>
public override string ResolvePropertyName(string propertyName)
{
switch (propertyName)
{
case "MaximumActorsRequiredForActionCompletion":
return "Affirmative Answer for Approval [% or Number]";
case "MinimumActorsRequiredForActionCompletion":
return "Action Limit[% or Number]";
}
return base.ResolvePropertyName(propertyName);
}
/// <summary>
/// Based on decision status the action output is set.
/// </summary>
/// <param name="decisionStatus">Decision status which is internal status which is arrived based on decision counters.</param>
/// <param name="actionResult">Action result.</param>
/// <returns>Action output.</returns>
/// <remarks>
public override string GetActionOutput(string decisionStatus, out ActionResult actionResult)
{
string MappedActionOutput = "";
switch (decisionStatus.ToLower())
{
case "decisionsuccess":
MappedActionOutput = "Approved";
actionResult = ActionResult.Completed;
break;
case "decisionfailure":
MappedActionOutput = "Rejected";
actionResult = ActionResult.Completed;
break;
default:
MappedActionOutput = base.GetActionOutput(decisionStatus, out actionResult);
break;
}
return MappedActionOutput;
}
/// <summary>
/// Gets the possible status list for the activity meaning output for the activity.
/// </summary>
/// <returns>List of possible outputs.</returns>
public override Dictionary<string, string> GetPossibleStatusList()
{
Dictionary<string, string> valueAndDisplayName = new Dictionary<string, string>();
valueAndDisplayName.Add("Approved", "Approve");
valueAndDisplayName.Add("Rejected", "Reject");
return valueAndDisplayName;
}
/// <summary>
/// To set the output of the Activity as CompletionMaker or not.
/// </summary>
/// <param name="Status"></param>
/// <returns></returns>
public override bool IsCompletionMaker(string Status)
{
return true;
}
/// <summary>
/// Boolean flag to check if the status has to be alerted to engine if the output is not a completion maker.
/// </summary>
/// <param name="status">status</param>
/// <returns>true or false.</returns>
public override bool AlertCurrentStatusAsActionOutput(string Status)
{
return false;
}
}
}
SampleApprovalControl.cs
using System;
using System.Web;
using System.Web.UI;
using System.Collections.Generic;
using System.Text;
using Workflow.NET.Engine;
using Workflow.NET.Interfaces;
using Workflow.NET.Storage;
using Skelta.Core;
using Skelta.HWS;
using System.Collections;
using Skelta.HWS.ActivityHandler;
namespace SampleApproval
{
public class SampleApprovalControl : ActivityUIBase, INamingContainer,
Skelta.HWS.WorkListChannel.Web.INativeWebFormUIControl
{
public HWSActivity _HWSActivity;
public WorkItem _WorkItem;
Workflow.NET.Engine.Context WorkflowContext;
Workflow.NET.Log logger = new Workflow.NET.Log();
private Workflow.NET.Parser parseHtml = new Workflow.NET.Parser();
string strTempDirectoryPath = "", strDirectoryPath = "";
Workflow.NET.ActionsData _ActionsData;
/// <summary>
/// Initializes a new instance of the Sample ApprovalControl class.
/// </summary>
public SampleApprovalControl()
{
}
/// <summary>
/// This method is used to render the Workitem Detail view
/// </summary>
protected override void CreateChildControls()
{
string InternalStatus = _WorkItem.Status.ToUpper();
string ErrorMessage = "";
string ActionTaken = "";
string Comment = Context.Request["txtComment"];
if (Comment != null)
Comment = Comment.Trim();
//Getting the value of the button click
if (Context.Request["btnApprove"] != null)
{
ActionTaken = "Approve";
}
else if (Context.Request["btnReject"] != null)
{
ActionTaken = "Reject";
}
if (ActionTaken != "")
{
try
{
//Submitting the work item with the respective output
SynchronousActionData syncData = new SynchronousActionData(HttpContext.Current);
if (ActionTaken == "Approve")
{
_WorkItem.Submit("WebWorkList", "Approved", "", Comment, syncData);
}
else
{
_WorkItem.Submit("WebWorkList", "Rejected", "", Comment, syncData);
}
}
catch(Exception ex)
{
logger.LogError(ex,"Error while performing Approval Action" + ex.Message.ToString());
ErrorMessage = ex.Message.ToString();
}
//RefreshWorkItemList() is the commonfunction which is used for Refreshing
//the Workitem List after submitting the work item
this.Controls.Add(new LiteralControl("<script>RefreshWorkItemList();</script>"));
}
if (InternalStatus == "AW"|| InternalStatus == "OW" || InternalStatus == "HO")
{
//Error message is rendered below the notes.
base.ErrorMessage = ErrorMessage;
//This is called for Rendering a common UI in Workitem Detail View Which is displaying Subject,Notes and Manage Workitem drop down and also
// IFrame which will display the Custom Document view in Left hand side of Details view.
RenderCommonActivityUI(parseHtml);
//Rendering the Detail View UI(SampleApproveUI.htm)
this.Controls.Add(new LiteralControl(parseHtml.CheckAndProcessFileGetString(strDirectoryPath
+ "Activities\\Activity\\SampleApproveUI.htm", strTempDirectoryPath + "cache", "Activities\\Activity\\")));
}
}
protected override void Render(HtmlTextWriter writer)
{
this.RenderBeginTag(writer);
this.RenderChildren(writer);
this.RenderEndTag(writer);
}
/// <summary>
/// This method Provides information of the current work item instance.
/// </summary>
/// <param name="workItem">Current Workitem Instance</param>
/// <param name="channelName">Channel Name(WebWorkList)</param>
/// <param name="formName">Form Name(Approval Form)</param>
void Skelta.HWS.WorkListChannel.Web.INativeWebFormUIControl.SetContext(WorkItem workItem,
string channelName, string formName)
{
_WorkItem = workItem;
_HWSActivity = workItem.HWSActivity;
WorkflowContext = workItem.CurrentContext;
_ChannelName = channelName;
_FormName = formName;
strTempDirectoryPath = workItem.HWSActivity.CurrentContext.ProcessDefinition.ActionsDefinition.DirTemp;
strDirectoryPath = workItem.HWSActivity.CurrentContext.ProcessDefinition.ActionsDefinition.DirSourceElements;
_ActionsData = workItem.CurrentContext.ProcessDefinition.ActionsDefinition;
base.Initailize(this.Context, workItem);
}
}
}
-
Build the Class Library Project and place the assembly in the SkeltaInstalledPath\BPM.Net\bin folder.
-
Create an HTML Page by the name SampleApproveUI.htm in the SkeltaInstalledPath\BPM.NET\WorkflowElements\Default\en-US\Activities\Activity\ folder which is getting used for rendering the UI. Please copy the contents below in the created HTML page.
TABLE WIDTH="100%" height="100%" BORDER="0" CELLPADDING="2" CELLSPACING="1" bgcolor="#ffffff">
<%#errorMessage%>
<TR VALIGN="TOP" class="righttdbg">
<TD align="left" width="<%#iframewidth%>" bgcolor="<%#iframebgcolor%>">
<%#iframeui%>
</TD>
<TD VALIGN="TOP">
<TABLE WIDTH="100%" BORDER="0" CELLSPACING="1" CELLPADDING="4" >
<TR>
<TD align=left class="subtitle">
<strong>@@Comments@@</strong>
</TD>
</TR>
<TR>
<TD align="left">
<TEXTAREA name='txtComment' cols=35 rows=8 wrap="VIRTUAL" class="inputtextarea"></TEXTAREA>
</TD>
</TR>
<!--<TR>
<TD align="center"> </TD>
</TR>-->
</TABLE>
</TD>
</TR>
<TR VALIGN="TOP">
<TD> </TD>
<TD height="25" align="right" bgcolor="#ffffff">
<input type='SUBMIT' class="inputbutton" value='@@Approve@@' name='btnApprove' />
<input type='SUBMIT' class="inputbutton" value='@@Reject@@' name='btnReject' />
</TD>
</TR>
</TABLE>
-
Configure the Actions.Xml which will be in Skeltainstalledpath\BPM.NET\WorkflowElements\Default\en-US\Actions\XML for the Created Sample Approval under the Custom Activities Category. While configuring the Custom Activity, we need to specify the image filename of PNG type of size 40x40 for the custom activity which should be in the following folders. [SkeltaInstalledPath]\BPM.NET\WorkflowElements\Default\en-US\Actions\Images\Normal\Large, [SkeltaInstalledPath]\BPM.NET\WorkflowElements\Default\en-US\Actions\Images\Selected\Large,[SkeltaInstalledPath]\BPM.NET\BPMUITemplates\Default\ActivityImages.
Note: If an XML exception occurs after copying the below configuration in Actions.XML, open the actions.xml file in the browser and remove the extra spaces if any.
<action name="SampleApproval" helptemplate="ApprovalActionHelp.html" helptemplatewinheight="450" helptemplatewinwidth="600">
<description>SampleApprovalDescription</description>
<image resourcename="Approval.png"></image>
<handler classname="SampleApproval.SampleApprovalHandler" assembly="bin\SampleApprovalActivity.dll"></handler>
<visual-attributes>
<shape>roundedrectangle</shape>
<backcolor>lightgreen</backcolor>
<width>50</width>
<height>50</height>
</visual-attributes>
<report rendertype="xsl" xsl="ActionDescription.xsl">
<handler class="Workflow.NET.Report.ReportHandler" assembly="bin\Workflow.NET.ReportHandler.NET2.dll" />
<messages>
<message id="ActionStarted">
<![CDATA[Action <%#ActionName%> of type <%#ActionType%> initiated at
<script Language='javascript'>WriteClientTime('<%#EventTime%>',1);</script>.
]]>
</message>
<message id="ResourceScarcity">
<![CDATA[ Action <%#ActionName%> of type <%#ActionType%> completed execution due to
lack of actor.<%#ActionName%> completed with the output <%#ActionOutput%>.
]]>
</message>
<message id="FilteredResourceCount">
<![CDATA[
The <%#ActionType%> action <%#ActionName%> selected <%#ResourceCount%> actor<%#ResourceOrResources%>.
]]>
</message>
<message id="RequestResource">
<![CDATA[
The actor named <%#ResourceName%> with identifier <%#ResourceIdentifier%>
has been identified to take part in the <%#ActionName%> action.
]]>
</message>
<message id="ResourceUnavailable">
<![CDATA[
The actor <%#ResourceName%> with identifier <%#ResourceIdentifier%> and email <%#ResourceEmail%> is unavailable.<br>
The 'Ignore unavailable actor' property for the action was set to <%#IgnoreUnavailableResource%>.<br>
The 'Alternate actor allowed' property was set to <%#AlternateResourceAllowed%>.
]]>
</message>
<message id="AvailableResourceCount">
<![CDATA[
The action <%#ActionName%> request was sent to <%#ResourceCount%> actor<%#ResourceOrResources%>.<br>
The Minimum No.Of ownerships required is <%#PropertyMin. Acknowledgements [% or Number]()%>.<br>
The Maximum No.Of ownerships is
<%#PropertyMax. Acknowledgements [% or Number]()%>.<br>
The Minimum human activity count required is <%#PropertyAction Limit[% or Number]()%>.<br>
The Approval count required for the action to be approved is <%#PropertyAffirmative Answer for Approval [% or Number]()%>.<br>
]]>
</message>
<message id="TimeOutSet">
<![CDATA[
Timeout <%#TimeOutType%> scheduled at <script
language='javascript'>WriteClientTime('<%#TimeOutValue%>',1);</script>.
]]>
</message>
<message id="TimeOutWarningSet">
<![CDATA[
Timeout <%#TimeOutType%> warning scheduled at <script
language='javascript'>WriteClientTime('<%#TimeOutValue%>',1);</script>.
]]>
</message>
<message id="ActionForwarded">
<![CDATA[
Action <%#ActionName%> of type <%#ActionType%> was forwarded by actor
<%#ResourceName%> with identifier <%#ResourceIdentifier%>
to
<%#ResourceName1%> with identifier <%#ResourceIdentifier1%>
at <script
language='javascript'>WriteClientTime('<%#EventTime%>',1);</script>.
]]>
</message>
<message id="ActionCompleted">
<![CDATA[
Action <%#ActionName%> of type <%#ActionType%> completed execution at <script
language='javascript'>WriteClientTime('<%#EventTime%>',1);</script> with the output
<%#ActionOutput%>.
]]>
</message>
<message id="ActionSleeping">
<![CDATA[
<%#ResourceName%> with identifier <%#ResourceIdentifier%> selected
<%#ActionOutput%> for the
Action <%#ActionName%> of type <%#ActionType%>. <br> The Action executed with output
<%#ActionOutput%> at <script
language='javascript'>WriteClientTime('<%#EventTime%>',1);</script>.
]]>
</message>
<message id="ActionEvent">
<![CDATA[
<%#ResourceName%> with identifier <%#ResourceIdentifier%> has selected
"<b><%#ActionEvent%><b>" for the Action <%#ActionName%> of type
<%#ActionType%> at <script
language='javascript'>WriteClientTime('<%#EventTime%>',1);</script>.
The comment given by actor is :<%#ActionComment%>.
]]>
</message>
<message id="AckActionEvent">
<![CDATA[
<%#ResourceName%> with identifier <%#ResourceIdentifier%> has <%#ActionEvent%> for
the Action <%#ActionName%> of type <%#ActionType%> at <script
language='javascript'>WriteClientTime('<%#EventTime%>',1);</script>.
]]>
</message>
<message id="ActionEventOutput">
<![CDATA[
Perfomed <%#TimeOutType%> calculations based on the properties set.
The output <%#ActionOutput%> was alerted to engine at <script
language='javascript'>WriteClientTime('<%#EventTime%>',1);</script>.
]]>
</message>
<message id="SchedulerEvent">
<![CDATA[
Perfomed Timeout <%#TimeOutType%> from the scheduler at <script
language='javascript'>WriteClientTime('<%#EventTime%>',1);</script>.
The ouput <%#ActionOutput%> was alerted to engine.
]]>
</message>
<message id="SchedulerWarningEvent">
<![CDATA[
Perfomed Timeout <%#TimeOutType%> warning from the scheduler at <script
language='javascript'>WriteClientTime('<%#EventTime%>',1);</script>.
The ouput <%#ActionOutput%> was alerted to engine.
]]>
</message>
</messages>
</report>
<properties>
<property category="cat_name;01" name="Action Display Name" displayname="Display Name"
type="string" helpstring="Display name for the action in activity list."></property>
<property category="cat_configuration;02" name="Delivery Channels" type="ChannelSelection">
<propertychannel>
<channels>
<channel name="WebWorkList" supported="true">
<somechanneldata visible="" selected="" mandatory="">
</somechanneldata>
<forms>
<form type="NativeWebForm" supported="true" defaultsetting=""
uihandlerclassname="SampleApproval.SampleApprovalControl"
uihandlerassembly="bin\SampleApprovalActivity.dll">
<instance name="Approval Form"/>
</form>
</forms>
</channel>
<channel name="MailWorkList" supported="true" selected="false">
<forms>
<form type="MailWorkForm" supported="true" defaultsetting="">
<instance name="Approval Email Form"/>
</form>
</forms>
</channel>
</channels>
</propertychannel>
</property>
<property category="cat_configuration" name="Work Item Fields" type="WorkItemField"
helptemplate="Approval-WorkItemFields.html" helptemplatewinheight="450" helptemplatewinwidth="600">
</property>
<property category="cat_participants;03" name="To" displayname="Assign Actor(s)"
type="resource" helpstring="Actor filter, Expression which selects the actors to whom the request
needs to be sent." mandatory="false" helptemplate="Approval-AssignActors.html"
helptemplatewinheight="450" helptemplatewinwidth="600">
</property>
<property category="cat_participants" name="Assign Queue" displayname="Assign Queue(s)"
type="Queue" helptemplate="Approval-AssignQueues.html" helptemplatewinheight="450"
helptemplatewinwidth="600">
</property>
<property category="cat_participants" name="Min. Acknowledgements [% or Number]"
displayname="Min. Ownerships [% or Number]" mandatory="true" type="limit" defaultvalue="1"
helpstring="Minimum Number of actors to acknowledge the approval request. Approve and Reject
actions are considered as acknowledged.">
</property>
<property category="cat_participants" name="Max. Acknowledgements [% or Number]"
displayname="Max. Ownerships [% or Number]" type="limit" defaultvalue="100%"
helpstring="Maximum Number of actors who should acknowledge and own the Approval
Request">
</property>
<property category="cat_participants" name="Forwarding Allowed?" displayname="Re-Assign Allowed?"
type="choice" defaultvalue="No" helpstring="Allow request to be re-assigned by an actor to another actor.">
<choice>Yes</choice>
<choice>No</choice>
</property>
<property category="cat_participants" name="Ignore Unavailable Resources?"
displayname="Ignore Unavailable Actors?" type="choice" defaultvalue="No" helpstring="Ignore
actors who are on Holidays?.">
<choice>Yes</choice>
<choice>Yes - if No Alternate</choice>
<choice>No</choice>
</property>
<property category="cat_participants" name="Alternate Resource Allowed?"
displayname="Alternate Actor Allowed?" type="choice" defaultvalue="Yes" helpstring="Allow
request to be processed by an Alternate actor as specified by the original recipient actor.">
<choice>Yes</choice>
<choice>No</choice>
</property>
<property category="cat_notification;04" name="Subject" type="workflowmemo"
helpstring="Subject displayed to user in activity list. Also used as the subject for notification email
sent to the user." helptemplate="Approval-Subject.html" helptemplatewinheight="450"
helptemplatewinwidth="600" ></property>
<property category="cat_notification" name="Notes" displayname="Body" type="workflowmemo"
helpstring="Body/Notes for the approvers. Also used as the body for notification email sent to the
user." helptemplate="Approval-Body.html" helptemplatewinheight="450"
helptemplatewinwidth="600">
</property>
<property category="cat_notification" name="From Email Address" type="email" helpstring="The
from email address for email notification sent to the user."></property>
<property category="cat_notification" name="Hide Responses?" type="choice" helpstring="Incase
multiple actors are acting on this approval, responses from all of them are public or hidden during
execution of this action.">
<choice>Yes</choice>
<choice>No</choice>
</property>
<property category="cat_notification" name="Show Custom Document View Window" type="choice"
defaultvalue="Yes" helpstring="Displays a window in activity list,which can have custom document
view provided">
<choice>Yes</choice>
<choice>No</choice>
</property>
<property category="cat_notification" name="Priority" type="choice" defaultvalue="Medium"
helpstring="Severity of the activity">
<choice>High</choice>
<choice>Medium</choice>
<choice>Low</choice>
</property>
<property category="cat_notification" name="Send Notification Email" defaultvalue="No"
type="choice" helpstring="Default notification email to be sent or not.">
<choice>Yes - HTML</choice>
<choice>Yes</choice>
<choice>No</choice>
</property>
<property category="cat_notification" name="Redirect URL" type="workflowmemo"
helpstring="URL to be redirected after the activity is added to a actor." helptemplate="Approval-
RedirectURL.html" helptemplatewinheight="450"
helptemplatewinwidth="600"><![CDATA[http://<%ApplicationPath%>/]]></property>
<property category="cat_notification" name="Custom Document View URL" type="workflowmemo"
helpstring="URL to be shown in the custom document view." helptemplate="Approval-
CustomDocumentViewURL.html" helptemplatewinheight="450"
helptemplatewinwidth="600">
<![CDATA[http://<%ApplicationPath%>/]]>
</property>
<property category="cat_decision;05" name="Affirmative Answer for Approval [% or Number]"
type="limit" defaultvalue="100%" helpstring="Number or % of actors should approve in order for
the outcome of this action to be set as approved">
</property>
<property category="cat_decision" name="Action Limit[% or Number]" type="limit"
defaultvalue="100%" helpstring="Minimum number or % of actors to act upon the approval
request to avoid action timeouts and warning.">
</property>
<property category="cat_decision" name="Wait For All The Participants To Act" displayname="Wait
for all the participants to Act" type="choice" defaultvalue="No" helpstring="Wait for all the
participants to take decision on the action.">
<choice>Yes</choice>
<choice>No</choice>
</property>
<property category="cat_timeout;06" name="Set Calendar" displayname="Set Calendar for
Timeout" type="calendar" helptemplate="Approval-SetCalendarForTimeout.html"
helptemplatewinheight="450" helptemplatewinwidth="600">
</property>
<property category="cat_timeout" name="Minimum Time for Action" displayname="Minimum
available time for Activity" type="timespan" defaultvalue="0" helpstring="Min Time (in
Day:Hours:Minutes) that is required to finish the action.User should have the this time left for the
day to act up on the request.">
</property>
<property category="cat_timeout" name="Timeout warning for Acknowledgement"
displayname="Timeout warning for Ownership" type="timespan" defaultvalue="0" helpstring="Max
Time (in Day:Hours:Minutes) which can elapse for actors to acknowledge the request before action
will trigger the Timeout warning for ownership link">
</property>
<property category="cat_timeout" name="Timeout for Acknowledgement" displayname="Timeout
for Ownership" type="timespan" defaultvalue="0" helpstring="Max Time (in Day:Hours:Minutes)
which can elapse for actors to acknowledge the request before action will exit with Timeout for
ownership link">
</property>
<property category="cat_timeout" name="Timeout warning for Action" displayname="Timeout
warning for Activity" type="timespan" defaultvalue="0" helpstring="Max Time (in
Day:Hours:Minutes) which can elapse for actors to Act on the request before action will trigger the
Timeout warning for Action link">
</property>
<property category="cat_timeout" name="Timeout for Action" displayname="Timeout for Activity"
type="timespan" defaultvalue="0" helpstring="Max Time (in Day:Hours:Minutes) which can elapse
for actors to Act on the request before action will exit with Timeout for Action link">
</property>
<property category="cat_timeout" name="Multiple TimeOut Warning" displayname ="Multiple
Timeout Warning" type="grid" helpstring="Multiple warning escalations for the action, If user
doesn't act up on the action for a given time." helptemplate="Approval-
MultipleTimeoutWarning.html" helptemplatewinheight="450" helptemplatewinwidth="600">
<cols>
<col mandatory="true" displaywidth="25%" validationtype="timespan">
<titlestring>Time Interval</titlestring>
<choicedefaultvalue>0.00:00:00</choicedefaultvalue>
</col>
<col type="select" values="Select:,Yes:YES,No:NO" mandatory="true" displaywidth="10%">
<titlestring>Recurring?</titlestring>
</col>
<col mandatory="true" displaywidth="40%">
<titlestring>OutPut</titlestring>
<choicedefaultvalue>TimeOutWarning-</choicedefaultvalue>
</col>
<col displaywidth="25%" validationtype="timespan">
<titlestring>Recurring Time Interval</titlestring>
<choicedefaultvalue>0.00:00:00</choicedefaultvalue>
</col>
</cols>
</property>
</properties>
<return allowblankoutput="false">
<link property="Multiple TimeOut Warning" defaultcolumn="3"/>
<value helpstring="Request is Approved">Approved</value>
<value helpstring="Request is Rejected">Rejected</value>
<value helpstring="Filter Condition did not yield enough actors to whom the request can be
sent">Not Enough Resources to Acknowledge</value>
<value helpstring="Minimum Actors as specified didnt acknowledge the request in the given
time">Timeout - Acknowledgement</value>
<value helpstring="Some or All Actors didn't perform the required action in given time">
Timeout – Action
</value>
<value helpstring="Warning for Minimum Actors as specified didn't acknowledge the request in the
given time">Timeout Warning - Acknowledgement</value>
<value helpstring="Warning since Some or All Actors didn't perform the required action in given
time">Timeout Warning - Action</value>
</return>
</action>
-
The new Custom Activity will get displayed in the Process Designer under the category "Custom Activities", as shown in the image below.