BPM脚本规范说明

 

1 前言

BPM脚本规则基于groovy引擎实现,groovy语法与java类似,具体语法可参考网站或查看本文的示例:https://www.w3cschool.cn/groovy 。

2 路由规则

2.1 条件规则

ü 场景说明

抢单是多实例(会签)的业务变种类似于服务台类的业务审批,如多人环节有3个待办,有任意一人提交流程调用流程执行接口,流程会向下执行剩余待办会消失

ü 适用范围

条件网关、输出线规则。

ü 脚本内容

//返回值true:流程相向下执行,false不执行

//amountcompanyid为提交流程传入变量

//也可以使用java语法 float money =Float.parseFloat(amount);

def money = amount.toFloat();

if(companyid=="20430001"){

    return true

}

else if(companyid=="2043000155" || companyid=="2043000156"){

   return money<10

}

else

   return money<50

 

2.2 抢单

ü 场景说明

抢单是多实例(会签)的业务变种类似于服务台类的业务审批,如多人环节有3个待办,有任意一人提交流程调用流程执行接口,流程会向下执行剩余待办会消失

ü 适用范围

多实例环节、多实例子流程(发起节点生效)。

ü 脚本内容

//直接写return true即可

return true;

 

2.3 投票

ü 场景说明

投票是多实例(会签)的业务变种,多实例环节有5个待办,有两人以上在页面选择了“意见类型为同意”时,流程会向下执行剩余待办会消失

ü 适用范围

多实例环节、多实例子流程的流程执行才有效。(调用下一环节和人员的服务无效)

ü 脚本内容

//多实例投票逻辑,根据每一个实例流程提交数据来判断流程是否向下执行

//意见类型为同意计数器

int agreeCount=0;

//processInputModels为多实例流程提交对象集合

for(int i=0;i<processInputModels.size();i++)

{

        //获取单个实例流程提交对象,processInputModel中有应用提交到流程平台的所有参数,获取方式如getWf_procDefKey

com.blueland.bpm.engine.core.model.ProcessInputModel processInputModel=processInputModels.get(i);

        //获取单个实例流程提交对象的表单数据,提交流程时传入fields中的数据

Map<String,Object> bizDataMap=processInputModel.getFields();

        //获取表单数据-意见类型ideaType

String  ideaType=(String)bizDataMap.get('ideaType');

if(ideaType=='agree'){

         agreeCount++;

        }

};

return agreeCount>=2?true:false;

 

 

3 人员规则

3.1 部门负责人

ü 场景说明

获取当前用户部门负责人作为下一环节处理人。

ü 适用范围

任一用户任务环节。

ü 脚本内容

//默认返回符合要求的人员格式

return userServiceImpl.getOrgLeaderByMain(String userId);

 

3.2 部门分管领导

ü 场景说明

获取当前用户部门对应分管领导作为下一环节处理人。

ü 适用范围

任一用户任务环节。

ü 脚本内容

//默认返回符合要求的人员格式

return userServiceImpl.getAssignLeader(String userId);

 

3.3  自定义人员规则

ü 场景说明

流程下一环节处理人可基于表单数据或业务规则动态计算并返回流程引擎,下一环节获取人员接口和流程引擎执行均会优先此规则数据。

ü 适用范围

任一用户任务环节

ü 脚本内容

返回的人员格式包括人员ID和组织ID,以井号分隔,返回多人时,人员之间以逗号分隔。

return "wugf12#204300010999,liy4#204300010599";

 

4 4 脚本内置API

流程平台脚本内置API,在所有的规则脚本中都能使用。

4.1 用户

ü 调用示例

 import com.blueland.bpm.identity.model.User;

 boolean isFlag=userServiceImpl.isUserInRole(currentProcInst.getStartUserId(),'main_ceo');

 User user=userServiceImpl.getUserById(123);

 

ü API清单

方法

名称

参数说明

User getUserById(String userId)

获取用户对象

userId:用户ID

返回值:User对象

List<User> findUserByOrgId(String orgId)

来获取用户列表

orgId:组织ID

返回值:User列表

List<User> findUserByRoleId(String roleId)

获取用户列表

roleId:角色ID

返回值:User列表

List<User> findUser(String roleId, String orgId)

获取用户列表

roleId:角色ID

orgId:组织ID

返回值:User列表

boolean isUserInRole(String userId, String roleId)

判断该用户是否包含该角色中

userId:用户ID

roleId:角色ID

返回值:true|false

boolean isUserInOrg(String userId, String orgId)

判断该用户是否包含该组织中

userId:用户ID

orgId:组织ID

返回值:true|false

String getAssignLeader(String userId);

获取当前用户部门主要领导

userId:用户ID

返回值:返回的人员格式包括人员ID和组织ID,以井号分隔,返回多人时,人员之间以逗号分隔

String getOrgLeaderByMain(String userId);

获取当前用户部门分管领导

userId:用户ID

返回值:返回的人员格式包括人员ID和组织ID,以井号分隔,返回多人时,人员之间以逗号分隔

ü 返回对象属性

com.blueland.bpm.com.blueland.bpm.identity.model.User

名称

类型

说明

userId

string

用户ID

userCode

String

用户编码

userName

String

用户姓名

userSex

String

用户性别

userAge

Integer

用户年龄

deptId

String

直属单位编码

deptName

String

直属单位编码

companyId

String

直属单位编码

companyName

String

直属单位编码

orgId

String

所属单位编码

orgName

String

所属单位名称

userMobile

String

手机号码

userMail

String

用户邮箱

positionId

String

主要岗位

pluralityPositionId

String

兼职岗位

titleId

String

主要职务

pluralityTitleId

String

兼职职务

userType

String

用户类别,(正式人员:ZS、试用人员:SY、离职人员:LZ、临时人员:LS、外部人员、WB)

4.2 组织

ü 调用示例

 import com.blueland.bpm.identity.model.Org;

Org org=roleServiceImpl.getOrgById('123');

 

ü API清单

方法

名称

参数说明

Org getOrgById(String orgId)

根据组织机构ID来获取组织机构

orgId:组织ID

返回值:组织对象

List<Org> findSubOrg(String orgId)

根据组织机构ID来获取其下属机构列表

orgId:组织ID

返回值:组织对象列表

boolean hasSubOrgs(String orgId)

根据组织机构ID来判断其是否包含了子组织机构

orgId:组织ID

返回值:true|false

boolean isInOrg(String parentOrgId, String subOrgId)

判断父组织机构是否包含该子组织机构

parentOrgId:父组织机构ID

subOrgId:子组织机构ID

返回值:true|false

ü  返回对象属性

com.blueland.bpm.com.blueland.bpm.identity.model.Org

名称

类型

说明

orgId

string

组织编码

orgName

 

组织简称

orgParentId

String

上级组织编码

orgType

String

组织类型,如单位:UNIT、部门:DEPT、其他:OTHER

orgLevel

Integer

组织级别,顶层组织:0、一级组织:1、二级组织:2、三级组织:3、四级组织:4

orgSort

Integer

组织排序号

orgPrincipal

String

组织负责人

orgStatus

String

组织状态,(启用:QY、禁用:JY)

orgBranchLeader

String

分管领导Id

orgBranchLeaderName

String

分管领导姓名

companyId

String

所属公司ID

companyName

String

所属公司名称

deptId

String

所属部门ID

deptName

String

所属部门名称

4.3 角色

ü 调用示例

 import com.blueland.bpm.identity.model.Role;

Role role=roleServiceImpl.getRoleById('main_ceo');

 

ü API清单

方法

名称

参数说明

Role getRoleById(String roleId)

获取角色对象

roleId:角色ID

返回值:角色对象

List<Role> findRoleByUserId(String userId)

获取用户绑定的角色列表

userId:用户ID

返回值:角色对象列表

ü 返回对象属性

com.blueland.bpm.com.blueland.bpm.identity.model.Role

名称

类型

说明

roleId

string

角色ID

roleName

String

角色名称

roleSort

Integer

角色排序号

roleStatus

String

角色状态,(启用:QY、未启用:WQY)

 

4.4  流程上下文

流程上下文仅在流程执行时生效,调用流程的获取下一环节和人员的服务时无效

ü 获取当前用户数据

//获取发送人组织

wf_processInputModel.getWf_sendUserId();

//获取发送人ID

wf_processInputModel.getWf_sendUserOrgId();

 

ü  获取当前表单数据

直接使用提交流程时的fields中的key即可,如"fields": {"amount": 4002}

脚本直接使用amount变量即可

ü 获取当前流程数据

// 流程标题

wf_processInputModel.getWf_procTitle()

//动作处理标识

wf_processInputModel.getWf_actionType()

//流程定义ID

wf_processInputModel.getWf_procDefId()

//流程定义KEY

wf_processInputModel.getWf_procDefKey()

//流程定义名称

wf_processInputModel.getWf_procDefName()

//流程实例ID

 

wf_processInputModel.getWf_procInstId()

//当前环节定义Id

wf_processInputModel.getWf_curActDefId()

// 当前环节定义Name

wf_processInputModel.getWf_curActDefName()

//当前环节实例Id

wf_processInputModel.getWf_curActInstId()

//当前环节实例Name

wf_processInputModel.getWf_curActInstName()

// 下一个环节定义ID

wf_processInputModel.getWf_nextActDefId()

//下一个环节定义Name

wf_processInputModel.getWf_nextActDefName()

// 下一个环节定义类型

wf_processInputModel.getWf_nextActDefType()

//发送人ID

wf_processInputModel.getWf_sendUserId()

// 发送人ID

wf_processInputModel.getWf_sender()

//发送人姓名

wf_processInputModel.getWf_sendUserName()

// 发送人组织ID

wf_processInputModel.getWf_sendUserOrgId()

//发送人组织ID

wf_processInputModel.getWf_sendUserOrgName()

// 发送人公司ID

wf_processInputModel.getWf_sendUserCompanyId()

// 接收者列表(user1()user2()user3)

wf_processInputModel.getWf_receiver()

// 当前环节意见

wf_processInputModel.getWf_curComment()

// 批量处理标识

wf_processInputModel.getWf_batchId()

//业务标识

wf_processInputModel.getWf_businessKey()