`
huqi
  • 浏览: 93126 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

工作流引擎设计之子流程功能实现

阅读更多

一个成熟的工作流管理系统,其引擎对于子流程功能的支持必然是不可少的,这好比是一门编程语言支持函数那么普遍一样。在当前Workflow, BPM, EAI产品的建模工具中,对于子流程/子过程的应用如家常便饭一样,无处不在——是的,随着流程建模工具的日益强大、企业业务过程的日趋复杂及集成要求的不断增长,把相似的“过程”封装成一个个可调用的过程“函数”已经是一个不可缺少的功能了。

下面的内容,主要就以在工作流引擎系统中子流程功能的设计展开。注意:这里父流程指的是主动调用的流程;子流程指的是被动被调用的流程;由XPDL作为建模示范。

建模设计——父流程中描述子流程的XPDL片段及解释

1、子流程(SubFlow)作为父流程中的一种特殊的活动出现。

2、子流程活动的执行(Implementation)节点描述了子流程的同步异步策略以及父流程向子流程提供的实际输入参数(实参)。

实参匹配规则:

    如果实参与形参(子流程定义的参数)的数量和类型完全匹配,则不应用特殊规则

    如果实参数量大于形参数量,则多出的实参按照前后顺序被忽略

    如果实参数量小于形参数量,则引擎抛出“流程设计异常”,并明确提示用户

    如果实参和与之对应的形参类型不匹配,则引擎“尝试”进行智能类型转换,如果无法转换(如String型“ok”转换为Boolean型),则引擎抛出“工作流转型异常”,并明确提示用户

    子流程活动扩展属性(ExtendedAttributes)参见普通人工活动的扩展属性定义。

XPDL:

<WorkflowProcesses>
<WorkflowProcess AccessLevel="PUBLIC" Id="1028100100000000053" Name="测试流程(主流程)">
……
<Activities>
……
<Activity Id="SubFlow1" Name="子流程活动">
<Implementation>
<SubFlow Id="1028100100000000042" Execution="SYNCHR">
<ActualParameters>
                          
<ActualParameter>rData</ActualParameter> 
                          
<ActualParameter>mainXParam</ActualParameter> 
                      
</ActualParameters>
                  
</SubFlow>
              
</Implementation>
              
<Description /> 
              
<Performer /> 
<TransitionRestrictions>
    ……
      
</TransitionRestrictions>
<ExtendedAttributes>
                  
<ExtendedAttribute Name="AssignStrategic" Value="All" /> 
                  
<ExtendedAttribute Name="ExecuteNode" Value="" /> 
                  
<ExtendedAttribute Name="Limit" Value="" /> 
                  
<ExtendedAttribute Name="OvertimeHandlerType" Value="D" /> 
                  
<ExtendedAttribute Name="OvertimeHandlerTool" Value="email" /> 
                  
<ExtendedAttribute Name="OvertimeHandlerRef" Value="" /> 
                  
<ExtendedAttribute Name="CanRollback" Value="false" /> 
                  
<ExtendedAttribute Name="CanWithdraw" Value="" /> 
                  
<ExtendedAttribute Name="UnrestrictedRouting" Value="false" /> 
                  
<ExtendedAttribute Name="ExecuteUnit" Value="W" /> 
                  
<ExtendedAttribute Name="CommitStrategic" Value="Anyone" /> 
                  
<ExtendedAttribute Name="ExecuteStrategic" Value="Share" /> 
                  
<ExtendedAttribute Name="StartActivityAction" Value="" /> 
                  
<ExtendedAttribute Name="EndActivityAction" Value="" /> 
                  
<ExtendedAttribute Name="CommitStrategicPercentNumber" Value="0" /> 
              
</ExtendedAttributes>
          
</Activity>
</Activities>

建模设计——子流程中描述子流程的XPDL片段及解释

1、如果一个流程作为子流程,那么它可以定义自己的输入输出参数(形参)。

2、流程的参数节点(FormalParameters)可以包含多个形参(FormalParameter)。

3、形参的模式(Model)有:

    IN,输入模式,形参接受实参的输入而不将值返回实参,即可以理解为实参只读

    OUT,输出模式,子流程返回父流程时,实参获取形参的值,将子流程的数据输出到父流程;注意:如果父流程中定义子流程为异步执行,此模式仍然具有意义

    INOUT,输入输出模式,同时具有IN和OUT模式的特性

4、形参的类型定义同工作流相关数据。

XPDL:

<WorkflowProcesses>
<WorkflowProcess AccessLevel="PUBLIC" Id="1028100100000000042" Name="测试流程(子流程)">
……
<FormalParameters>
<FormalParameter Id="procParam1" Index="2" Model="INOUT" Name="流程字符形参">
                  
<Description /> 
                  
<Length /> 
<DataType>
                      
<BasicType Type="STRING" /> 
</DataType>
                  
<ExtendedAttributes /> 
</FormalParameter>
<FormalParameter Id="procParam2" Index="3" Model="IN" Name="流程布尔形参">
                  
<Description /> 
                  
<Length /> 
<DataType>
                      
<BasicType Type="BOOLEAN" /> 
                  
</DataType>
                  
<ExtendedAttributes /> 
              
</FormalParameter>
          
</FormalParameters>

主子流程多版本并存问题的处理策略

流程定义被修改后会在内部产生新的版本,也就是说在引擎外每个流程定义都有唯一ID(对每个流程定义唯一,简称外部ID);而对引擎来说任何一个流程定义,都可能有未知数量的不同版本,每个版本的ID(对每个流程定义可能存在多个,简称内部ID)肯定是不同的。

本设计方案对此问题的处理策略:

1、父流程定义时引用子流程的外部ID。

2、父流程在实例化子流程时,利用子流程的外部ID获取子流程的当前版本ID(即最新版本的内部ID),实例化之,完成子流程的启动。

3、子流程的变更必然会影响新发起的父流程和已经发起但并没有启动子流程的父流程,反之,子流程的变更将无法影响到子流程已经启动的父流程。

4、子流程的形参变更可能会导致父流程运行错误(形参数量不匹配、形参类型不匹配等),所以,子流程形参变更后,需要检查父流程的定义。

5、以上两点,需要流程设计者注意——即在建模工具中提示流程设计者。

子流程活动的“退回”和“取回”策略

由于子流程活动的“退回”和“取回”操作涉及面大、较为复杂,本设计方案不讨论——即不支持。

子流程的流程发起者定义

如果子流程中出现参与者为流程发起者的情况,则此参与者为父流程的流程发起者,即子流程的流程发起者同父流程的流程发起者。

同步子流程的定义

父流程实例启动子流程活动后,同步等待子流程活动结束,接收子流程输出参数,然后再启动下一步活动。

同步子流程

异步子流程的定义

父流程实例启动子流程活动后,不等待子流程活动运行结束,立刻启动、运行下一步活动。

注意:如果父流程尚未结束,子流程输出参数仍然有效,子流程将会在某个不确定的时间(子流程结束)将参数值返回父流程。提示:利用此特性,可以完成一些异步条件等待的应用场景。

异步子流程

父流程的列表展现处理

针对流程管理节点及流程监控节点:

父流程在列表显示时,需要利用列明确标识含有子流程,同时利用隐藏域记录子流程ID。

增加功能“显示子流程”:选中父流程,展现其子流程列表,子流程列表具有同普通流程管理节点的功能操作。

子流程的列表展现处理

因为子流程可能被多个父流程嵌套引用,所以同普通流程列表的展现处理。

针对流程管理节点及流程监控节点无特殊处理。

在父流程监控中对子流程的处理

针对流程实例监控列表无特殊处理。

针对父流程的监视图:

如果子流程已经启动的话,在监视数据准备时将子流程实例ID装入图形的子流程节点;选中图形的子流程(已经启动)节点,可以打开某种模式窗体,展现此子流程实例的监控操作界面(为新界面或利用已有列表),在此界面可以对子流程实例进行“监”和“控”的操作。

即对子流程的监控,均在父流程的模式窗体中执行。

在子流程监控中对父流程的处理

针对流程实例监控列表。

需要利用列明确标识父流程实例的名称(可以隐藏展现其ID)。

针对子流程的监视图:

在监视数据准备时将父流程实例ID装入图形页面;增加功能“监控父流程”,可以打开某种模式窗体,展现此父流程实例的监控操作界面(为新界面或利用已有列表),在此界面可以对父流程实例进行“监”和“控”的操作。

即对父流程的监控,均在子流程的模式窗体中执行。

实例的清除规则

清除父流程实例时需要清除其子流程的实例。

清除子流程实例时需要询问是否清除其父流程的实例,告知可能造成的影响。

父子流程的完成和终止规则

父流程实例终止,其同步/异步子流程实例也会同时终止。

父流程实例完成,其同步子流程实例如何操作?思考一下:-)这种情况目前不会出现。

父流程实例完成,其异步子流程实例不受影响。

子流程实例执行终止操作:

    同步子流程,父流程实例也应同时终止;

    异步子流程,需要给与警告提示:如果子流程存在OUT/INOUT型参数……,父流程实例不受影响,继续进行;

子流程实例执行完成操作:

    同步子流程,完成之,然后返回父流程实例,父流程实例继续进行;

    异步子流程,完成之,父流程实例不受影响,继续进行(OUT/INOUT型参数需要被带回)。

 

——本文是在实现工作流引擎系统时的一些设计和指导原则,供大家参考。



分享到:
评论
2 楼 ccflow 2011-08-15  
你可以按以上方式联系我。
1 楼 ccflow 2011-08-15  
你的文章写的不错,不知道,很有功底 楼主一起与我们发展开源的ccflow.

http://ccflow.org

相关推荐

    工作流引擎数据库表设计.docx

    概述 基于打造一个灵活、高效、轻量级的工作流引擎,暂时不考虑功能的完备和复杂,只是实现其中必不可少的功能和条件。主要考虑以下三个方面的内容: 流程定义:工作流中的流程极其相关活动的定义和模型数据搭建 ...

    基于ASP.NET的基于工作流引擎的系统设计与实现毕业设计(源代码+项目报告)

    论文主要讲述了工作流引擎的基本功能及设计方法,介绍工作流引擎的基本原理,具体分析了工作流引擎所包含的内容,详细介绍了相关的信息模型和控制模型。系统采用关系结构的理念来设计工作流引擎,给出了用Microsoft ...

    [计算机毕设]基于asp.net的基于工作流引擎的系统设计与实现(源代码+项目报告).zip

    论文主要讲述了工作流引擎的基本功能及设计方法,介绍工作流引擎的基本原理,具体分析了工作流引擎所包含的内容,详细介绍了相关的信息模型和控制模型。系统采用关系结构的理念来设计工作流引擎,给出了用Microsoft ...

    计算机软件毕业设计工作流引擎的系统框架设计开发-计算机毕业设计源码-计算机毕业设计源代码.rar

    《基于工作流引擎的系统框架设计开发——工作流引擎子系统》是采用Visual C#以及Microsoft SQL Server2000来开发的。系统主要由四个模块组成,他们分别是:状态图管理模块、任务列表模块、任务指派模块、任务提交...

    基于SHARK工作流引擎的企业办公自动化系统研究与实现

    本文对shark工作流引擎进行了分析介绍,通过对企业办公自动化系统的需求分析.给出了系统的功能模块 结构,详细设计了基于web的工作流管理系统。重点阐述了两个关键系统模块一一公文管理子系统和流程自定义模块的实 ...

    基于jbpm与activiti的工作流平台技术架构介绍

    【图一】工作流引擎中心 1.BPMX3的特点 1.是一个开放式、轻量级的开发平台 2.BPMX3多层系统架构 3.基于模板代码生成 4.丰富的报表展示 5.跨数据库的数据访问支持 6.简易的前端使用 7.参照最新的BPMN2标准设计 8....

    基于工作流的电装行业MES关键技术研究 (2012年)

    电子装配行业的特点要求电子装配行业MES系统实现实时...并基于J2EE架构和EJB组件技术对工作流引擎进行设计实现。基于工作流的电子装配行业MES在某企业PCB装配车间应用表明,车间的生产效率和管理水平得到了显著提高。

    易协工作流程管理软件

    7、工作流引擎 支持串行、分支、并行等运转模式,支持自由流,支持同步、异步活动。 8、表单自定义 可视化界面设计并具有数据库访问功能。权限粒度细到每个数据项。支持多种控件,支持运行时输入验证以及运行时...

    ASP.NET3.5典型模块开发源代码

    6.3.2 在线编辑的功能实现 73 6.3.3 在线编辑的运行效果 74 6.4 多功能在线编辑器的介绍 74 6.4.1 FreeTextBox编辑器 74 6.4.2 FCKEditor在线编辑器 76 6.5 小结 79 第7章 在线支付模块 80 7.1 在线...

    心理咨询网站设计方案(1).doc

    应用支撑平台及功能模块包括内容管理平台、工作流引擎、统一用户认证系统 、安全与防火墙以及服务构件平台。内容管理平台可以实现网站的建设、信息的发布; 工作流平台可以作为各种业务系统的业务流程引擎使用,集中...

    软件生产平台

    业务表单运行器是业务表单设计器设计出的表单在系统中进行操作的时候运行器 集中处理表单上定义的控件与业务数据之间的关系以及表单域数据的验证功能 11、业务流程运行器 业务流程运行器就是一个工作流...

    SpringBoot项目城镇保障性住房管理系统.zip

    2. **审批流程自动化**:采用工作流引擎,自动引导审批流程,包括初审、复审及最终批准等环节。 3. **房源信息管理**:记录并更新保障性住房的详细信息,包括位置、户型、面积和维护状况等。 4. **租赁合同电子化*...

    毕业设计选题系统V2.4 (ASP.Net源码)

    采用本系统不但能大大减少学校和教师的工作量,还能提高学生的毕业设计热情,因为本系统实现了双向选择功能,即学生可以选自己喜欢的论题,而教师也可以选择做论题的学生。 本系统定义了以下四种角色:管理员、定题...

    农产品电子商务系统设计研究.doc

    SLServer2012是一个功能齐 全的数据库平台,不仅可以有效地执行大规模联机事务处理,而且可以完成数据仓库和电 子商务应用等许多具有挑战性的工作.数据挖掘(dataming)是从大量的、不完全的、有 噪声的、模糊的、...

    activiti实战

    实战篇(5~14章)系统讲解了Activiti的用法、技巧和最佳实践,包含流程定义、流程实例、任务、子流程、多实例、事件以及监听器等;高级篇(15~21)通过集成WebService、规则引擎、JPA、ESB等各种服务和中间件来阐述...

    绿叶OA协同办公软件

    1、工作流程审批: 流程审批系统采用可视化、组件化、向导式、结点式流程配置引擎,支持电子签名、手机提醒,方便企业快速扩展新的业务功能和模块,适应业务的灵活多样化需求。满足大中型集团企业内部流程的建立、...

    BPS开发指南.chm

    04.03.07.04 设置子流程活动属性 04.03.07.04.01 设置基本信息 04.03.07.04.02 设置子流程参数 04.03.07.04.03 设置触发事件 04.03.07.04.04 设置多子流程策略 04.03.07.04.05 设置回退 04.03.07.04.06 设置...

    PHPOA协同OA办公软件开源版源码 PHPOACollaborationOA.rar

    7、智能流程引擎:流程模型支持BPMN2.0国际标准,提供傻瓜化流程设计,快速对复杂业务流程建模,提供会签、回退、子流程等特色化功能。同时提供开发接口,实现异构系统的调用和对接。 8、智能表单引擎:业内唯一一...

    asp.net知识库

    存储过程中实现类似split功能(charindex) 通过查询系统表得到纵向的表结构 将数据库表中的数据生成Insert脚本的存储过程!!! 2分法-通用存储过程分页(top max模式)版本(性能相对之前的not in版本极大提高) 分页存储...

    Activiti实战

    实战篇(5~14章)系统讲解了Activiti的用法、技巧和最佳实践,包含流程定义、流程实例、任务、子流程、多实例、事件以及监听器等;高级篇(15~21)通过集成WebService、规则引擎、JPA、ESB等各种服务和中间件来阐述...

Global site tag (gtag.js) - Google Analytics