`
huqi
  • 浏览: 96974 次
  • 性别: 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

相关推荐

    工作流引擎的设计与实现

    工作流引擎的设计与实现是IT领域中的一个重要主题,尤其在企业级应用中,工作流引擎作为协调业务流程、提升工作效率的关键组件,其设计与实现显得尤为重要。本文将深入探讨工作流引擎的核心概念、EOS工作流引擎的...

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

    综上所述,工作流引擎数据库表设计旨在支持流程的动态定义、高效执行和有效监控,以实现企业内部业务流程的自动化和智能化。通过合理的设计,可以确保工作流引擎在处理复杂流程时保持灵活性、稳定性和可扩展性。

    介绍一款工作流引擎设计思路

    工作流引擎设计是一个复杂而关键的任务,涉及到许多方面的考量。工作流引擎的目的是为了帮助企业高效地管理和自动化工作流程,因此其设计必须以创造价值为核心,而非单纯追求技术特性。WfMC虽然定义了标准,但并没有...

    easyui实现的Activiti工作流引擎web版流程设计器

    标题中的“easyui实现的Activiti工作流引擎web版流程设计器”揭示了本文将要讨论的重点,即如何利用EasyUI框架来构建一个基于Web的流程设计工具,该工具是基于Activiti工作流引擎的。EasyUI是一个轻量级的JavaScript...

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

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

    JAVA工作流引擎的开发和设计.pdf

    文档中详细介绍了Java工作流引擎的总体架构,强调了流程中央控制器的重要性,该控制器是引擎核心,负责核心路由功能和子系统功能限定,同时存储和处理数据。引擎接口允许流程的重新定义,便于整体维护和管理。一个...

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

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

    Net三款工作流引擎比较.docx

    工作流引擎通常包括流程设计、执行、监控和管理等功能,帮助组织提高效率,确保流程的一致性和合规性。 【Windows Workflow Foundation (WWF)】 WWF是微软提供的工作流框架,它集成在.NET Framework中,为开发者...

    snaker实现的工作流

    Snaker工作流是一款基于Java开发的轻量级工作流引擎,专为简化企业业务流程自动化设计。它提供了灵活的工作流模型定义、强大的任务处理机制以及易于集成的API,使得开发者可以快速地在应用中实现复杂的工作流程。在...

    用JAVA实现的工作流

    总的来说,用Java实现工作流涉及到多个方面,包括理解业务需求、选择合适的工作流引擎、设计和实现流程模型、处理服务集成、权限控制以及监控与调试。熟练掌握这些知识点,能帮助开发者构建出高效、稳定的工作流系统...

    工作流中的回退业务实现

    工作流引擎通常提供统一的接口,由客户自定义代码来匹配处理回退路径,确保业务数据的一致性。 实现回退业务的方式有两种主要策略:一种是通过在流程定义阶段显式绘制回退线,虽然这可能导致流程图变得复杂,但清晰...

    工作流引擎技术白皮书.doc

    工作流引擎是OA系统中的关键技术,负责流程的驱动和控制,而OA系统则是一个更综合的平台,包含工作流在内的多项功能,如文档管理、协作工具、报表分析等。 1.2 工作流引擎 1.2.1 工作流引擎简介 工作流引擎不仅是...

    NetBpm 源码,开源的工作流引擎

    NetBpm是一个专为.NET Framework设计的开源工作流引擎,它提供了丰富的功能来支持企业的流程管理需求。 首先,NetBpm的核心概念包括工作流模型、任务管理和流程实例。工作流模型是流程的蓝图,定义了各个步骤、参与...

    jbpm教程(工作流引擎)

    JBPM是一个开源的工作流引擎,完全由Java语言开发,其持久层使用Hibernate实现,因此理论上,只要数据库被Hibernate所支持,JBPM就能支持。JBPM的灵活性高,可以无缝集成到任何Java应用服务器中。它不仅适用于企业级...

    基于Web的工作流系统的设计与实现

    基于Web的环境下,工作流引擎的设计需考虑以下关键要素: - **灵活性**:能够适应不断变化的业务需求,快速调整工作流模型。 - **可扩展性**:支持模块化设计,方便添加新的功能和服务。 - **安全性**:确保数据...

    驰骋工作流引擎CCBPM+CCFLOW概要介绍

    驰骋工作流引擎CCBPM是一个灵活且可扩展的业务流程管理系统,它允许用户通过图形化界面设计复杂的业务流程。CCBPM的核心功能包括: 1. **流程建模**:支持BPMN(Business Process Modeling Notation)标准,提供...

Global site tag (gtag.js) - Google Analytics