Please ensure Javascript is enabled for purposes of website accessibility
Powered by Zoomin Software. For more details please contactZoomin

AVEVA™ Work Tasks

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">&nbsp;</TD>

     </TR>-->

     </TABLE>

     </TD>

     </TR>

     <TR VALIGN="TOP">

     <TD>&nbsp;</TD>

     <TD height="25" align="right" bgcolor="#ffffff">

     <input  type='SUBMIT'  class="inputbutton" value='@@Approve@@' name='btnApprove' />

     &nbsp;&nbsp;&nbsp;

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

Related Links
TitleResults for “How to create a CRG?”Also Available in