<!-- /* Font Definitions */ @font-face {font-family:宋体; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-alt:SimSun; mso-font-charset:134; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:3 135135232 16 0 262145 0;} @font-face {font-family:仿宋_GB2312; panose-1:2 1 6 9 3 1 1 1 1 1; mso-font-charset:134; mso-generic-font-family:modern; mso-font-pitch:fixed; mso-font-signature:1 135135232 16 0 262144 0;} @font-face {font-family:楷体_GB2312; panose-1:2 1 6 9 3 1 1 1 1 1; mso-font-charset:134; mso-generic-font-family:modern; mso-font-pitch:fixed; mso-font-signature:1 135135232 16 0 262144 0;} @font-face {font-family:"/@宋体"; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-charset:134; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:3 135135232 16 0 262145 0;} @font-face {font-family:"/@仿宋_GB2312"; panose-1:2 1 6 9 3 1 1 1 1 1; mso-font-charset:134; mso-generic-font-family:modern; mso-font-pitch:fixed; mso-font-signature:1 135135232 16 0 262144 0;} @font-face {font-family:"/@楷体_GB2312"; panose-1:2 1 6 9 3 1 1 1 1 1; mso-font-charset:134; mso-generic-font-family:modern; mso-font-pitch:fixed; mso-font-signature:1 135135232 16 0 262144 0;} /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-parent:""; margin:0cm; margin-bottom:.0001pt; text-align:justify; text-justify:inter-ideograph; mso-pagination:none; font-size:10.5pt; mso-bidi-font-size:12.0pt; font-family:"Times New Roman"; mso-fareast-font-family:宋体; mso-font-kerning:1.0pt;} /* Page Definitions */ @page {mso-page-border-surround-header:no; mso-page-border-surround-footer:no;} @page Section1 {size:595.3pt 841.9pt; margin:72.0pt 87.65pt 72.0pt 87.65pt; mso-header-margin:42.55pt; mso-footer-margin:49.6pt; mso-paper-source:0; layout-grid:15.6pt;} div.Section1 {page:Section1;} -->
EOS 流程开发实例
一、任务要求
徐州管道操作系统申请流程管理,首先由申请人填写申请表,然后将申请表提交给信息部门负责人审批,最后由信息部门负责人转派系统管理员为此申请人分配操作系统登录的账号与密码。表 1 为操作系统用户申请表。
操作系统用户申请表
单位/ 部门 |
| ||
申请人 |
| 申请时间 |
|
服务器名称 |
| IP 地址 |
|
申请账号原因/ 用途 | |||
| |||
用户名 |
| 密码 |
|
系统管理员 |
| 信息部审批 |
|
表1
二、开发步骤
1 、数据库表的开发
A 、新建业务流程表
每个流程都应该具有四张表: IPTWF_****_DUPLICATE 、 IPTWF_****_LINK 、 IPTWF_****_TASK 、 IPTWF_****_MAIN 。它们的建表语句如下:
create table IPTWF_****_DUPLICATE
(
DUPLICATE_ID NUMBER(12) not null,
MAIN_ID NUMBER(12),
PROCESS_INST_ID NUMBER(12),
FROM_USER_ID VARCHAR2(32),
FROM_USER_NAME VARCHAR2(32),
TO_USER_ID VARCHAR2(32),
TO_USER_TYPE VARCHAR2(32),
TO_USER_NAME VARCHAR2(32),
SEND_TIME DATE,
ACTIVITY_DEF_ID VARCHAR2(32),
ACTIVITY_DEF_NAME VARCHAR2(32),
ACCEPT_FLAG NUMBER(1),
ACCEPT_TIME DATE,
DELETED_FLAG NUMBER(1)
);
comment on column IPTWF_****_DUPLICATE.DUPLICATE_ID
is ' 抄送表 ID';
comment on column IPTWF_****_DUPLICATE.MAIN_ID
is ' 工单 ID';
comment on column IPTWF_****_DUPLICATE.PROCESS_INST_ID
is ' 流程实例 ID';
comment on column IPTWF_****_DUPLICATE.FROM_USER_ID
is ' 发送者 ID';
comment on column IPTWF_****_DUPLICATE.FROM_USER_NAME
is ' 发送者名称 ';
comment on column IPTWF_****_DUPLICATE.TO_USER_ID
is ' 接收抄送人 ID';
comment on column IPTWF_****_DUPLICATE.TO_USER_TYPE
is ' 接收抄送人类型 ';
comment on column IPTWF_****_DUPLICATE.TO_USER_NAME
is ' 接收抄送人中文名 ';
comment on column IPTWF_****_DUPLICATE.SEND_TIME
is ' 发送时间 ';
comment on column IPTWF_****_DUPLICATE.ACTIVITY_DEF_ID
is ' 发送所处的环节 ID';
comment on column IPTWF_****_DUPLICATE.ACTIVITY_DEF_NAME
is ' 发送所处的环节名称 ';
comment on column IPTWF_****_DUPLICATE.ACCEPT_FLAG
is ' 是否已打开查看 ';
comment on column IPTWF_****_DUPLICATE.ACCEPT_TIME
is ' 第一次打开时间 ';
comment on column IPTWF_****_DUPLICATE.DELETED_FLAG
is ' 是否已删除 ';
alter table IPTWF_****_DUPLICATE
add constraint PK_****_DUPLICATE_ID primary key (DUPLICATE_ID);
create table IPTWF_****_LINK
(
LINK_ID NUMBER(12) not null,
PHASE_ADVICE_FLAG NUMBER(1),
MAIN_ID NUMBER(12),
PROCESS_INST_ID NUMBER(12),
ACTIVITY_DEF_ID VARCHAR2(64),
ACTIVITY_INST_NAME VARCHAR2(64),
ACTIVITY_INST_ID NUMBER(12),
OPERATE_TYPE NUMBER(12),
OPERATE_TIME DATE,
OPERATE_USER_ID VARCHAR2(50),
OPERATE_DEPT_ID NUMBER(12),
OPERATE_CONTACT VARCHAR2(32),
OPERATE_ROLE_ID VARCHAR2(32),
NEXT_ACCEPT_LIMIT DATE,
NEXT_COMPLETE_LIMIT DATE,
ACCEPT_TIME DATE,
ACCEPT_FLAG NUMBER(12),
COMPLETE_TIME DATE,
COMPLETE_FLAG NUMBER(12),
SHEET_ACCESSORIES VARCHAR2(256),
REMARK VARCHAR2(256),
WORKITEM_ID NUMBER(12),
OPERATE_USER_NAME VARCHAR2(50),
NEXTSTEPPROCESSOR VARCHAR2(256),
DESCRIPTION VARCHAR2(256)
);
comment on column IPTWF_****_LINK.LINK_ID
is 'link 表主键 ';
comment on column IPTWF_****_LINK.PHASE_ADVICE_FLAG
is ' 阶段建议标志,默认为空, 1 :阶段建议 ';
comment on column IPTWF_****_LINK.MAIN_ID
is 'main 表主键 ';
comment on column IPTWF_****_LINK.PROCESS_INST_ID
is ' 流程实例 id';
comment on column IPTWF_****_LINK.ACTIVITY_DEF_ID
is ' 活动定义 id';
comment on column IPTWF_****_LINK.ACTIVITY_INST_NAME
is ' 活动项名称 ';
comment on column IPTWF_****_LINK.ACTIVITY_INST_ID
is ' 活动实例 id';
comment on column IPTWF_****_LINK.OPERATE_TYPE
is ' 操作类型: 1. 普通处理 ,2 转派 ,3 驳回 ,4 直接提交 ,5 阶段回复 ,6 终止流程 ';
comment on column IPTWF_****_LINK.OPERATE_TIME
is ' 操作时间 ';
comment on column IPTWF_****_LINK.OPERATE_USER_ID
is ' 操作人 ';
comment on column IPTWF_****_LINK.OPERATE_DEPT_ID
is ' 操作部门 ';
comment on column IPTWF_****_LINK.OPERATE_CONTACT
is ' 操作人联系方式 ';
comment on column IPTWF_****_LINK.OPERATE_ROLE_ID
is ' 操作人角色 ';
comment on column IPTWF_****_LINK.NEXT_ACCEPT_LIMIT
is ' 当前操作人对下一环节的接单时限要求:接单时限 ( 派单操作专用 ) 回复时限 ';
comment on column IPTWF_****_LINK.NEXT_COMPLETE_LIMIT
is ' 当前操作人对下一环节的完成时限要求:回复时限 ( 派单操作专用 )';
comment on column IPTWF_****_LINK.ACCEPT_TIME
is ' 接单时间 ( 接单操作专用 )';
comment on column IPTWF_****_LINK.ACCEPT_FLAG
is ' 接单及时标志 ( 接单操作专用 )';
comment on column IPTWF_****_LINK.COMPLETE_TIME
is ' 回复时间 ( 回单操作专用 )';
comment on column IPTWF_****_LINK.COMPLETE_FLAG
is ' 回复及时标志 ( 回单操作专用 )';
comment on column IPTWF_****_LINK.SHEET_ACCESSORIES
is ' 附件,如果在一个页面中有多个附件分组,那么就建立多个字段,分别记录 ';
comment on column IPTWF_****_LINK.REMARK
is ' 处理意见 ';
comment on column IPTWF_****_LINK.WORKITEM_ID
is ' 工作项 id';
comment on column IPTWF_****_LINK.OPERATE_USER_NAME
is ' 操作中文名 ';
comment on column IPTWF_****_LINK.NEXTSTEPPROCESSOR
is ' 下一步处理者 ';
comment on column IPTWF_****_LINK.DESCRIPTION
is ' 处理描述 ';
alter table IPTWF_****_LINK
add constraint PK_****_LINK_ID primary key (LINK_ID);
create table IPTWF_****_TASK
(
TASK_ID NUMBER(12) not null,
PROCESS_INST_ID NUMBER(12),
ACTIVITY_DEF_ID VARCHAR2(64),
ACTIVITY_INST_NAME VARCHAR2(64),
ACTIVITY_INST_ID NUMBER(12),
WORKITEM_ID NUMBER(12),
TASK_ACCEPT_LIMIT DATE,
FROM_USER_ID VARCHAR2(50),
FROM_USER_NAME VARCHAR2(64),
ACCEPT_FLAG NUMBER(12),
TASK_COMPLETE_LIMIT DATE,
COMPLETE_TIME DATE,
COMPLETE_FLAG NUMBER(12),
TASK_TYPE NUMBER(12),
CREATE_TIME DATE,
OPERATE_TIME DATE,
MAIN_ID NUMBER(12),
ROOT_PROCESS_INST_ID NUMBER(12),
ROOT_ACTIVITY_INST_ID NUMBER(12),
ROOT_WORKITEM_ID NUMBER(12),
PARENT_PROCESS_INST_ID NUMBER(12),
PARENT_ACTIVITY_INST_ID NUMBER(12),
PARENT_WORKITEM_ID NUMBER(12),
DRAW_FLAG NUMBER(12),
READ_FLAG VARCHAR2(10),
ACCEPT_TIME DATE,
LOCKOWNER VARCHAR2(32)
);
comment on column IPTWF_****_TASK.TASK_ID
is 'task 表主键 ';
comment on column IPTWF_****_TASK.PROCESS_INST_ID
is ' 流程实例 id';
comment on column IPTWF_****_TASK.ACTIVITY_DEF_ID
is ' 活动定义 id';
comment on column IPTWF_****_TASK.ACTIVITY_INST_NAME
is ' 活动项名称 ';
comment on column IPTWF_****_TASK.ACTIVITY_INST_ID
is ' 活动实例 id';
comment on column IPTWF_****_TASK.WORKITEM_ID
is ' 工作项 id';
comment on column IPTWF_****_TASK.TASK_ACCEPT_LIMIT
is ' 接单时限 ';
comment on column IPTWF_****_TASK.FROM_USER_ID
is ' 上一步处理人 ID';
comment on column IPTWF_****_TASK.FROM_USER_NAME
is ' 上一步处理人名称 ';
comment on column IPTWF_****_TASK.ACCEPT_FLAG
is ' 接单及时标志 ';
comment on column IPTWF_****_TASK.TASK_COMPLETE_LIMIT
is ' 回复时限 ';
comment on column IPTWF_****_TASK.COMPLETE_TIME
is ' 回复时间 ';
comment on column IPTWF_****_TASK.COMPLETE_FLAG
is ' 回复及时标志 ';
comment on column IPTWF_****_TASK.TASK_TYPE
is 'task 类型: 2008-11-18 添加:主工单( 1 )、子工单( 2 )、抄送任务产生的( 3 ) ';
comment on column IPTWF_****_TASK.CREATE_TIME
is 'task 记录生成时间 ';
comment on column IPTWF_****_TASK.OPERATE_TIME
is ' 操作时间 ';
comment on column IPTWF_****_TASK.MAIN_ID
is ' 对 main 表工单主键 ';
comment on column IPTWF_****_TASK.ROOT_PROCESS_INST_ID
is ' 发起子流程的根流程实例 ID';
comment on column IPTWF_****_TASK.ROOT_ACTIVITY_INST_ID
is ' 发起子流程的根活动实例 id';
comment on column IPTWF_****_TASK.ROOT_WORKITEM_ID
is ' 发起子流程的根工作项 id';
comment on column IPTWF_****_TASK.PARENT_PROCESS_INST_ID
is ' 发起子流程的父流程实例 id';
comment on column IPTWF_****_TASK.PARENT_ACTIVITY_INST_ID
is ' 发起子流程的父活动实例 id';
comment on column IPTWF_****_TASK.PARENT_WORKITEM_ID
is ' 发起子流程的父工作项 id';
comment on column IPTWF_****_TASK.DRAW_FLAG
is ' 是否已领取 ,1 :领取, 0 :未领取 ';
comment on column IPTWF_****_TASK.READ_FLAG
is ' 是否查看抄送: 1 表式已查看;对应的 task_type 为 3';
comment on column IPTWF_****_TASK.ACCEPT_TIME
is ' 接单时间 ';
comment on column IPTWF_****_TASK.LOCKOWNER
is ' 上锁人 UESR_ID';
alter table IPTWF_****_TASK
add constraint PK_****_TASK_ID primary key (TASK_ID);
create table IPTWF_****_MAIN
(
MAIN_ID NUMBER(12) not null,
PROCESS_INST_ID NUMBER(12),
SHEET_ID VARCHAR2(128),
TITLE VARCHAR2(128),
DETAIL VARCHAR2(1024),
ANNEX VARCHAR2(256),
STATUS NUMBER(12),
SEND_TIME DATE,
SEND_USER_ID VARCHAR2(50),
SEND_USER_NAME VARCHAR2(32),
SEND_DEPT_ID NUMBER(12),
SEND_CONTACT VARCHAR2(32),
SEND_ROLE_ID VARCHAR2(32),
END_TIME DATE,
END_USER_ID NUMBER(12),
END_USER_NAME VARCHAR2(32),
END_DEPT_ID NUMBER(12),
END_CONTACT VARCHAR2(32),
END_ROLE_ID VARCHAR2(32),
DELETED NUMBER(12),
PARENT_MAIN_ID NUMBER(12),
PARENT_PROCESS_INST_ID NUMBER(12),
PARENT_ACTIVITY_ID NUMBER(12),
PARENT_WORKITEM_ID NUMBER(12),
MAIN_
);
comment on column IPTWF_****_MAIN.MAIN_ID
is 'main 表主键 ';
comment on column IPTWF_****_MAIN.PROCESS_INST_ID
is ' 流程实例 id';
comment on column IPTWF_****_MAIN.SHEET_ID
is ' 工单流水号 ';
comment on column IPTWF_****_MAIN.TITLE
is ' 工单标题 ';
comment on column IPTWF_****_MAIN.DETAIL
is ' 工单信息的详细描述 ';
comment on column IPTWF_****_MAIN.ANNEX
is ' 新建工单附件,如果有多个附件,用逗号区分(如: 111 , 112 ) ';
comment on column IPTWF_****_MAIN.STATUS
is ' 工单状态: 0: 草稿 1 : 新建 2 :已分配、 3 :退回、 4 :处理中、 5 :已解决、 6 :已关闭 ';
comment on column IPTWF_****_MAIN.SEND_TIME
is ' 派单时间,流程第一个环节的生成时间 ';
comment on column IPTWF_****_MAIN.SEND_USER_ID
is ' 建单 id';
comment on column IPTWF_****_MAIN.SEND_USER_NAME
is ' 建单人 ';
comment on column IPTWF_****_MAIN.SEND_DEPT_ID
is ' 建单人部门 ';
comment on column IPTWF_****_MAIN.SEND_CONTACT
is ' 建单人联系方式 ';
comment on column IPTWF_****_MAIN.SEND_ROLE_ID
is ' 建单人角色 ';
comment on column IPTWF_****_MAIN.END_TIME
is ' 结束时间 ';
comment on column IPTWF_****_MAIN.END_USER_ID
is ' 结束人 ID';
comment on column IPTWF_****_MAIN.END_USER_NAME
is ' 结束人 ';
comment on column IPTWF_****_MAIN.END_DEPT_ID
is ' 结束人部门 ';
comment on column IPTWF_****_MAIN.END_CONTACT
is ' 结束人联系方式 ';
comment on column IPTWF_****_MAIN.END_ROLE_ID
is ' 结束人角色 ';
comment on column IPTWF_****_MAIN.DELETED
is ' 是否有效: 0 :有效、 1 无效 ';
comment on column IPTWF_****_MAIN.PARENT_MAIN_ID
is 'a 工单触发 b 工单, a 工单的主键,父子流程,记录在子流程中。 ';
comment on column IPTWF_****_MAIN.PARENT_PROCESS_INST_ID
is 'a 工单触发 b 工单, a 工单的流程实例 ';
comment on column IPTWF_****_MAIN.PARENT_ACTIVITY_ID
is 'a 工单触发 b 工单, a 工单的活动实例 ';
comment on column IPTWF_****_MAIN.PARENT_WORKITEM_ID
is 'a 工单触发 b 工单, a 工单的工作项 ';
alter table IPTWF_****_MAIN
add constraint FK_****_MAIN_ID primary key (MAIN_ID);
B 、表说明
其中 **** 由具体的项目名称和流程以及业务名称组成,例如:徐州管道的操作系统用户申请流程对应的表为 IPTWF_XZGD_OSUSERAPPLY_MAIN 、 IPTWF_XZGD_OSUSERAPPLY_LINK 、 IPTWF_XZGD_OSUSERAPPLY_TASK 、 IPTWF_XZGD_OSUSERAPPLY_DUPLICATE 。只有 MAIN 表需要修改,其余的三张表不需要改变,根据操作系统用户申请表单中的信息在 MAIN 表中添加相应的字段信息,字段的命名方式为“ MAIN_ 能表示实际字段意思的字母或英文单词缩写”。
2 、 EOS 配置
A 、新建流程构件包
流程构件包的命名方式:项目名 + 流程名,例如:xzgdOSUserApply
B 、定制流程图
根据具体的业务逻辑,画出此业务的流程图,流程图命名方式:构件包名 +Workflow 。徐州管道操作系统用户申请的流程图如下:
图 1
C 、定制数据模型
将刚开始建立的四张表定制成相应的数据模型,如图 2 所示:
图 2
3 、 Web 配置
A 、流程业务字典配置
以 root 账户登录,进行 Web 配置,如图 3 是在业务字典类型中添加此流程的状态字典,如图 4 是徐州管道操作系统申请管理流程的业务字典的添加。
图 3
图 4
B 、流程配置
添加流程配置信息,如图 5 所示:
图 5
点击流程配置信息的录入主表,进入图 6 所示,将要用到的字段添加到已入库,以便在页面显示。点击完录入主表后,字段定义配置就自动完成了。
图 6
C 、组定义配置
页面上有可能需要将主表字段分组显示,所以要建立几个组配置以便页面上有效地控制各字段的显示。如图 7 添加组定义配置。
图 7
D 、连线配置
添加连线定义配置,如图 8 所示,选择起始环节和结束环节确定一条唯一的连线,根据要求填写其他信息。
图 8
添加完连线配置后,为此连线配置连线操作人,如图 9 所示
图 9
E 、活动定义配置
添加活动定义配置,如图 10 所示:
图 10
再为此活动配置组关系如图 11 和配置字段信息如图 12
图 11
选中的组可以在进行此活动时显示此组的信息
图 12
选中的字段在进行此活动时是可编辑的
4 、 EOS 开发
完成前三步后,就可以开发其他功能了,如 JSP 的开发、页面流的开发、逻辑流的开发、逻辑构件、命名 SQL 等等。如徐州管道操作系统申请流程管理中的页面流的开发,如图 13 所示:
图 13
图 14 为徐州管道操作系统申请流程管理中的命名 SQL 的开发
图 14
三、功能测试
图 15 和图 16 分别是流程走完之后的工单信息和打印效果
图 15
图 16