流程设计
# 一、概念
工作流:什么是“工作流”?“工作流”这个概念,同样是源起与国外,专业一点讲的话,应该叫做Workflow,在广泛概念下,工作场景下中遇见的大部分工作,假如需要其他人参与协作的,是需要不同角色、部门的人协同完成的一个大任务,工作流就是可以将这项任务,按照公司管理规则的、标准化要求,形成可视化的、可管控的线上的工作执行流程。任务的整个周期全部呈现线性,完整的工作执行过程
流程表单:流程步骤绑定的表单。表单数据库表必须有 FlowState(流程状态码:99:完成;1:流转中;-1:作废)、StepName(当前步骤名称)字段
# 二、流程列表
菜单位置:系统管理 ==> 流程管理 ==> 流程列表
展示所有已配置的工作流,可根据流程名称、创建时间、流程分类进行查询
操作按钮说明:
清空:清除设置的工作流查询内容
显示模式:设置流程列表显示样式
新建流程:新增工作流,点击打开一个新的菜单页签【流程设计】
设计:打开所选流程设计页面,用于修改流程
发起:打开所选流程一个步骤绑定的表单
发布:发布所选流程(新增、修改的流程需要发布后才能生效)
删除:删除所选流程
# 三、流程设计
入口:点击流程列表页面【新建流程】或【设计】按钮

# 1 区域一
图标按钮从左到右依次为:属性、流程列表、流程
# 1.1 属性
流程基础属性设计页面,既区域二操作部分。设置完切记要先保存再发布才会生效。
# 1.1.1 基本属性
(1)基本信息
流程ID:流程唯一标识,系统生成,不可修改
流程名称:设置流程名称
流程分类:选择流程类型
背景颜色:设置【流程列表】页签流程图标背景色
图标:设置【流程列表】页签流程图标
案例:
流程权限:选择私人,则该流程设计数据仅创建人可见;选择公开,则多一个【公开类型】属性。
公开类型:选择所有人,则该流程数据对所有用户可见;选择角色,则对拥有所选角色的用户可见。

(2)数据连接
- 数据表:选择需要应用工作流的数据库表名,一般为流程表单绑定的表
- 主键:选择所选数据表的主键
(3)标识字段
- 数据连接:默认自定义
- 数据表:与【数据连接】中所选的表一致
- 完成标识:选择字段【FlowState】
- 开始标识值:1
- 结束标识值:99
- 作废标识值:-1
- 步骤标识:选择字段【StepName】
# 1.1.2 主题配置
设置流程图显示样式,不设置将使用默认样式

# 1.2 流程列表

- 批量发布:同时发布所选中的流程
- 全部发布:一键发布所有流程
- 流程状态:根据选择的状态筛查流程数据
- 打开:打开所选流程的设计页面
# 1.3 流程
用于流程设计,主要由两部分组成
1.3.1 工具栏
- 开始、结束:每个流程都有且仅有一对开始结束步骤
- 步骤:流程的每个节点
- 连线:流程节点连接线
1.3.2 流程画板
(1)步骤:双击打开左侧步骤属性设置面板
基本:设置步骤基本属性
表单:设置步骤关联的表单
策略:根据流程需要配置执行策略
抄送:设置抄送人
通知:设置当前步骤操作按钮
按钮:设置当前步骤操作按钮
处理人:设置拥有该流程步骤操作权限的人
(2)连接线
属性:可设置连接线名称
流转后:配置数据流转后的业务事件。参数语法参考表单设计基本属性中的接口参数。自定义组件用于调用自定义存储过程。
结束前:配置数据流转前的业务事件。用法与流转前一致。
# 2 区域三
# 2.1 保存
保存已配置的流程信息
# 2.2 另存
另存已配置好的流程(复制)
# 2.3 发布
保存的流程需发布后才能生效
# 2.4 卸载
卸载后的流程不可使用
# 2.5 升版
复制一条相同的流程数据,复制出的流程版本加1
# 四、列表配置
# 1 列表查询sql
Select wo.SYSID,wo.IsEnabled,wo.FlowState,wo.OrderNo,wo.WorkOrderNo,wo.LotNo,wo.ProductName, p.FormulaCode,
p.Version,wo.PlanQty,wo.RealQty,wo.PlanStartTime,wo.PlanEndTime,wo.WoState,wo.CreateTime,
w.Name,
wft.SenderName,
wft.SenderTime,
case when (wft.StepName='' OR wft.StepName IS NULL) THEN wo.StepName ELSE wft.StepName END StepName,
case when wo.Creater='$UserID$' THEN 1 ELSE 0 END IsSelf,
wft.ReceiveName,
wft.ReceiveTime,
wft.FlowID,
wft.ID,
wft.StepID,
wft.GroupID,
CASE WHEN wft.FlowID IS NULL THEN 0 ELSE 1 END CurrentStatus,wft.InstanceID, u.USER_Name
from Mes_Produce_Wo wo -- 需要应用工作流的主表
left join Smart_UserInfo u on wo.Creater=u.SYSID
left join Mes_Produce_Formula p on p.sysid=wo.FormulaSysID -- wft.ReceiveID 接收人员ID
LEFT JOIN Smart_WorkFlowTask wft on wo.SYSID=wft.InstanceID and wft.ReceiveID = '$UserID$'
and wft.FlowID ='6e24b322144d42cc94fe287a2bdb38a7' -- 流程ID
AND wft.Status = 0 -- 流程状态0:待处理 1:打开 2:完成 3:退回4:他人已处理5:他人已退回6:终止7
LEFT JOIN Smart_WorkFlow w ON wft.FlowID = w.ID
where wft.ID is not null
ORDER BY wft.ReceiveTime DESC,wo.CreateTime desc
-- Smart_WorkFlow 流程主表
-- Smart_WorkFlowTask 流程待办事项表
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
流程ID:可从流程基本属性中复制
# 2 页面脚本
流程按钮调用事件脚本
function TestOp($flowid,$taskid,$stepid,$groupid,$instanceid,$formopenmode,$flowstate)
{ // 添加申请
var data={
flowid:$flowid,//流程ID
taskid:$taskid,//任务ID
stepid:$stepid,//步骤
groupid:$groupid,//人员组
instanceid:$instanceid,//实例
formopenmode:$formopenmode,
formopenmode:0,
height:window.document.body.offsetHeight*0.95,
width:window.document.body.offsetWidth*0.95
};
processHandle(data);
}
function htTestOp($flowid,$taskid,$stepid,$groupid,$instanceid)
{ // 处理代办
var data={
flowid:$flowid,
taskid:$taskid,
stepid:$stepid,
groupid:$groupid,
instanceid:$instanceid,
formopenmode:1,
height:window.document.body.offsetHeight*0.95,
width:window.document.body.offsetWidth*0.95
};
processHandle(data);
}
function showTestOp($flowid,$taskid,$stepid,$groupid,$instanceid,$Sysid)
{ // 查看
if($flowid){
var data={
flowid:$flowid,
taskid:$taskid,
stepid:$stepid,
groupid:$groupid,
instanceid:$instanceid,
formopenmode:2,
height:window.document.body.offsetHeight*0.95,
width:window.document.body.offsetWidth*0.95
};
processHandle(data);
}else{
view($Sysid);
}}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# 3 按钮调用
# 3.1 添加申请
TestOp('流程ID')
# 3.2 处理待办
htTestOp('$datarow&FlowID,ID,StepID,GroupID,InstanceID&$');
# 3.3 查看
showTestOp('$datarow&FlowID,ID,StepID,GroupID,InstanceID,SYSID&$');