一个步骤必须具有执行人。执行人可以是如下的几种类型:为了进行说明,我们以一个请假工作为例,工作流程的定义如下:

工作的发起人:
当工作流转几步后,可能下一步的执行人是工作的起草人。那么可能将执行人定义为“工作的发起人”。比如当张三起草一份请假申请后,由科长审批。在科长审批后,需要再还递交给申请人做工作交接。那么“申请人办理工作交接”的执行人,我们不能说这个步骤的执行人就指定为张三(因为李四也可能会做请假申请),因此定义执行人为“工作的发起人”后,表示工作由谁起草的,就递交给谁。
临时指定执行人:
当无法事先知道执行人时,或者执行人经常变动时,可能临时指定执行人
等同于某步骤的执行人:
仍以上面的请假为例。当在科长审批后,需要再还给张三,那么“申请人办理工作交接”的执行人就是“请假申请”这个步骤的执行人。因此可以如下定义:

等同于某步骤的执行人所在部门的其它人员(不包括领导):
仍以上面的请假为例。当张三需要做工作交接时,交接人是自己同部门的同事,那么“工作交接”的执行人就是“请假申请”这个步骤的执行人所在部门的其它人员(不包括领导),如下图

等同于某步骤的执行人所在部门的主要领导或其它领导:
仍以上面的请假为例。当张三做好请假申请,需要科长审批时,“科长审批”步骤的执行人就是申请人的领导(主要领导即正职的领导,其它领导即副职领导),可以如下设置:

提示: 等同某步骤相关人员的各个选项是“复选框”,这表示可能将它们多选,即表示可以按实际需要组这些相关人员进行组合,作为步骤的执行人。
等同于某步骤的执行人所在部门的分管领导:
通常一个部门具有一个正职的领导和若干个副职的领导。同时还可能有更高层的领导来管理这个部门的领导。这个“更高层的领导”就是部门的分管领导。比如某个科长是某科室的领导,某个局长是该科室的分管领导。
等同于某步骤的执行人的直属领导:
当某个人是一个部门的领导时(主要领导或都其他领导),那么他所在部门的上级部门的领导就是他的直属领导。当某个人是普通职工时,他所在部门的领导就是他的直属领导。
通俗地讲,可能认为:科员和直属领导是科长,科长的直属领导是局长
直接增加后选人:
当某步骤的执行人是可以确定时,那么直接指定步骤的执行人是最简单的。比如“财务审批”可以确定就是财务总监来执行的。且一个单位的财务总监相对是固定的,那么直接把这个人的名字加到执行人列表中即可。
直接增加后选岗位:
当某个步骤的执行人是确定为某个岗位(部门或虚拟部门)中的人来执行的,那么直接把部门加入到后选岗位中,当流转到这个步骤时,执行人就是这个岗位中的所有人,系统会列出这些人,操作者只需要从中选择一个做为执行人即可。
使用表达式或二次开发来指定执行人:
当上述执行人定义都无法满足执行人定义时,可能使用表达式或二次开发来指定执行人。前提是工作流的流转模板必须是“结构化模板”。
当使用表达式来指定执行人时,表达式的结果是执行人的ID(如果需要指定多个候选人,那么表达式的结果应该是这样的一个字符串:把候选人的ID拼接成一个用逗号分隔的字符串如 "2,3,4,5"), 表达式中允许使用单元格名(如A1,B5)或别名来引用表单上的数据,值得注意的是请使用cstr,cint,clng ,cdbl ,cdate等函数对单元格的数据做强制类型转换后再做运算,如:请使用cint(A1)+5 ,而不要直接用A1+5。
所谓表达式,就是由数据,运算符,函数组成的一串定义。表达式中使用单元格名称或单元格别名来引用结构化模板中的数据。例如:
其中“申请表!A1 ”,“a1” 是单元格名称 , name 是单元格别名 ,"abc"是直接数据, UserId2UserName是函数。 单元格名称及别名与MS Excel 命名规则是一致的。可用的函数可以点击
来查看。
如果使用表达式仍无法满足要求,那么WiseFlow 使用Rhino做为脚本引擎提供了强劲的二次开发能力。因此使用最后的绝招:使用脚本来指定执行人。
可以定义一个函数 getExecutor(),返回执行人的ID(如果需要返回多个候选人,那么把他们的ID拼接成一个用逗号分隔的字符串如 "2,3,4,5")来指定本步骤的执行候选人。 下面是一段脚本示例:
function getExecutor()
|
由于表达式相对二次开发而言,要简单许多,所以,从方便日后的维护出发,尽量使用表达式做定义,少用二次开发。
使用表达式指定执行人请参阅下一讲