Java工作流引擎节点接收人设置“按自定义SQL计算”系列讲解
Posted 三九二七
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java工作流引擎节点接收人设置“按自定义SQL计算”系列讲解相关的知识,希望对你有一定的参考价值。
关键字: 驰骋工作流程快速开发平台 工作流程管理系统 工作流引擎 asp.net工作流引擎 java工作流引擎. 开发者表单 拖拽式表单 工作流系统CCBPM节点访问规则接收人规则
适配数据库: oralce,mysql,sqlserver,Informix, PostgreSQL 达梦
接受人规则,就是为了解决下一步发送人的范围所制定的各种规则。审批、生产环境有很多的不确定性,更多的时候需要自动确定接受人的范围,为了适应不同场合下的需要我的制定了如下接收人规则。
按设置的SQL获取接受人计算
按SQL计算通俗好理解,就是CCBPM在执行一个查询sql时,返回一个数据源,在数据源里约定该节点的接收人信息。
设置方法: 在当前节点属性里 [接受人SQL]设置一个sql 语句. 这个select 查询语句有一个列. No 分别表示,操作
编号, 操作员名称. 这个sql可以有参数.
比如: 1, SELECT No,Name FROM PORT_EMP WHERE FK_Dept=@WebUser.FK_Dept
查询出来当前操作员中的部门下的所有人员.
2, SELECT xxx as No, yyy as Name FROM dbo.xxxx.YourTable WHERE 字段名称=@表单字段名称.
从您的业务系统中,查找一组人员,变量可以是当前节点字段的编号,格式为 @+字段英文名称.
关于合流点的接受人按sql获取接受的表达式的问题
注意子线程向合流点发送时,接受人规则的表达式的变量是临近合流点的子线程节点变量。
比如: 流程编号为ABC三个节点.
A 是分流点,B是合流点 C是子线程。
如果C的接受人员规则是按sql计算:
配置的表达式如下表达式是错误的:
select UserNo as No, xx as Name from ND2701 WHERE OID=@OID
如下表达式才是正确的:
select UserNo as No from ND2701 WHERE OID=@FID
这是因为子线程在发送时获取的变量OID 是子线程的ID而非,干流上的WorkID.
关于子线程接受人的特殊约定:
如果遇到分组的维度,就约定返回4个列来解决问题,流程demo:流程树同表单分合流一人多子线程模式(批次维度任务模式)流程.
在第2个子线程节点配置了如下SQL。
该数据源返回了三个列,分别是:No,Name, GroupMark
No=操作员编号,Name=操作员名称, GroupMark就是分组的维度.
比如配置的SQL: SELECTNo,Name,FK_DeptFROMPort_EmpWHEREFK_Deptin(‘2‘,‘5‘)
应用场景: 有一批物品需要化验,一个人员可能需要承担多个化验项目,这就需要这个人在这个子线程里有n件工作。再比如:一件工作需要下发两个部门处理,如果一个部门的一个人处理了,另外该部门的人员的工作就要自动去掉,属于抢办任务,也就是说,子线程也需要抢办任务。
对动态表单树的支持:
什么是动态表单树?请参节点属性、表单、表单类型章节。简单的说,该节点的表单是有上一步发送人员动态指定的。该节点大部分是子线程节点,也可以是多人处理的普通节点。
应用场景:a节点发向b节点,张三需要分配给,甲乙丙丁四个人去工作,但是这四个人工作内容不同。虽然甲乙丙丁四个人都可以接受到该节点的工作,但是填写的内容是由张三动态的分配的。
我们就要在这里约定数据源来表达接收人的信息,第一种情况没有批次号:返回的列需要有如下要求,No,Name,FrmIDs 第3列是表单ID,多个表单ID用逗号分开。
第二中情况具有批次号:需要返回的列是, No,Name,BatchNo,FrmIDs.
CCBPM为该种应用场景做了一个demo,请参考
在节点2属性里我们做了如下设置
实现步骤:在开始节点里CCBPM的节点表单里设计了一个明细表。
按SQL确定子线程接受人与数据源
此方法与分合流相关,只有当前节点是子线程才有意义。
以上是关于Java工作流引擎节点接收人设置“按自定义SQL计算”系列讲解的主要内容,如果未能解决你的问题,请参考以下文章
java Activiti6.0 后台 框架 spring5 SSM 工作流引擎 审批流程