WORKFLOW-软件快速开发平台
调试系统使用说明书

沃克福勒软件快速开发平台
使用白皮书

V 1.1
第四章

流程节点路由动作触发器组件(配置流程节点路由的动作处理脚本)

动作触发器组件

工作流节点路由触发器

工作流路由触发器是节点之间跳转时处理业务数据的重要接口,一共分两种:1,执行 sql 代码;2,执行 java 代码。同时 sql 又分成 sql 代码检查业务和 sql 执行动作。java 组件同样也同时担负检查和执行业务代 码的双重职责。

配置跳转动作执行 SQL 代码检查业务

sql 代码检查业务负责检查 A 节点是否可以跳转到 B 节点,若业务不允许跳转,则返回一个描述问题的字 符串;若允许跳转,则返回一个空字符串。

例如:销售订单提交到库房发货时,款到发货类型的订单,未收款,款项为 0 元,则不能被提交到库房。 理由是还没有收款。那么,SQL 代码检查业务组件就可以返回“该笔业务未收到款项”的消息。从而不能被提交。

校验业务的时机又分成两种:1,执行动作之前,检查业务;2,执行动作之后,检查业务;

动作执行之前该笔业务数据还没有入库,因此不能获得该笔业务的 数据,但是可以获得尽可能早的触发时机。而动作执行之后,则可以获得该笔业务以及该笔业务所关联的该流 程实例任务、一并计算获得事后的校验结果。

校验的 sql 语句可以有很多条。任意一条 sql 返回字符串表示路由跳转失败。而 sql 的执行顺序则是按照 order 字段从小到大的顺序一次执行。

关于占位符:校验 sql 语句中可以通过占位符的方式获取系统当前的业务数据,以下是 sql 业务检查组件表中字段 sql 值的占位符以及含义:



关于流程节点路由检查表:windowdb.wf_def_node_route_checkscript.sql 字段中占位符的说明
占位符说明
1${my.id}当前登录人 id,关联 windowdb.person.id
2${routeId}路由 ID,关联 windowdb.wf_def_node_route.id
3${ins_id}流程实例 ID,关联 windowdb.wf_ins.id
4 ${task_insert_time}该任务的创建时间,获取 windowdb.wf_ins_task.insert_time
5${wf_def_id}流程定义 ID,关联 windowdb.wf_def.id
6 ${from_node_index} 来源节点的 index,关联 windowdb.wf_def_node.index
7 ${from_node_timeliness} 来源节点的受理时限,关联 windowdb.wf_def_node.timeliness
8 ${from_node_type} 来源节点的类型,关联 windowdb.wf_def_node.node_type
9${from_node_id} 来源节点的 ID,关联 windowdb.wf_def_node.id
10${to_node_index}目标节点的 index,关联 windowdb.wf_def_node.index
11${to_node_type}目标节点的类型,关联 windowdb.wf_def_node.node_type
12${to_node_id}目标节点的 ID,关联 windowdb.wf_def_node.id

表 43

以下是 sql 业务检查组件表(windowdb.wf_def_node_route_checkscript)的字段说明:



流程节点路由表:windowdb.wf_def_node_route_checkscript 字段说明
占位符说明
1id主键
2rid路由 ID,关联 windowdb.wf_def_node_route.id
3orderSQL 语句执行顺序
4sql待执行的 SQL 语句
5b_abefore or after ? 0,动作执行前执行检查;1,动作执行后执行检查;

表 44

工作流节点路由触发器-配置流程发生扭转时执行 SQL 代码

sql 代码检查执行业务组件负责检查 A 节点跳转到 B 节点的事后,执行批量 SQL 语句,用于处理具体的 业务表数据。

例如:费用报销财务审批通过时,执行一条 sql 向通知表中写入一行通知信息,通知当事人来财务部门领 款。

关于占位符:执行的 sql 语句中可以通过占位符的方式获取系统当前的业务数据,占位符如表 43a>所示。

以下是 sql 业务执行组件表(windowdb.wf_def_node_route_actionscript)的字段说明:



流程节点路由表:windowdb.wf_def_node_route_actionscript 字段说明
字段名说明
1id主键
2rid路由 ID,关联 windowdb.wf_def_node_route.id
3orderSQL 语句执行顺序
4sql待执行的 SQL 语句
5requrnkey sql 返回值;0,无返回值;1,insert 语句返回主键 id;2,select 语句返回字符串

表 45

工作流节点路由触发器-配置流程发生扭转时时执行 Java 代码

编写一新的 java 类编译并加载用于处理流程动作扭转发生时的业务。目前已经不建议使用该方法,尽可 能参考本章 9.2 节使用 sql 语句的方式来处理。但是,如果修改数据库中的业务数据已经不能解决问题。例如: 需要调用接口发邮件,调用接口发短信,或者需要调用其它第三方服务、又或者需要调用操作系统底层服务的, 可以考虑阅读本节内容,使用 java 扩展类来处理业务。 代码示例如下所示:

package cn.net.workflow.workflow.route;
import java.util.Map;
import com.windowdb.wms.dao.WfInsTaskDao;

public class RouteManualId{路由ID} extends com.windowdb.wms.service.sup.RouteManual{
  @Override
  public void go(WfInsTaskDao dao , Object billId, Map<String,Object> wfInfo ) throws Exception{
    // FIXME 请此处编写代码处理业务逻辑,可以执行发送短信、邮件以及调用第三方接口或消息。
    // dao 提供数据库操作服务。
    // billId 单据编号
    // wfInfo 流程对象
    // 注意类名必须以“RouteManualId”作为前缀,后面紧跟一个数字,数字必须是路由ID,执行该路由跳转时才会被调用。
  }
}

注意事项请参考上述代码中的注释内容。

免费下载试用