通常工作流系统在设计之初,都会明确的区分流程数据和业务数据。工作流引擎只关心流程数据,为实现工作流的流转,会为工作流引擎设计一套工作流的表结构,来辅助流程引擎的实现。
业务数据是千变万化的,为实现各自的业务,会设计一系列业务表。业务表,工作流系统是不关心的。
但是工作流数据和业务数据又是交互的关联的。
1. 流程和业务数据的基本关联:
为了将业务数据和流程数据关联起来,会有一个关联表,将流程实例和业务数据关联。
在eworkflow中,这层关系的设置在 流程实例表(wf_wfentry)中。
每个流程实例都会和具体的一张业务表关联,(流程需要实现的主业务表),并指明业务表的id字段和描述字段,描述字段可有可无。
每个业务表中都多设置一个流程实例wf_id字段,此字段即=wf_wfentry.id。
通过设置 业务表.wf_id = wf_wfentry.id 和 wf_wfentry.bs_table wf_wfentry.bs_id_field = 业务表.id 将流程和业务关联起来;
2. 流程和业务数据的交互:
在流程定义和运行的上下文中经常会需要引入业务数据。
比如报销流程中的,流程定义和运行时,都需要取 报销金额 做为判断几级审核的条件,上级审核,也需要取审核结果作为流转到下一步的依据。
这样就势必在流程上下文中引入业务数据:
在eworkflow中,是这样引入的:
在业务数据的维护模块,即业务自定义表单中:业务数据集,将业务关键字段勾选为 “流程用”。即将此业务关键字标识为可供流程上下文使用了。
在流程定义时:动作(关联到的业务表单的动作)的前缀函数设置一个ActionPreFunction,此类负责将业务表单中,勾选的流程用的关键字段 持久化到流程上下文中。然后动作的结果中,就可以运用业务关键了。
动作结果中设置:
关键字段类型不同,做判断的规则和写法略不同,遵循java的语法规则。
字符型的变量比较
propertySet.getString("关键字名").equals("值")
整数型
propertySet.getLong("关键字名")==3 操作符号==,>,<
实数型的
propertySet.getDouble("关键字名")>3.5 操作符号==,>,<
日期型的
java.util.Date.compareTo(propertySet.getDate("关键字名"),anotherDate) 操作符号
//另外:propertySet还可以在前置后置函数中 propertySet.setString("caller", caller);设置变量值
相关链接;
web工作流管理系统开发之五 开源osworkflow之用户系统改造
web工作流管理系统开发之八 开源osworkflow之任务管理
web工作流管理系统开发之十二 同一张表单在流程多节点中流转的权限控件
web工作流管理系统开发之十三 流程与电子表单集成之事件实现篇