让品高工作流牛起来

做一个徘徊在牛A和牛C之间的产品也不错啊

导航

脚本环节、参与者、条件使用示例

Posted on 2010-10-12 14:27  Brian.KFC  阅读(740)  评论(0编辑  收藏  举报

下面通过一个具体的例子示范如何使用脚本环节、脚本参与者和脚本条件。这个例子如下图所示:

image

这个例子所使用的是一张由InfoPath设计的请假单,如下图所示:

image 

 

流程定义中的“脚本参与者审批”环节所使用的是“审批人”字段所设置的参与者,所以其脚本如下:

import clr;
clr.AddReference(
'mscorlib','System.Xml');
from System import String;
from System.Xml import XmlDocument,XmlNamespaceManager;

mdom
= XmlDocument();
mdom.LoadXml(DataItems.ApplicationData.FormData.ToString());

nsmgr
= XmlNamespaceManager(mdom.NameTable);
prefix
= mdom.DocumentElement.Prefix;
nsmgr.AddNamespace(prefix, mdom.DocumentElement.GetNamespaceOfPrefix(prefix));
users
= mdom.SelectSingleNode(String.Format("//{0}:审批人", prefix), nsmgr);
userData
= users.InnerText.Split(";");
Result
= [];
for user in userData:
loginID
= user[user.index("(")+1 : -1];
Result.append(OrganizationProvider.DefaultProvider.GetUserByLoginID(loginID));

从脚本中可看到是通过调用XML的相关方法,在表单数据DataItems.ApplicationData.FormData中提取相关数据来获取审批人的,最后的结果存放到变量Result中,对应于脚本参与者设置的结果参数属性。

image

 

下面来看看脚本条件是如何实现对请假天数的比较的(以“大于5天”这个条件为例):

import clr;
clr.AddReference(
'mscorlib','System.Xml');
from System import String, Int32;
from System.Xml import XmlDocument,XmlNamespaceManager;

mdom
= XmlDocument();
mdom.LoadXml(DataItems.ApplicationData.FormData.ToString());

nsmgr
= XmlNamespaceManager(mdom.NameTable);
prefix
= mdom.DocumentElement.Prefix;
nsmgr.AddNamespace(prefix, mdom.DocumentElement.GetNamespaceOfPrefix(prefix));
days
= mdom.SelectSingleNode(String.Format("//{0}:天数", prefix), nsmgr);
data
= Int32.Parse(days.InnerText);
if data > 5:
Result
= True;
else:
Result
= False;

当中的原理跟脚本参与者雷同,也是把结果存到变量Result中,注意这里的Result只能是True或False代表条件是否成立。

 

“设置参数”这个环节是个脚本环节,使用它可以执行一段脚本,例如设置参数等,如下:

import sys, clr;
clr.AddReferenceToFile(
'Bingosoft.Workflow.WFAPI.dll');
from Bingosoft.Workflow.WFAPI import WorkflowHelper;

#设置参数
flowHelper = WorkflowHelper(OrganizationProvider.GetUserByID(DataItems.CurrentUser.ID));
caseID
= DataItems.FlowInstance.ProcID;
taskID
= DataItems["CurrentTask"];
flowHelper.OpenWorkflow(caseID, taskID);
flowHelper.SetParameter(
"opt", 200);
flowHelper.Save();