五、业务流程执行者
业务流程从本质上说其实就是待办任务在不同人之间按照既定的顺序和规则间传来传去,所以业务流程是否能和组织机构紧密结合是衡量业务流程是否可用的一大标准。
业务流程通过组织机构函数的方式实现在业务流程和组织机构的紧密整合,使用组织机构函数组成组织机构表达式,用来选择任意复杂的组织范围作为业务流程执行者。同时一般的表达式函数也可以穿插用于组织机构表达式中,实现了业务流程可以从任意地方获取执行者。业务流程执行者定义目前用在执行规则,通知规则和转发规则中,执行规则用来定义活动环节的执行者,通知规则用来定义通知接收者,转发规则用来定义转发时的接收者。
之所以叫执行者而不叫处理人的原因在于,业务流程的待办任务不仅仅可以发给人员成员,还可以发给岗位,部门和机构等组织单位。当待办任务的执行者是一个人员成员时只有他自己能看到和处理这个待办任务。而当待办任务的执行者是岗位,部门或机构等组织单位时,这些组织和它们的子组织下分配的所有人员成员都可以看到和处理待办任务。
执行者函数和其他一般函数最大的区别在于返回值的格式,执行者函数的返回值类型必须是指定类型(OrgUnit)的组织单元的列表。组织单元是用FID和FName两个标识一起来描述。
其实执行者函数本质就是选择出各种条件的组织单元。执行者函数本身也不仅仅可以在业务流程中使用,在系统其他有根据条件选择组织单元的地方可以通过直接调用函数或者调用表达式的方式使用。其他一般函数的返回值只要和执行者函数的输入参数匹配,就可以直接当作执行者函数的传入参数使用。
1 基于组织机构的执行者函数
根据组织机构的树形层次,成员,授权和管理关系而提供的选择组织单元的函数。这些函数不依赖业务流程的任何东西,所以它们不仅仅在业务流程中用,在任何其他选择组织范围的地方都可以用。
函数名 |
描述 |
findDirectorWF |
获取主管 |
findOnePersonMemberByID |
根据人的ID获取人员成员 |
findOrgUnitsByFID |
根据FID获取指定的组织单元 |
findOrgUnitsByID |
根据ID获取指定的组织单元 |
findOrgUnitsHasRole |
获取属于指定角色ID的组织单元 |
findPersonMembersByCode |
根据人的编码获取人员成员 |
findPersonMembersByID |
根据人的ID获取人员成员 |
findPersonMembersInOrg |
获取指定部门下的人员成员 |
currentPersonMember2 |
当前人 |
2 基于业务流程的执行者函数
根据业务流程图上的环节和前后关系而提供的选择组织单元的函数,由于这些函数依赖了业务流程中的待办任务,所以只能在业务流程中使用。
在所有基于业务流程的执行者函数中,指定环节的参数都可以传入标识环节的相对参数,例如ROOT(首环节),ALL(所有环节),PREV(前序环节)。
基于业务流程的执行者函数中所有取FID的函数都只是返回一个字符串,只能当作其他函数的输入参数,而无法直接当作执行者。
函数名 |
描述 |
findActivityCreator |
获取指定环节的发起人 |
findActivityCreatorOrg |
获取指定环节的发起人所在的组织 |
findActivityCreatorDept |
获取指定环节的发起人所在的部门 |
findActivityCreatorOgn |
获取指定环节的发起人所在的机构 |
findActivityExecutor |
获取指定环节的处理人 |
findActivityExecutorOrg |
获取指定环节的处理人所在的组织 |
findActivityExecutorDept |
获取指定环节的处理人所在的部门 |
findActivityExecutorOgn |
获取指定环节的处理人所在的机构 |
3 其他执行者函数
用于给执行者函数之间进行逻辑运算和参数转换而提供的函数。下表列的只是一些常用函数而不是所有函数。所有函数以STUDIO中表达式构造器上公布的函数为准。
函数名 |
描述 |
orgUnitsAnd |
两个组织单元列表做交集操作 |
orgUnitsByIndex |
从组织单元列表中获取指定序号的组织单元 |
orgUnitsOr |
两个组织单元列表做并集操作 |
orgUnitsToDepts |
组织单元转换成相应的部门 |
orgUnitsToOgns |
组织单元转换成相应的机构 |
orgUnitsToOrgs |
组织单元转换成相应的组织 |
distinctOrgUnitsByFID |
组织单元列表中相同FID的只保留一个 |
distinctOrgUnitsByID |
组织单元列表中相同ID的只保留一个 |
4 执行者函数的扩展
在执行者函数中可以通过getValueByUrl函数调用自己定义的服务进行执行者函数扩展
执行者函数的扩展中最基础,最重要的就是要返回值满足执行者的要求,否则就只能当作一般的函数作为其他函数的输入参数使用。
在JAVA中写代码的时候,可以使用任意的方式从任意地方把组织单元的FID和FName获取到后,用它们来创建OrgUnit对象。最后吧OrgUnit对象加入到标准的JAVA List中。