iBizModel 工作流(PSWORKFLOW)模型体系详解
基于iBizModel建模体系,工作流模型是业务流程自动化的核心组成部分,它通过定义流程节点、角色、版本和时间规则,实现对业务流转的精细控制。以下将详细阐述界面工作流模型体系,包括应用场景、模型关系图例和示例DSL,内容涵盖PSWORKFLOW(系统工作流)、PSWFVERSION(流程定义版本)、PSWFWORKTIME(工作流工作时间)、PSWFROLE(工作流角色)、PSWFPROCESS(流程处理节点)等关键模型及其关联组件。
一、工作流模型体系概述
iBizModel的工作流模型体系以PSWORKFLOW为根模型,定义了业务流程的全局配置,包括流程类型、状态代码表、操作视图等。PSWFVERSION支持多版本流程定义,确保流程可迭代和回滚;PSWFWORKTIME管理工作时间规则,用于超时控制和效率优化;PSWFROLE定义参与流程的角色体系,支持自定义、数据驱动和预置角色类型;PSWFPROCESS描述流程中的处理节点,如开始、结束、交互处理等,并通过PSWFLINK连接节点,形成完整的流程拓扑。该体系通过DSL(Domain-Specific Language)实现 declarative 建模,支持复杂业务场景的图形化配置和代码生成。
二、核心模型详解
1. PSWORKFLOW(系统工作流)
PSWORKFLOW是工作流的根模型,定义流程的全局属性:
- 关键属性:
codename
(唯一标识)、name
(名称)、statecodelistid
(业务状态代码表引用)、wfstepcodelistid
(流程步骤代码表引用)、wftype
(工作流类型,如机构流程、部门流程)。 - 应用场景:适用于企业审批流程(如请假审批、采购订单流转)、项目管理任务分配、订单处理流水线等。例如,在制造业中,零件生产审批流程可使用PSWORKFLOW定义状态(草稿、审核中、完成)和步骤(提交、审核、归档)。
- 成员模型:包含PSWFVERSION(流程版本)、PSWFDE(工作流实体)、PSWFSUBWF(子流程)。
2. PSWFVERSION(流程定义版本)
PSWFVERSION支持流程的多版本管理,确保流程可迭代:
- 关键属性:
wfversion
(版本号)、wfvermode
(应用模式,如默认或流程片段)。 - 应用场景:在业务流程优化中,例如电商订单处理流程,版本1可能仅支持基础审核,版本2增加风控节点,通过PSWFVERSION实现平滑升级和回滚。
- 成员模型:嵌套PSWFPROCESS(流程处理节点)和PSWFLINK(流程连接)。
3. PSWFWORKTIME(工作流工作时间)
PSWFWORKTIME定义流程的时间规则,用于计算超时和效率:
- 关键属性:
codename
(唯一标识)、name
(名称)、userdata
(自定义数据,如工作日历)。 - 应用场景:在客户服务流程中,设置PSWFWORKTIME定义工作时间为工作日9:00-18:00,若任务超时未处理,自动转交或升级处理。
- 外部引用:被PSWFPROCESS引用,指定节点级超时规则。
4. PSWFROLE(工作流角色)
PSWFROLE定义流程参与角色,支持多种角色来源:
- 关键属性:
wfroletype
(角色类型,如用户组、系统角色、实体数据集合)、psdedsid
(数据集引用,用于动态角色)。 - 应用场景:在财务审批流程中,角色可定义为“部门经理”(通过系统角色)或“项目组成员”(通过实体数据集动态获取)。
- 外部引用:被PSWFPROCROLE(流程处理角色)引用,指定节点处理人。
5. PSWFPROCESS(流程处理节点)
PSWFPROCESS定义流程中的处理逻辑节点,支持多种类型:
- 关键属性:
wfprocesstype
(处理类型,如开始、结束、交互处理、嵌套子流程)、normalproctype
(常规处理类型,如调用实体行为)、multiinstmode
(多实例模式,如并行或串行)。 - 应用场景:在招聘流程中,交互处理节点“面试”需候选人提交反馈,而常规处理节点“背景调查”自动调用外部API。
- 成员模型:嵌套PSWFPROCROLE(处理角色)、PSWFPROCPARAM(处理参数)、PSWFPROCSUBWF(子流程)。
6. 关联模型
- PSWFLINK:连接流程节点,定义流转条件(如
wflinktype
为交互连接或超时连接)。 - PSWFLINKCOND:为连接提供条件逻辑,支持组合条件(AND/OR)和属性比较。
- PSWFPROCROLE:为交互节点指定处理角色,支持动态属性或固定角色。
三、应用场景
工作流模型体系广泛应用于企业数字化场景:
- 审批流程管理:例如,员工请假申请流程,使用PSWORKFLOW定义状态(提交、经理审批、HR备案),PSWFVERSION管理流程变更,PSWFROLE指定审批人角色,PSWFPROCESS定义交互节点“经理审批”需人工操作。
- 订单处理流水线:在电商系统中,订单流程包括“支付验证”(自动处理)、“库存检查”(嵌套子流程)和“发货通知”(交互处理),通过PSWFWORKTIME设置超时规则,避免订单滞留。
- 项目管理任务流:在敏捷开发中,任务流程使用PSWFPROCESS的并行多实例模式,同时分配任务给多个成员,并通过PSWFLINKCOND设置完成条件。
- 客户服务工单:服务工单流程集成PSWFROLE的动态角色,根据工单类型自动分配处理组,并利用PSWFVERSION的流程片段模式支持快速迭代。
四、模型关系图例
以下Mermaid图展示了工作流核心模型的关系,突出层级和引用关系:
图例说明:
- PSWORKFLOW为根模型,归属于PSMODULE(系统模块)和PSSYSWFCAT(工作流分类)。
- PSWFVERSION是PSWORKFLOW的成员,管理流程版本,并嵌套PSWFPROCESS和PSWFLINK。
- PSWFPROCESS包含处理角色、参数和子流程,并引用PSWFWORKTIME(工作时间)和PSWFROLE(角色)。
- PSWFLINK定义节点连接,并包含条件(PSWFLINKCOND)和角色(PSWFLINKROLE)逻辑。
- 箭头表示父子或引用关系,如实线箭头为成员嵌套,虚线箭头为外部引用。
五、示例DSL代码
以下是一个完整的零件生产审批流程DSL示例,基于PSWFVERSION模型,涵盖开始事件、交互处理、常规处理和结束事件。代码严格遵循iBizModelDSL规范,使用Groovy语法:
流程图解析
- 流程启动:从“开始事件”节点自动流向“审核”节点(交互处理)。
- 审核分支:
- 通过操作:如果审核人执行“通过”,流程跳转至“状态:已完成”节点(常规处理),自动更新实体状态为已完成,然后流向“结束事件”。
- 驳回操作:如果审核人执行“驳回”,流程返回“拟稿”节点(交互处理),允许拟稿人重新修改。
- 拟稿分支:
- 重新提交操作:拟稿人执行“重新提交”,流程返回“审核”节点,重新进行审核。
- 取消操作:拟稿人执行“取消”,流程跳转至“状态:已取消”节点(常规处理),自动更新实体状态为已取消,然后流向“结束事件”。
- 流程终止:所有路径最终汇聚到“结束事件”,完成流程实例。
流程DSL代码
//iBizModelDSL建模指令,目标:定义零件生产审批流程版本1
//DSL变量定义
def __PSMODULE__ = context["PSMODULE"]?:"ProdMgmt_MFG" //系统模块:产品管理(制造业)
def mod_prodmgmt_mfg = __PSMODULE__
def de_part = "ProdMgmt_MFG.PART" //实体:PART//工作流版本定义
pswfversion(validflag: 1, wfversion: 1, pswfid: mod_prodmgmt_mfg + ".part_workflow", name: "零件流程 v1") {//开始事件节点pswfprocess(leftpos: 180, codename: "START_01", name: "开始事件", width: 40, wfprocesstype: "START", id: "START_01", toppos: 300, height: 40)//交互处理节点:审核pswfprocess(userdata: "零件流程", leftpos: 460, pswfdeid: mod_prodmgmt_mfg + ".part_workflow.PART", codename: "INTERACTIVE_01", name: "审核", wfprocesstype: "INTERACTIVE", id: "INTERACTIVE_01", toppos: 280) {pswfprocrole(udfields: "wf_user_id", name: "PSWFPROCROLE", roletype: "UDACTOR", id: "PSWFPROCROLE") //角色来自数据属性}//交互处理节点:拟稿pswfprocess(userdata: "零件流程", leftpos: 460, pswfdeid: mod_prodmgmt_mfg + ".part_workflow.PART", codename: "INTERACTIVE_02", name: "拟稿", wfprocesstype: "INTERACTIVE", id: "INTERACTIVE_02", toppos: 560) {pswfprocrole(udfields: "create_man", name: "PSWFPROCROLE", roletype: "UDACTOR", id: "PSWFPROCROLE") //角色来自创建人属性}//常规处理节点:状态更新为已完成pswfprocess(leftpos: 800, pswfdeid: mod_prodmgmt_mfg + ".part_workflow.PART", wfprocesstype: "PROCESS", userdata: "零件流程", codename: "PROCESS_01", name: "状态:已完成", psdeactionid: de_part + ".Update", width: 100, id: "PROCESS_01", toppos: 280, height: 80, normalproctype: "DEACTION") {pswfprocparam(srcvalue: "2", customdstdefname: "wf_status") //参数:更新状态值为2(已完成)}//常规处理节点:状态更新为已取消pswfprocess(leftpos: 800, pswfdeid: mod_prodmgmt_mfg + ".part_workflow.PART", wfprocesstype: "PROCESS", userdata: "零件流程", codename: "PROCESS_02", name: "状态:已取消", psdeactionid: de_part + ".Update", id: "PROCESS_02", toppos: 560, normalproctype: "DEACTION") {pswfprocparam(srcvalue: "3", customdstdefname: "wf_status") //参数:更新状态值为3(已取消)}//结束事件节点pswfprocess(leftpos: 1110, codename: "END_01", name: "结束事件", width: 40, wfprocesstype: "END", id: "END_01", toppos: 300, height: 40)//流程连接定义pswflink(customcondflag: 0, pswflinkname: "ROUTE1", defaultlink: 0, dstendpoint: "left2", wflinktype: "ROUTE", ordervalue: 100, frompswfprocid: "START_01", someroleflag: 0, topswfprocid: "INTERACTIVE_01", codename: "A75750db830f274b439", srcendpoint: "right", id: "A75750db830f274b439") //开始→审核pswflink(customcondflag: 0, pswflinkname: "IAACTION", defaultlink: 0, psdeviewbaseid: de_part + ".pass_wf_dyna_action_view", wflinktype: "IAACTION", psdeformid: de_part + ".pass_wf_dyna_action_view_form", ordervalue: 100, frompswfprocid: "INTERACTIVE_01", someroleflag: 0, topswfprocid: "PROCESS_01", codename: "A6a19a6d1f8871c7f5e", srcendpoint: "right2", nextcond: "ANY", id: "A6a19a6d1f8871c7f5e", logicname: "通过") //审核→完成(通过操作)pswflink(customcondflag: 0, pswflinkname: "IAACTION2", defaultlink: 0, dstendpoint: "top1", psdeviewbaseid: de_part + ".back_wf_dyna_action_view", wflinktype: "IAACTION", psdeformid: de_part + ".back_wf_dyna_action_view_form", ordervalue: 200, frompswfprocid: "INTERACTIVE_01", someroleflag: 0, topswfprocid: "INTERACTIVE_02", codename: "Af51d6de674e7ded5b9", srcendpoint: "bottom1", nextcond: "ANY", id: "Af51d6de674e7ded5b9", logicname: "驳回") //审核→拟稿(驳回操作)pswflink(customcondflag: 0, pswflinkname: "IAACTION1", defaultlink: 0, dstendpoint: "bottom3", psdeviewbaseid: de_part + ".review_wf_dyna_action_view", wflinktype: "IAACTION", psdeformid: de_part + ".review_wf_dyna_action_view_form", ordervalue: 100, frompswfprocid: "INTERACTIVE_02", someroleflag: 0, topswfprocid: "INTERACTIVE_01", codename: "A136f3aeafbe7ed72e0", srcendpoint: "top3", nextcond: "ANY", id: "A136f3aeafbe7ed72e0", logicname: "重新提交") //拟稿→审核(重新提交)pswflink(customcondflag: 0, pswflinkname: "IAACTION3", defaultlink: 0, wflinktype: "IAACTION", ordervalue: 100, frompswfprocid: "INTERACTIVE_02", someroleflag: 0, topswfprocid: "PROCESS_02", codename: "A6a86b9b87195bf8017", srcendpoint: "right2", nextcond: "ANY", id: "A6a86b9b87195bf8017", logicname: "取消") //拟稿→取消pswflink(customcondflag: 0, pswflinkname: "ROUTE2", defaultlink: 0, wflinktype: "ROUTE", ordervalue: 100, frompswfprocid: "PROCESS_02", someroleflag: 0, topswfprocid: "END_01", codename: "Ad13d1ce6a84a5eb5f9", srcendpoint: "right2", id: "Ad13d1ce6a84a5eb5f9") //取消→结束pswflink(customcondflag: 0, pswflinkname: "ROUTE", defaultlink: 0, wflinktype: "ROUTE", ordervalue: 110, frompswfprocid: "PROCESS_01", someroleflag: 0, topswfprocid: "END_01", codename: "Ad1d7da68e9bfd8033c", srcendpoint: "right2", id: "Ad1d7da68e9bfd8033c") //完成→结束
}
DSL示例解析:
- 流程逻辑:流程从开始事件启动,经“审核”节点(交互处理),操作人可通过“通过”连接跳转至“状态:已完成”(常规处理),或通过“驳回”连接返回“拟稿”节点。拟稿人可“重新提交”或“取消”,最终流向结束事件。
- 角色绑定:交互节点角色通过
udfields
动态绑定实体属性(如wf_user_id
),实现数据驱动分配。 - 参数传递:常规处理节点使用PSWFPROCPARAM更新实体状态值,体现业务逻辑自动化。
- 视图集成:连接中引用PSDEVIEWBASE和PSDEFORM,确保界面操作一致性。
六、总结
iBizModel的工作流模型体系通过PSWORKFLOW、PSWFVERSION、PSWFWORKTIME等核心模型,提供了完整的业务流程建模能力。应用场景覆盖审批、订单、项目管理和客户服务等领域,模型关系图清晰展示了层级和引用结构,而DSL示例则体现了声明式编程的简洁性和强大功能。该体系支持高可配置性、多版本管理和动态角色分配,助力企业实现数字化转型中的流程自动化和优化。结合iBizModeling Studio工具链,用户可直观设计、验证和部署工作流,提升业务效率与一致性。