多级填报快速使用手册
做了两个关于多级填报的任务,感觉上手很不容易,而且很多东西很乱,而且随着客户对多级填报的需求逐渐的增多,而现有的平台里又没有一个完整的例子,于是想总结一下,以供各位同事演示或者测试使用。
阅读本篇文章需要注意的事项:
1 仅供内部测试使用,请勿将此文章发给客户使用。
2 由于平台版本的更新,多级填报部分也可能会有升级,可能导致文章中的相关内容无法跑通 ,我会及时跟进对应上平台发布的进度,对文章进行及时的修改,欢迎遇到问题的同事找我沟通。
下面进入正题,如何建立一个多级填报任务。
第一步,建立流程。
流程的建立离不开数据库表数据,先将相关数据库表结构给大家介绍一下 , 具体表结构与字段,请详见附录(某些字段可能跟现在使用的表字段有差异,但是差异并不会影响大家对主要字段的理解)。以上是相关的菜单和介绍,可能让大家看的很茫然,大家可以对照下面的 sql 语句对相关的表进行理解。
将以下 sql 语句运行就可以得到一个完整的流程。
– —————————-
– Table structure for rt_nodeoperation
– —————————-
DROP TABLE IF EXISTS rt_nodeoperation ;
CREATE TABLE rt_nodeoperation (
Node_ID INTEGER DEFAULT NULL,
Operation_ID INTEGER DEFAULT NULL,
Operation_VisibleInList INTEGER DEFAULT NULL,
Operation_VisibleInMenu INTEGER DEFAULT NULL,
Operation_Order INTEGER DEFAULT NULL
)
– —————————-
– Records of rt_nodeoperation
– —————————-
INSERT INTO rt_nodeoperation VALUES (’12′, ’1′, ’1′, ’1′, null);
INSERT INTO rt_nodeoperation VALUES (’12′, ’2′, ’1′, ’1′, null);
INSERT INTO rt_nodeoperation VALUES (’11′, ’1′, ’1′, ’1′, null);
– —————————-
– Table structure for rt_operation
– —————————-
DROP TABLE IF EXISTS rt_operation ;
CREATE TABLE rt_operation (
Operation_ID INTEGER DEFAULT NULL,
Operation_Name varchar(255) DEFAULT NULL,
Operation_Describe varchar(255) DEFAULT NULL,
Operation_Type INTEGER DEFAULT NULL,
Operation_ClassName varchar(255) DEFAULT NULL,
Operation_ImagePath varchar(255) DEFAULT NULL
)
– —————————-
– Records of rt_operation
– —————————-
INSERT INTO rt_operation VALUES (’1′, ‘完成 ‘, ‘ 前往下一个节点 ‘, ’1′, ‘com.runqianapp.workflow.operations.CompleteOperation’, null);
INSERT INTO rt_operation VALUES (’2′, ‘回退 ‘, ‘ 退回上一个节点 ‘, ’3′, ‘com.runqianapp.workflow.operations.RollbackOperation’, null);
INSERT INTO rt_operation VALUES (’3′, ‘关闭 ‘, ‘ 关闭当前节点 ‘, ’3′, ‘com.runqianapp.workflow.operations.CloseOperation’, null);
INSERT INTO rt_operation VALUES (’4′, ‘分发 ‘, ‘ 按用户分发 ‘, ’4′, ‘com.runqianapp.workflow.operations.IssuedSubTaskByUserOperation’, null);
INSERT INTO rt_operation VALUES (’5′, ‘分发 ‘, ‘ 按机构分发 ‘, ’4′, ‘com.runqianapp.workflow.operations.IssuedSubTaskByOrgOperation’, null);
INSERT INTO rt_operation VALUES (’6′, ‘子任务 ‘, ‘ 查看模式 ‘, ’4′, ‘com.runqianapp.workflow.operations.ReadOnlySubTaskListOperation’, null);
INSERT INTO rt_operation VALUES (’7′, ‘子任务 ‘, ‘ 处理模式 ‘, ’4′, ‘com.runqianapp.workflow.operations.SubTaskListOperation’, null);
– —————————-
– Table structure for wf_node
– —————————-
DROP TABLE IF EXISTS wf_node ;
CREATE TABLE wf_node (
Node_ID INTEGER NOT NULL,
Node_Name varchar(255) DEFAULT NULL,
Node_Type INTEGER DEFAULT NULL,
Node_Describe varchar(255) DEFAULT NULL,
Node_TransactionBox varchar(255) DEFAULT NULL,
Node_Listener varchar(255) DEFAULT NULL,
Node_Mode varchar(32) DEFAULT NULL
)
– —————————-
– Records of wf_node
– —————————-
INSERT INTO wf_node VALUES (’1′, ‘起始节点 ‘, ’0′, null, ‘com.runqianapp.workflow.input.InputTransaction’, ‘com.runqianapp.workflow.input.InputNodeListener’, null);
INSERT INTO wf_node VALUES (’2′, ‘结束节点 ‘, ’1′, null, ‘com.runqianapp.workflow.input.InputTransaction’, ‘com.runqianapp.workflow.input.InputNodeListener’, null);
INSERT INTO wf_node VALUES (’11′, ‘填报节点 ‘, ’2′, null, ‘com.runqianapp.workflow.input.InputTransaction’, ‘com.runqianapp.workflow.input.InputNodeListener’, ”);
INSERT INTO wf_node VALUES (’12′, ‘审批节点 ‘, ’2′, ”, ‘com.runqianapp.workflow.input.InputTransaction’, ‘com.runqianapp.workflow.input.InputNodeListener’, ”);
– —————————-
– Table structure for wf_procdefine
– —————————-
DROP TABLE IF EXISTS wf_procdefine ;
CREATE TABLE wf_procdefine (
Proc_ID INTEGER NOT NULL,
Proc_Name varchar(255) DEFAULT NULL,
Proc_Describe varchar(255),
Proc_StartNodeID INTEGER NOT NULL,
Proc_EndNodeID INTEGER NOT NULL,
Proc_BranchMark varchar(255),
Proc_ReachIsFull INTEGER DEFAULT NULL,
Proc_MultiPassIN INTEGER DEFAULT NULL,
Proc_MultiPassOut INTEGER DEFAULT NULL,
Proc_UserFilter varchar(255) DEFAULT NULL,
Proc_BackFilterType INTEGER DEFAULT NULL,
Proc_BackCompleteType INTEGER DEFAULT NULL
)
– —————————-
– Records of wf_procdefine
– —————————-
INSERT INTO wf_procdefine VALUES (’1′, ‘节点流转到销省公司 ‘, null, ’1′, ’11′, ’0′, ’0′, ’1′, ’1′, ‘com.runqianapp.workflow.input.SameOrgUser’, ’1′, ’1′);
INSERT INTO wf_procdefine VALUES (’1′, ‘节点流转结束 ‘, null, ’11′, ’12′, ’0′, ’0′, ’1′, ’1′, ‘com.runqianapp.workflow.input.InputUserFilter’, ’1′, ’1′);
INSERT INTO wf_procdefine VALUES (’1′, ‘节点流转到市局填报 ‘, null, ’12′, ’2′, ’0′, ’0′, ’1′, ’1′, ‘com.runqianapp.workflow.input.SameOrgUser’, ’1′, ’1′);
– —————————-
– Table structure for wf_process
– —————————-
DROP TABLE IF EXISTS wf_process ;
CREATE TABLE wf_process (
Proc_ID INTEGER NOT NULL,
Proc_Name varchar(255) DEFAULT NULL,
Proc_Type INTEGER DEFAULT NULL,
Proc_TemplateID varchar(255) DEFAULT NULL,
Proc_Describe varchar(255) DEFAULT NULL,
Proc_Listener varchar(255) DEFAULT NULL,
Proc_TimeLimit INTEGER DEFAULT NULL,
Proc_TimeType INTEGER DEFAULT NULL,
Proc_Xml varchar(255) DEFAULT NULL
)
– —————————-
– Records of wf_process
– —————————-
INSERT INTO wf_process VALUES (’1′, ‘测试流程 ‘, ’2′, null, null, ‘com.runqianapp.workflow.input.InputTaskListener’, ’99′, ’1′, null);
通过以上步骤 流程就建立完毕了。
第二步,建立报表。
建立报表需要注意以下几点:
1, 目前只能使用 v4 建立的填报表作为多级填报的资源。
2, 填报表必须建立一个名为 Task_ID 的参数 ,必须保证参数名大小写正确。
3, 填报的数据库表中必须增加一列,以存储 taskid ,在报表更新的更新属性中需要增加对此列的更新,更新的值为 Task_ID 这个参数,主键需要勾选上。(个人认为这种设置不是很理想,因为这样直接改变了客户的数据库表的表结构,不如新建一个数据库表,通过外键关联,以确定唯一性和记录任务的 Task_ID )。
报表建立完成后即可在平台中添加以下这个资源。
第三步,定义层级关系,如果是演示,可以直接使用系统中自带的层级关系。
由销售部的王伟向销售各个部门下发任务。
最后一步,新建填报下发任务。
这步中需要注意的是当前版本( 2012 年 7 月初版本)中的 bug 导致无法将资源回写到处理对象中,需要更新一个 jsp , chooseRes.jsp 这个 jsp 我会将他附在附件中,估计之后的版本这个问题修正了就不需要这么做了。
还有一个需要注意的问题是,当前任务下发的对象如果通过组织机构下发,则只能发给下级,无法发给同级 ,即使按照角色下发,发给了同级,但是因为流程的原因,会导致无人审批,这点在了解产品的时候需要注意,同时也希望相关同事能对这块做一个改进。
设置之后,多级填报的功能就能正常使用了,如果有什么问题可以跟我联系,我会在附件中贴上报表和 报表的建表语句,以供测试使用。
附录 表字段定义介绍
WF_Process 表 |
流程表:用于记录流程基本属性 |
|
字段 |
字段定义说明 |
是否必设 |
Proc_ID |
流程 ID |
必设 |
Proc_Name |
流程名称 |
必设 |
Proc_Type |
流程类型: 0 - 静态流程 1 - 动态流程 2 - 动态模板 |
必设 |
Proc_TemplateID |
动态流程模板 ID |
非必设,只有当 Proc_Type 为 1 ,即流程类型为动态流程时看,才需定义 |
Proc_Describe |
流程描述 |
非必设 |
Proc_Listener |
流程任务监听器类 |
必设,需设定流程任务实例监听器所使用的类名 |
Proc_TimeLimit |
流程处理总时限,为数字 |
非必设,需要使用流程处理时限预警功能时才需设置 |
Proc_TimeType |
处理时限时间类型: 0 - 工时 1 - 工作日 2 - 小时 3 - 天 |
非必设,需要使用里程处理时限预警功能是菜需设置 |
WF_Node 表 |
节点表:用于记录节点基本属性 |
|
字段 |
字段定义说明 |
是否必设 |
Node_ID |
节点 ID |
必设 |
Node_Name |
节点名称 |
必设 |
Node_Type |
节点类型: 0 - 开始节点 1 - 结束节点 2 - 手动节点 3 - 自动节点 |
必设 |
Node_Describe |
节点描述 |
非必设 |
Node_TransactionBox |
节点业务容器类 |
必设,需设定节点业务容器类名 |
Node_Listener |
节点监听器类 |
必设,需设定节点实例监听器类名 |
WF_ProcDefine 表 |
流程定义表:用于记录流程节点的流转路径 |
|
字段 |
字段定义说明 |
是否必设 |
Proc_ID |
流程 ID |
必设 |
Proc_Name |
路径名称 |
必设 |
Proc_Describe |
路径描述 |
非必设 |
Proc_StartNodeID |
出发节点 ID |
必设 |
Proc_EndNodeID |
到达节点 ID |
必设 |
Proc_BranchMark |
出发分支标号 |
必设 |
Proc_ReachIsFull |
N 对 1 的到达充分性: 0- 充分方式,任一个路径到了就行; 1- 必要方式,所有路径都达到才行 |
必设 |
Proc_MultiPassIN |
多次流转变量 _ 到达 |
必设 |
Proc_MultiPassOut |
多次流转变量 _ 出发 |
必设 |
RT_NodeOrg 表 |
节点主办机构表:用于记录节点的主办机构 |
|
字段 |
字段定义说明 |
是否必设 |
Org_ID |
机构 ID |
必设 |
Node_ID |
节点 ID |
必设 |
RT_NodeRole 表 |
节点主办角色表:用于记录节点的主办角色 |
|
字段 |
字段定义说明 |
是否必设 |
Role_ID |
角色 ID |
必设 |
Node_ID |
节点 ID |
必设 |
RT_NodeUser 表 |
节点主办用户表:用于记录节点的主办用户 |
|
字段 |
字段定义说明 |
是否必设 |
User_ID |
用户 ID |
必设 |
Node_ID |
节点 ID |
必设 |
RT_ProcNodeOperation 表 |
流程节点操作菜单表:用于记录节点的可处理操作 |
|
字段 |
字段定义说明 |
是否必设 |
Node_ID |
节点 ID |
必设 |
Proc_ID |
流程 ID |
必设 |
Operation_ID |
操作菜单 ID |
必设 |
Operation_VisibleInList |
菜单是否在操作任务列表显示: 0 - 显示 1 - 不显示 |
必设 |
Operation_VisibleInMenu |
菜单是否在填报页面中显示: 0 - 显示 1 - 不显示 |
必设 |
Operation_Order |
操作菜单排列顺序 |
必设 |
RT_Operation 表 |
操作菜单表:用于记录工作流中可用的操作菜单 |
|
字段 |
字段定义说明 |
是否必设 |
Operation_ID |
操作菜单 ID |
必设 |
Operation_Name |
操作菜单名称 |
必设 |
Operation_Describe |
操作菜单描述 |
非必设 |
Operation_Type |
操作菜单类型 |
必设 |
Operation_ClassName |
操作菜单类名 |
必设 |
Operation_ImagePath |
操作菜单图片路径 |
非必设 |
RT_NodeObject 表 |
节点处理对象表:用于记录工作节点处理的填报表 |
|
字段 |
字段定义说明 |
是否必设 |
Node_ID |
节点 ID |
必设 |
Proc_ID |
流程 ID |
必设 |
Object_No |
处理对象编号,为处理对象设置一个唯一的对象编号 |
必设 |
Object_Type |
处理对象类型: 0 - 自定义; 如选择的是 RBP 中的资源,则对应存该资源的类型 ID |
必设 |
Object_Path |
处理对象路径或 ID : 若处理对象为 RBP 资源,则值为资源 ID ; 若处理对象为自定义,则值为对象文件所在位置的路径 |
必设 |
RT_NodeObjectAuthority 表 |
节点处理对象字段权限表: 描述节点处理对象(填报表)的字段可读、可写等权限设置 |
|
字段 |
字段定义说明 |
是否必设 |
Node_ID |
节点 ID |
必设 |
Proc_ID |
流程 ID |
必设 |
Object_No |
处理对象编号 |
必设 |
Field_Name |
字段名称,存储的值为报表单元格名称,如: B5 、 C3 |
必设 |
Field_Description |
字段描述,默认保存与 FieldName 字段相同的值,即报表单元格名称,用户可修改,输入业务含义的字段描述,从而可供应用使用,比如提供任务关键信息显示的列名使用。 |
非必设 |
Authority_Type |
权限类型: 0- 可见 1- 可写 2- 电子签章 3- 关键信息 |
必设 |
Authority_Value |
权限值: 0-false 1-true |
必设 |
OperationID |
操作菜单 ID |
非必设 |