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确定子线程接受人与数据源

此方法与分合流相关,只有当前节点是子线程才有意义。

posted @ 2020-01-11 14:16  三九二七  阅读(413)  评论(0编辑  收藏  举报