CN1928904A - 一种具有丰富业务语义的工作流模型结构 - Google Patents
一种具有丰富业务语义的工作流模型结构 Download PDFInfo
- Publication number
- CN1928904A CN1928904A CNA2005101214901A CN200510121490A CN1928904A CN 1928904 A CN1928904 A CN 1928904A CN A2005101214901 A CNA2005101214901 A CN A2005101214901A CN 200510121490 A CN200510121490 A CN 200510121490A CN 1928904 A CN1928904 A CN 1928904A
- Authority
- CN
- China
- Prior art keywords
- node
- limit
- type
- value
- variable
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Landscapes
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
Abstract
本发明公开了一种具有丰富业务语义的工作流模型结构,其中:(1)支持完整的业务逻辑描述,提供丰富的流程结点类型;(2)在模型结点内部按执行过程进行划分成前、中、后三个阶段,可在不同的阶段中设置前置动作序列、任务动作序列和后置动作序列,这些动作可以根据业务条件来决定是否要执行;(3)不同类型的模型结点的输入边之间和输出边之间具有不同的逻辑语义,可以互相组合成具有复杂结构的业务流程;(4)该模型中不但可以定义简单类型的流程变量还可以定义具有复杂结构的复杂类型的流程变量;(5)流程中可以定义整个模型中共享的全局变量,也可以定义每个步骤中的局部变量;本发明具有描述能力强、容易使用和可扩展的特点。
Description
技术领域
本发明主要涉及一种具有丰富业务语义的工作流模型结构,尤其适用于金融、政务、ERP等系统软件中的业务流程形式化描述。
背景技术
虽然WfMC为工作流管理系统制定了很多标准,其中也包括工作流描述语言的标准XPDL,但目前工作流建模技术还没有成熟,工作流管理系统的产品仍是百家争鸣,各产品具有自己内部的标准,工作流建模方法也是多种多样。为了能够用计算机来实现工作流,工作流模型应该具有形式化和可执行的特点,目前大部分研究倾向于使用基于Petri网及其变种的方法,这是因为Petri网模型具有坚实的理论基础、精确的语义、图形化建模方式及丰富的分析手段。
目前国内已有许多工作流管理系统产品了,不同的工作流产品所走的技术路线也不一样。目前国内已有的工作流管理系统,就工作流模型而言,其主要弊端在于描述能力不强,主要表现在以下几个方面:
(1)只实现部分流程逻辑。
(2)有些流程建模语言不支持子流程,有些即使支持了子流程功能,但是是定死的关联,没有参数化子流程关联,不支持批量子流程等缺点。
(3)只支持简单的数据类型,不支持复杂结构的数据类型。
(4)流程路由条件中只能使用简单的数据,无法感知复杂结构中的数据。
(5)不支持活动步骤中的前置、后置动作的设置。
(6)不支持事件机制和计时机制的建模,而这些机制在金融领域中是很常见的。
发明内容
本发明所要解决的技术问题在于:提供一种支持完整的业务逻辑描述、具有丰富业务语义的工作流模型结构。
本发明公开了一种具有丰富业务语义的工作流模型结构,其中:
(1)结点类型有:开始结点、结束结点、并行分子结点、并行会聚结点、多重选择分支结点、多重选择会聚结点、空结点、人工任务结点、自动任务结点、子流程结点、计时结点和事件监听结点;
(2)连接结点的路由边是有向边,在边上可以设置业务条件,在流程执行期间,只有当业务条件满足的时候才会选择该路由边,不同类型的模型结点的输入边之间和输出边之间具有不同的逻辑语义,可以互相组合成具有复杂结构的业务流程;
(3)在任何一种模型结点内部都可以定义业务语义,按结点的执行过程进行划分成前、中、后三个阶段,可以在不同的阶段中设置前置动作序列、任务动作序列和后置动作序列,这些动作可以根据业务条件来决定是否要执行。
(4)工作流模型和结点上可以定义0..N个超时策略,超时策略定义了流程的预估执行周期,以及在截止时间到达时或到达之前的某些时间点所要执行的动作。
(5)在工作流模型中可以定义在流程中各个结点所共享的全局变量,也可以定义每个步骤中的局部变量,用于结点之间交换数据以及流程内部和外部之间交换数据,既支持简单类型的流程变量,也支持具有结构的复杂类型的流程变量;(i)支持的简单类型有STRING、INTEGER、LONG、FLOAT、DOUBLE、BIGDECIMAL、DATETIME、BOOLEAN、CHAR和CLOB,统称为简单(SIMPLE)类型(ii)支持的具有结构的复杂类型有记录(RECORD)类型、数组(LIST)类型、映射表(MAP)类型和对象(OBJECT)类型;
(6)在表达式运算中可以组合使用下标操作符“[]”和成员变量操作符“.”来引用具有复杂结构流程变量中的值。
其中计时结点包括:
(1)计时模式定义:同步计时和异步计时;
(2)计时器定义,包含以下几个方面:
①计时总长度,描述格式遵循W3C XML Schema的duration规范;
②周期性触发的类型包括:无循环、有时间限制的循环、有次数限制的循环和无限循环;
③周期性计时的间隔时间,描述格式遵循W3C XML Schema的duration规范;
④循环的总次数,如果既有次数限制又有计时总长度的限制,那么以哪个限制先到达为准。
该事件监听结点包括1..N个事件匹配模板的定义,表示可以监听一种或多种事件,每个事件匹配模板中定义了事件的标题和标识事件的关键字,工作流系统接收到事件后,把事件头和事件匹配模板进行匹配,如果满足以下三个条件就正式接收事件:(i)事件标题一致(ii)具有相同的事件关键字(iii)每一个事件关键字的值相同。
该子程序结点定义三种子流程调用模式,分别是单模板单实例、单模板多实例和多模板多实例。
该单模板单实例调用模式定义为(i)用包路径ID、流程模板ID、流程模板版本号来定义被调用的流程模板;(ii)调用映射,定义了把父流程变量值传递给子流程的方法;(iii)返回映射,定义了把子流程数据传递给父流程的方法;
该单模板单实例调用模式通过引用流程变量的参数化方式来动态定义,使用‘$’或其它特殊字符作为前缀;
该单模板多实例调用模式,其中定义调用映射:调用子流程采用基于容器类型变量进行循环的方式,容器变量类型包括数组类型和映射表类型,在定义调用子流程的数据映射方式时,要指定一个容器类型的流程变量作为循环控制的依据,容器中的元素个数或条目数作为循环次数,同时还要定义一个用于存放容器元素指针的临时变量,对于数组中元素的指针是0..N之间的数值,N是元素个数减一,对于映射表中元素的指针是条目的键值,该临时变量用于调用数据映射的表达式中,另外定义一个子流程中用于存放容器元素指针的变量,用于标识不同的子流程;定义返回映射:子流程返回父流程的返回映射中要定义一个父流程中的容器类型变量作为接收子流程返回值的容器,在容器中的存放位置由子流程中标识子流程的变量值定义,该变量和调用映射中定义的接收容器元素指针的变量相同,另外还要定义一个临时变量用于接收子流程中标识子流程的变量值,该临时变量用于返回数据映射的表达式中;该多模板多实例调用模式,定义被调用的多个流程模板放在一个数据类型的容器变量中,每个元素是映射表类型的数据,映射表中的键值是″PackageId″、″TempiateId″、″MainVersion″和″SubVersion″,数据类型的容器作为循环控制的依据。
所述的路由边上定义基于流程变量集的条件表达式,如果没有定义条件表达式,那么认为是恒真。
对于记录类型(RECORD)的值描述,包含了0..N个字段的描述,每个字段描述有两个属性,分别定义了字段的名字和字段的类型,字段的类型可以是任何所支持的流程变量类型,字段的值描述又递归使用RECORD、LIST、MAP和SIMPLE的值描述。
对于数组类型(LIST)的值描述,包含了0..N个数组元素的描述,每个数组元素有一个属性,定义了数组元素的类型,数组元素的类型可以是任何所支持的流程变量类型,其值描述又递归使用RECORD、LIST、MAP和SIMPLE的值描述。
对于映射表类型(MAP)的值描述,包含了0..N个条目,每个条目是一个“键-值”对,每个条目有三个属性,分别定义了键的名字、键的类型和值的数据类型,值的类型可以是任何所支持的流程变量类型,其值描述又递归使用RECORD、LIST、MAP和SIMPLE的值描述。
对于简单类型(SIMPLE)的值描述,直接使用其字符串描述格式,其中日期类型(DATATIME)的字符串描述格式是“年-月-日时:分:秒”。
所述的数据映射定义的基本内涵是“From表达式→To表达式”,“From表达式”是基于源流程变量集的表达式,“TO表达式”是基于目标流程变量集的表达式。
所谓一个表达式基于一个变量集,就是表达式中所用到的所用变量都在该变量集中定义。
所述的子流程结点的调用数据映射,源流程变量集是父流程的变量集,目标流程的变量集是子流程的变量集。
所述的子流程结点的返回数据映射,源流程变量集是子流程的变量集,目标流程的变量集是父流程的变量集。
本发明涉及一种具有丰富业务语义的工作流模型结构,是工作流管理系统的灵魂,工作流建模工具、工作流引擎等软件都是围绕工作流模型结构展开而设计的。以工作流模型结构的XML Schema为核心,采用Castor生成工作流模型XML的解析代码,把解析出来的工作流模型数据发布到工作流引擎的数据库中供工作流引擎调度使用。
基于本发明的工作流建模工具可以:
1、支持功能强大的条件表达式,可以感知对象类型的流程变量中的数据;
2、提供丰富的流程逻辑控制元素,支持业务流程中的各种复杂的逻辑;
3、支持多级父子流程和批量子流程,包括同步和异步两种模式;
4、支持事件机制;
5、支持同步和异步计时机制;
6、支持用户自定义的超时控制策略;
7、支持外部系统整合定义;
8、支持基于业务数据的路由条件;
9、支持丰富的流程变量类型用于传递业务数据;
10、工具流程模板的信息自动生成流程设计文档;
11、直接用于需求分析,有利于理清业务流程。
基于本发明实现的工作流引擎可具有以下基本特点:
支持动态会签功能:后面结点的执行人由前面的结点指定
支持任务驳回功能:驳回到任何一个已经处理过的结点
支持任务收回功能:前面执行过的人可以把做过的任务收回
支持多个申请入口的流程:intelliFlow支持把任务合并成“宏任务”,也可以把“宏任务”再拆分开
支持结点的跳过和默认通过:根据业务条件,配合分派策略的SKIP语句和ACQUIESCENT_PASS语句
支持以插件的方式提供各种不同的消息发送机制:Email、短信等
支持任务代理机制:配合组织架构中的代理设置
支持任务传阅:使用异步子流程实现
支持任务推送:引擎以推送方式或者用户自己以拉的方式获得新任务(也称为待办事宜)
支持各种流程逻辑以及它们的各种组合:串行、并行、选择、循环、同步点、XOR、OR、AND等
支持工作历:流程中的时间计算考虑了节假日、周末、工作时间等因素,不同的组织单元可以设置不同的工作历
提供灵活的业务异常处理机制:引擎自动截获应用Adapter和引擎内部的异常,例如找不到执行者等。
附图说明
图1是WfPackage元素的Schema结构图;
图2是Templates元素的Schema结构图;
图3是Template元素的Schema结构图;
图4是OvertimePolicies元素的Schema结构图;
图5是Variables元素的Schema结构图;
图6是Value元素的Schema结构图;
图7是Record元素的Schema结构图;
图8是ListData元素的Schema结构图;
图9是MapData元素的Schema结构图;
图10是ObjectData元素的Schema结构图;
图11是Nodes元素的Schema结构图;
图12是PreActions元素的Schema结构图;
图13是TaskActions元素的Schema结构图;
图14是PostAction元素的Schema结构图;
图15是AssignTaskAction元素的Schema结构图;
图16是CallBusinessAction元素的Schema结构图;
图17是SendMessageAction元素的Schema结构图;
图18是JavaSnippetAction元素的Schema结构图;
图19是StartNode元素的Schema结构图;
图20是TaskNode元素的Schema结构图;
图21是JoinNode元素的Schema结构图;
图22是SplitNode元素的Schema结构图;
图23是EventNode元素的Schema结构图;
图24是TimerNode元素的Schema结构图;
图25是SubflowNode元素的Schema结构图;
图26是SubflowDefinition元素的Schema结构图;
图27是OneTemplateOneInstance元素的Schema结构图;
图28是CalledTemplate元素的Schema结构图;
图29是CallMappings元素的Schema结构图;
图30是ReturnMappings元素的Schema结构图;
图31是OneTemplateMultiInstanc元素的Schema结构图;
图32是MultiCallMappings元素的Schema结构图;
图33是MultiReturnMappings元素的Schema结构图;
图34是MultiTemplateMultiInstance元素的Schema结构图;
图35是TemplateContainer元素的Schema结构图;
图36是NopNode元素的Schema结构图;
图37是DoneNode元素的Schema结构图;
图38是Routes元素的Schema结构图;
图39是TemplateGraphics元素的Schema结构图。
具体实施方式
本发明提供了完整的流程模型结点类型,用于各种复杂的业务流程模式建模和业务活动建模,其中用于流程模式建模的结点类型有:开始结点StartNode、结束结点DoneNode、并行分子结点AndSplitNode、并行会聚结点AndJoinNode、多重选择分支结点OrSplitNode、多重选择会聚结点OrJoinNode、子流程结点SubflowNode和空结点NopNode,用于业务活动建模的结点类型有:人工任务结点ManualTaskNode、自动任务结点AutoTaskNode、计时结点TimerNode和事件监听结点EventReceiverNode。
其中计时结点TimerNode定义:
(3)计时模式定义:同步计时和异步计时;
(4)计时器定义,包含以下几个方面:
计时总长度,描述格式遵循W3C XML Schema的duration规范;
周期性触发的类型包括:无循环、有时间限制的循环、有次数限制的循环和无限循环;
周期性计时的间隔时间,描述格式遵循W3C XML Schema的duration规范;
循环的总次数,如果既有次数限制又有计时总长度的限制,那么以哪个限制先到达为准。
事件监听结点EventReceiverNode定义:包括1..N个事件匹配模板的定义,表示可以监听一种或多种事件,每个事件匹配模板中定义了事件的标题和标识事件的关键字,工作流系统接收到事件后,把事件头和事件匹配模板进行匹配,如果满足以下三个条件就正式接收事件:(i)事件标题一致(ii)具有相同的事件关键字(iii)每一个事件关键字的值相同。
子流程结点SubflowNode定义:包括三种子流程调用模式:单模板单实例、单模板多实例和多模板多实例,其中单模板单实例调用模式:(i)用包路径ID、流程模板ID、流程模板版本号来定义被调用的流程模板,或者通过引用流程变量的参数化方式来动态定义,使用‘$’或其它特殊字符作为前缀,例如“$packageId”,其中packageId是流程变量名;(ii)调用映射,定义了把父流程变量值传递给子流程的方法(iii)返回映射,定义了把子流程数据传递给父流程的方法。
单模板多实例调用模式:(i)用包路径ID、流程模板ID、流模板版本号来定义被调用的流程模板,或者通过引用流程变量的参数化方式来动态定义,使用‘$’或其它特殊字符作为前缀,(ii)调用子流程采用基于容器类型变量进行循环的方式,容器变量类型包括数组类型(LIST)和映射表类型(MAP),在定义调用子流程的数据映射方式时,要指定一个容器类型的流程变量作为循环控制的依据,容器中的元素个数或条目数作为循环次数,同时还要定义一个用于存放容器元素指针的临时变量,对于数组中元素的指针是0..N之间的数值,N是元素个数减一,对于映射表中元素的指针是条目的键值,该临时变量用于调用数据映射的表达式中。另外,还要定义一个子流程中用于存放容器元素指针的变量,用于标识不同的子流程(iii)子流程返回父流程的返回映射中要定义一个父流程中的容器类型变量作为接收子流程返回值的容器,在容器中的存放位置由子流程中标识子流程的变量值定义,该变量和调用映射中定义的接收容器元素指针的变量相同,另外还要定义一个临时变量用于接收子流程中标识子流程的变量值,该临时变量用于返回数据映射的表达式中。
多模板多实例调用模式:(i)被调用的多个流程模板放在一个LIST类型的容器变量中,每个元素是MAP类型的数据,MAP中的键值是″PackageId″、″TemplateId″、″MainVersion″和″SubVersion″,LIST类型的容器作为循环控制的依据(ii)多重调用数据映射的特征和多重返回数据映射的特征与单模板多实例调用模式的特征相同。
所述的数据映射指的是“From表达式→To表达式”,“From表达式”是基于源流程变量集的表达式,“TO表达式”是基于目标流程变量集的表达式。所谓一个表达式基于一个变量集,就是表达式中所用到的所用变量都在该变量集中定义。对于子流程结点的调用数据映射,源流程变量集是父流程的变量集,目标流程的变量集是子流程的变量集。对于子流程结点的返回数据映射,源流程变量集是子流程的变量集,目标流程的变量集是父流程的变量集。
连接结点的路由边是有向边,在边上可以设置业务条件,在流程执行期间,只有当业务条件满足的时候才会选择该路由边。路由边上定义基于流程变量集的条件表达式,如果没有定义条件表达式,那么认为是恒真。
不同类型的结点的输入边之间和输出边之间具有不同的逻辑语义,入边之间的XOR逻辑语义表示任何一条边到达都会立即触发该结点开始执行,出边之间的XOR逻辑语义表示结点执行完成的时候只能有一条出边满足条件,入边之间的AND逻辑语义表示当所有的入边都到达的时候才触发该结点开始执行,出边之间的AND逻辑语义表示结点执行完成的时候所有的出边都满足条件,入边之间的OR逻辑语义表示当所有满足条件的入边都到达的时候才触发该结点开始执行,出边之间的OR逻辑语义表示结点执行完成的时候可以有一条或多条出边满足条件。
下面列出了不同类型的模型结点的入边或出边的逻辑语义:
开始结点StartNode:没有入边,出边是XOR逻辑;
结束结点DoneNode:入边是XOR逻辑,没有出边;
并行分支结点AndSplitNode:入边是XOR逻辑,出边是AND逻辑;
并行会聚结点AndJoinNode:入边是AND逻辑,出边是XOR逻辑;
多重选择分支结点OrSplitNode:入边是XOR逻辑,出边是OR逻辑;
多重选择会聚结点OrJoinNode:入边是OR逻辑,出边是XOR逻辑;
子流程结点SubflowNode:入边是XOR逻辑,出边是XOR逻辑;
空结点NopNode:入边是XOR逻辑,出边是XOR逻辑;
人工任务结点ManualTaskNode:入边是XOR逻辑,出边是XOR逻辑;
自动任务结点AutoTaskNode:入边是XOR逻辑,出边是XOR逻辑;
计时结点TimerNode:入边是XOR逻辑,出边是XOR逻辑;
事件监听结点EventReceiverNode:入边是XOR逻辑,出边是XOR逻辑。
在任何一种模型结点内部都可以定义业务语义,按结点的执行过程进行划分成前、中、后三个阶段,可以在不同的阶段中设置前置动作序列、任务动作序列和后置动作序列,这些动作可以根据业务条件来决定是否要执行。
流程模型和结点上可以定义0..N个超时策略,超时策略定义了流程的预估执行周期,以及在截止时间到达时或到达之前的某些时间点所要执行的动作。每个超时策略定义的特征在于:(i)执行周期的描述格式采用W3C XML Schema中的duration规范(ii)提供了两种方式来描述超时,一种是按执行周期完成前的实际时间来描述,例如,截止时间前的两个小时执行超时策略,另一种是按执行周期的百分比来描述,例如,执行周期还剩余20%的时候执行超时策略(iii)可以定义多个超时策略,每个超时策略都具有名字,执行超时策略的时候,系统会把超时策略的名字传给超时策略的适配器。
在流程模型中可以定义全局变量,是流程中各个结点所共享的全局变量,用于结点之间交换数据以及流程内部和外部之间交换数据。既支持简单类型的流程变量,也支持具有结构的复杂类型的流程变量:
(i)支持的简单类型有STRING、INTEGER、LONG、FLOAT、DOUBLE、BIGDECIMAL、DATETIME、BOOLEAN、CHAR和CLOB,统称为SIMPLE类型;
(ii)支持的具有结构的复杂类型有记录(RECORD)类型、数组(LIST)类型、映射表(MAP)类型和目标(OBJECT)类型,其数据成员类型可以是任何所支持的流程变量类型,因此这四种类型的变量也称为容器型变量。其中记录类型(RECORD)的值描述,包含了0..N个字段的描述,每个字段描述有两个属性,分别定义了字段的名字和字段的类型,字段的值描述又递归使用RECORD、LIST、MAP和SIMPLE的值描述。对于数组类型(LIST)的值描述,包含了0..N个数组元素的描述,每个数组元素有一个属性,定义了数组元素的类型,其值描述又递归使用RECORD、LIST、MAP和SIMPLE的值描述。映射表类型(MAP)的值描述,包含了0..N个条目,每个条目是一个“键-值”对,每个条目有三个属性,分别定义了键的名字、键的类型和值的数据类型,其值描述又递归使用RECORD、LIST、MAP和SIMPLE的值描述。对于简单类型(SIMPLE)的值描述,直接使用其字符串描述格式,其中日期类型(DATATIME)的字符串描述格式是“年-月-日时:分:秒”。
流程中的所有业务条件都是基于流程变量集建立的条件表达式,其中:(i)表达式中可以引用变量集中变量的值;
(ii)对于简单类型的变量,直接使用变量名就能引用变量的值;
(iii)对于记录类型(RECORD)的变量,可以使用点操作“.”引用记录内部的字段值;
(iv)对于数组类型(LIST)的变量,可以使用下标操作“[]”引用数组元素的值,下标值的取值范围是0..N,其中N是元素个数减一;
(v)对于映射表类型(MAP)的变量,可以使用下标操作“[]”引用映射表条目的值,其中下标值是条目的键值,键值可以是字符串或数值;
(vi)通过递归级联使用点操作和下标操作,可以引用复杂结构数据对象内部的值。
下面介绍定义为W3C的XML Schema格式的工作流模型语言,通过其中元素定义来进一步详细阐述本发明的具体应用,并以模板元素的层次结构为主线,从最外层往最里层,逐层介绍。
图1中所示的WfPackage元素是工作流模型语言的最外层元素,描述工作流模型所在的包,这里描述从根包开始到当前包的每一层包。其中子元素的定义:
Handle:包的句柄。
Id:包的ID,必须符合Java标识符定义。
Name:包的名字。
ParenPackagePath:描述从根包开始到当前包的父包之间的包路径,每一级包用一个TemplatePackage描述。如果当前包是根包,那么ParentPackagePath为空。
Remark:包的描述。
Templates:一个包中可以有多个工作流模型。
图2中所示的Templates元素用来封装多个Template元素该Template元素描述工作流模型的顶层元素。工作流模型也称为流程模板。
图3中所示的Template元素用来描述工作流模型的顶层元素。其中子元素定义:
Handle:流程模板的句柄。
Id:流程模板的ID,必须符合Java标识符定义。
Name:流程模板的名字。
SchemaVersion:流程模板的XML规范的版本。
MainVersion:流程模板的主版本号,从1开始编号。
SubVersion:流程模板的子版本号,从0开始编号。
Remark:流程模板的描述。
OvertimePolicies:流程模板的超时策略定义,可以定义0..n个超时策略。
CreatorId:流程模板的创建人ID。
CreatorName:流程模板的创建人名字。
CreatedDatetime:流程模板的创建日期。
LastModifyPersonId:流程模板的最后一次修改人的ID。
LastModifyPersonName:流程模板的最后一次修改人的名字。
LastModifiedDatetime:流程模板的最后一次修改的日期。
Variables:流程模板中定义的流程变量集,可以定义0..n个变量。
Nodes:流程模板中定义的结点,合法的流程模板中有2..n个结点,至少有一个开始结点和一个结束结点。
Routes:流程模板中定义的路由边,合法的流程模板中有1..n条路由边,至少有一条连接开始结点和结束结点的边。
TemplateGraphics:流程模板的图形描述,流程模板中把流程的绘图信息分开存放,有利于流程模板的扩展。
在图4中所示的OvertimePolicies元素下定义超时策略,Duration定义流程或者活动的执行周期,基于执行周期定义0..n个超时策略。其中子元素的定义:
Duration:执行周期定义,格式必须符合W3C XML Schema中的duration类型,基本格式是PnYnMnDTnHnMnS,P和T是必须的,T分割日期部分和时间部分。T之前的Y表示年、M表示月、D表示日,T之后的H表示时、M表示分、S表示秒。除了P、T之外,其它的根据需要是否使用。例如P1DT2H表示1天2小时,PT10S表示10秒钟。
OvertimePolicy:可以定义0..n个超时策略,一个超时策略定义了当指定的时刻到达的时候系统应该执行的动作。
Name:超时策略的名字,由于可以定义多个超时策略,用不同的名字进行区分,系统会自动把超时策略的名字传给超时策略适配器,以便适配器进行区分,执行正确的动作。
BeforeTime:表示在执行周期结束前多少时间触发执行适配器,值是字符串,格式必须符合W3C XML Schema中的duration类型。
Percent:表示在执行周期剩下百分之几的时候触发执行适配器,值是int型。
AdapterName:超时策略适配器的名字,适配器必须实现以下接口:
public interface com.cit.wf.util.OvertimeAdapter{
/**
*引擎调用该方法进行超时的策略处理
*@param targetPOID表示超时关注的对象POID。
*1.targetType=1,表示流程超时targetPOID表示流程的POID
*2.targetType=2,表示活动超时,表示活动的POID
*3.targetType=3,表示任务超时,表示任务的POID
*@param targetType
*@param policyName对应流程模板中定义的policyName,供应用标记超时策略
*@throws WorkflowException
*/
public void invoke(String targetPOID,inttargetType,String policyName)throws WorkflowException;
}
图5所示的Variables元素是定义流程变量集的元素,该元素下面可以定义0..n个流程变量。其中子元素的定义:
Variable:定义了一个流程变量,是流程变量的根元素。
Name:流程变量的名字,必须遵循Java标识符规范。
Kind:流程变量的类型,取值范围:
VAR_KIND_NAME=1;//表达式
VAR_KIND_STRING=2;//字符串
VAR_KIND_INTEGER=3;//整数
VAR_KIND_LONG=4;//长整数
VAR_KIND_FLOAT=5;//浮点
VAR_KIND_DOUBLE=6;//双浮点
VAR_KIND_DATETIME=7;//日期时间
VAR_KIND_BOOLEAN=8;//布尔型
VAR_KIND_CHAR=9;//字符
VAR_KIND_OBJECT=10;//可序列化对象
VAR_KIND_CLOB=11;//大字符串
VAR_KIND_RECORD=12;//记录类型
VAR_KIND_MAP=13;//映射表
VAR_KIND_LIST=14;//数组类型
VAR_KIND_BIGDECIMAL=15;//超大数值类型
Value:流程变量的初始值,不仅能设置简单类型变量的初始值,还能设置复杂类型变量的初始值。
ObjectUUID:如果变量类型是10~14,那么它标识值对象在持久存储中的惟一索引。
BizKey:标识流程变量是否为业务参考变元,所有标识为BizKey的流程变量的值所组成的状态惟一地标识了一个流程实例。
Remark:流程变量的描述。
图6所述的Value元素是定义流程变量值的元素,流程变量值不但能够描述简单类型的值,还能描述复杂结构的值。其中子元素的定义:
如果是简单类型,那么把值作为Value元素的content。
RecordData:描述记录类型的值,包括预定义的Record和用户、自定义的JavaBean都可以作为记录类型。
ListData:描述数组(列表)类型的值,数组的元素可以是任何支持类型。
MapData:描述映射表类型的值,映射表的键必须是字符串类型和数值类型,值可以是任何支持的类型。
ObjectData:描述对象类型的值。
图7所述的Record元素是定义记录类型的值,记录值的实现类型可以是预定义的Record类也可以是用户自定义的JavaBean,记录成员的类型可以是任何支持的变量类型,并可以无限嵌套。其中子元素定义:
RecordData的属性recordClass:记录值的实现类名。
FieldData:定义了记录的字段,可以是任何支持的变量类型。
FieldData的属性name:字段名。
FiledData的属性kind:字段类型,任何支持的变量类型。
图8所示的ListData元素定义了数组类型的值,数组元素可以是任何支持的变量类型。其中子元素的定义:
ListElement:定义了数组元素,数组元素的类型可以是任何支持的变量类型。
ListElement的属性kind:数组元素的类型。
图9所示的MapData元素定义了映射表类型的值,映射表的键值必须是字符串类型,键所对应的值的类型可以是任何支持的变量类型。其中子元素的定义:
MapEntry:定义了映射表中的一个条目。
MapEntry的属性key:映射表条目的键名。
MapEntry的属性keyKind:映射表条目的键类型,可以是字符串和数值类型。
MapEntry的属性kind:映射表条目的值的类型。
图10中所述的ObjectData元素定义了对象类型的值,对象类型的值可以是简单类型,也可以是具有复杂结构的类型。其中子元素的定义:
ObjectData的属性kind:定义了对象类型值的所属类型。
图11中所示的Nodes元素是流程模板的结点集元素,定义了一个流程模板中的所有的结点。每种结点从逻辑上分有三个事务段:前置动作、任务动作、后置动作,分别在三个不同的事务段中完成。根据每种结点的具体特点,可以省略前置动作和后置动作。其中子元素的定义:
StartNode:开始结点,一个流程模板中只能有一个开始结点。
TaskNode:任务结点,自动任务结点和人工任务结点都用该元素定义。
JoinNode:会聚结点,包含并行会聚(AND逻辑)和选择会聚(OR逻辑)。
SplitNode:分支结点,包含并行分支(AND逻辑)和选择分支(OR逻辑)。
EventNode:事件接收结点,定义接收事件的结点,使流程能够被外部事件驱动,事件是全局性的,在整个工作流引擎范围内有效。
TimerNode:计时结点,包括同步和异步两种模式。
SubflowNode:子流程调用结点,包括同步和异步两种模式。
NopNode:空结点,一般用于在同步块或选择块中提供XOR逻辑的控制,保证分支数和会聚数一样。
DoneNode:结束结点,从业务角度考虑,有两种结束,正常结束(Finished)和中止(Terminated)。一个流程模型中可以有多个结束结点。
图12中所示的PreActions元素定义结点的前置动作,一个结点可以有多个前置动作,在流程运行的时候根据动作上定义的条件是否成立来决定是否要执行动作。所有前置动作在同一个事务中完成。其中子元素的定义:
Action:动作定义元素。
Condition:业务动作是否要执行的条件,如果没有设置条件,那么表示恒真。
AssignTaskAction:分派任务的动作,不能设置在前置动作中。
CallBusinessAction:调用外部系统整合适配器的动作。
SendMessageAction:向JMS消息队列发送消息的动作。
JavaSnippetAction:执行Java程序片段的动作。
图13中所示的TaskActions元素定义结点的任务动作,一个结点可以有多个任务动作,在流程运行的时候根据动作上定义的条件是否成立来决定是否要执行动作。任务动作在每个任务提交时执行,所有的任务Action在同一个事务中完成。AssignTaskAction只能作为人工结点的第一个任务动作。其中子元素的定义:
Action:动作定义元素。
Condition:业务动作是否要执行的条件,如果没有设置条件,那么表示恒真。
AssignTaskAction:分派任务的动作,只能设置在任务动作中的第一个。
CallBusinessAction:调用外部系统整合适配器的动作。
SendMessageAction:向JMS消息队列发送消息的动作。
JavaSnippetAction:执行Java程序片段的动作。
图14中的PostAction元素定义结点的后置动作,一个结点可以有多个后置动作,在流程运行的时候根据动作上定义的条件是否成立来决定是否要执行动作。后置动作在结点的所有任务完成后执行,所有的后置Action在同一个事务中完成。其中子元素的定义:
Action:动作定义元素。
Condition:业务动作是否要执行的条件,如果没有设置条件,那么表示恒真。
AssignTaskAction:分派任务的动作,后置动作中不能设置。
CallBusinessAction:调用外部系统整合适配器的动作。
SendMessageAction:向JMS消息队列发送消息的动作。
JavaSnippetAction:执行Java程序片段的动作。
图15所示的AssignTaskAction元素定义任务分派动作,只能在人工结点中设置,并且设置在任务动作序列的第一个。任务分派动作会触发引擎执行分派策略,根据其中定义的超时策略来设置活动的超时和每个任务的超时。其中子元素的定义:
TransactionKind:设置动作的事务类型。
TRANSACTION_TYPE_REQUIRED=1;
TRANSACTION_TYPE_REQUIRES_NEW=2;
TRANSACTION_TYPE_MANDATORY=3;
TRANSACTION_TYPE_SUPPORTS=4;
TRANSACTION_TYPE_NOT_SUPPORTED=5;
TRANSACTION_TYPE_NEVER=6;
Priority:任务的优先级,该数值会填入Task表的Priority字段中。
Weight:任务的估算工作量,当把任务分配给某个人的时候,会把该工作量加到该人的当前工作量中。
OvertimePolicies:任务的超时策略设置,其子元素Duration的值也作为活动的超时控制。请参照OvertimePolicies元素的描述。
Remark:任务动作的描述。
图16所示的CallBusinessAction元素定义调用外部系统整合适配器的动作。适配器必须实现下面的接口:
public interface com.cit.wf.util.BusinessAdapter{
/**
*@param invokeParams传入的流程变量
*@return返回用户需要改变流程中变量的变量集
*@throws WorkflowException
*/
public VariableSet invoke(VariableSet invokeParams)throws WorkflowException;
}
其中子元素的定义:
TransactionKind:设置动作的事务类型。
TRANSACTION_TYPE_REQUIRED=1;
TRANSACTION_TYPE_REQUIRES_NEW=2;
TRANSACTION_TYPE_MANDATORY=3;
TRANSACTION_TYPE_SUPPORTS=4;
TRANSACTION_TYPE_NOT_SUPPORTED=5;
TRANSACTION_TYPE_NEVER=6;
AdapterName:适配器的实现类名字,必须包含完整的包名。
Params:定义适配器的传入参数,就是定义把哪些流程变量传给适配器。可以定义多个传入参数。
Param:单个传入参数定义。
Name:传入参数的名字,就是适配器中能够识别的参数名字。
Kind:参数值的类型,如果类型为1,那么表示参数值是表达式,系统基于流程变量集进行表达式运算,得出结果作为参数的值。如果是其它类型,那么直接作为指定类型的参数值,不做表达式运算。
VAR_KIND_NAME=1;//表达式
VAR_KIND_STRING=2;//字符串
VAR_KIND_INTEGER=3;//整数
VAR_KIND_LONG=4;//长整数
VAR_KIND_FLOAT=5;//浮点
VAR_KIND_DOUBLE=6;//双浮点
VAR_KIND_DATETIME=7;//日期时间
VAR_KIND_BOOLEAN=8;//布尔型
VAR_KIND_CHAR=9;//字符
VAR_KIND_OBJECT=10;//可序列化对象
VAR_KIND_CLOB=11;//大字符串
VAR_KIND_RECORD=12;//记录类型
VAR_KIND_MAP=13;//映射表
VAR_KIND_LIST=14;//数组类型
VAR_KIND_BIGDECIMAL=15;//超大数值类型
Value:参数值,如果Kind为1,那么就是表达式。
Remark:参数描述。
Remark:动作描述。
图17所示的SendMessageAction元素定义发送事件动作,这里定义了要发送事件的模板,事件发送到Wf_EventQueue队列中,如果有接收该事件的活动存在,那么发出的事件将触发流程的运行。事件常用于不同流程之间,工作流系统外部与流程之间进行数据交换和交互的通道。其中事件模板包括事件头(EventHeader)、参数集(Params);事件头包括事件标题(EventTitle)、事件关键字列表(EventKeys)。
系统区分不同的事件实例是根据事件头来区分,事件接收结点要接收一个事件,其匹配规则是:(1)事件标题一致(2)具有相同的事件关键字(3)每一个事件关键字的值相同。
接收到事件后,系统把事件的参数集中的数据存放到相应的流程变量中。
根据事件模板生成事件实例的规则:(1)根据EventKey的定义,如果Kind为1,那么Value中是表达式,基于流程变量集执行表达式,把表达式的结果作为事件关键字的值。如果Kind为其它值,那么把Value中的数据作为常量值的字符串表示形式,并转换成指定的类型。(2)根据Param的定义,如果Kind为1,那么Value中是表达式,基于流程变量集执行表达式,把表达式的结果作为参数的值。如果Kind为其它值,那么把Value中的数据作为常量值的字符串表示形式,并转换成指定的类型。
TransactionKind:设置动作的事务类型。
TRANSACTION_TYPE_REQUIRED=1;
TRANSACTION_TYPE_REQUIRES_NEW=2;
TRANSACTION_TYPE_MANDATORY=3;
TRANSACTION_TYPE_SUPPORTS=4;
TRANSACTION_TYPE_NOT_SUPPORTED=5;
TRANSACTION_TYPE_NEVER=6;
Event:事件模板的定义。
EventHeader:事件头定义。
EventTitle:事件标题。
EventKeys:事件关键字列表定义。
EventKey:事件关键字定义。
Name:事件关键字名字,必须符合Java标识符规范。
Kind:事件关键字的类型。
Value:事件关键字的初始值。
Params:事件参数列表定义。
Param:事件参数定义。
Name:事件参数名,必须符合Java标识符规范。
Kind:事件参数类型。
Value:事件参数的初始值。
Remark:事件参数的描述。
Remark:发送消息动作的描述。
图18所示的JavaSnippetAction元素定义执行Java代码片段的动作(暂未实现)。其中子元素的定义:
TransactionKind:设置动作的事务类型。
TRANSACTION_TYPE_REQUIRED=1;
TRANSACTION_TYPE_REQUIRES_NEW=2;
TRANSACTION_TYPE_MANDATORY=3;
TRANSACTION_TYPE_SUPPORTS=4;
TRANSACTION_TYPE_NOT_SUPPORTED=5;
TRANSACTION_TYPE_NEVER=6;
JavaSnippet:Java代码片段。
Remark:描述。
其中子元素的定义:
图19所示的StartNode元素定义开始结点,一个工作流模型中只有一个开始结点。其中子元素的定义:
Handle:结点的句柄。
Id:结点的ID,必须遵循Java标识符规范。
Name:结点的名字。
Remark:结点的描述。
TaskActions:开始结点可以设置任务动作,参考TaskActions元素。
图20所示的TaskNode元素定义任务结点,包括人工任务结点和自动任务结点。其中子元素的定义:
Handle:结点的句柄。
Id:结点的ID,必须遵循Java标识符规范。
Name:结点的名字。
TaskNodeKind:任务结点的类型:
1:人工任务结点
2:自动任务结点
Remark:结点的描述。
Variables:结点中的定义的变量,是流程中的局部变量。
PreActions:任务结点的前置动作。
TaskActions:任务结点的任务动作,在每次提交任务时执行。
PostActions:任务结点的后置动作。
TaskUserExtColumnMappings:流程变量和任务的扩展字段之间的映射关系,引擎据此把流程变量的值填入Task表的扩展字段,供二次开发使用,比如可以用于任务的分单和并单。
IsSecret:标识结点是否保密结点,保密结点流程追踪时用户不可见,常用在管理流程中,如员工考核等。
IsReversable:标识是否可回退结点,流程回退时不能越过该结点,也就是该结点的结果是不可补偿的,常用在管理流程中。
图21所示的JoinNode元素定义会聚结点,包括并行分支会聚(AND逻辑)和选择分支会聚(OR逻辑)。其中子元素的定义:
Handle:结点的句柄。
Id:结点的ID,必须遵循Java标识符规范。
Name:结点的名字。
MatchId:逻辑块有并行逻辑块和选择逻辑块,逻辑块以SplitNode开始,以JoinNode结束,并且逻辑块是可以嵌套的,就像括号匹配一样。这里就是定义会聚结点和那个分支结点匹配,MatchId的值是匹配的分支结点的ID。
LogicKind:结点的逻辑类型:
5:AND逻辑
6:OR逻辑
Remark:结点的描述。
PreActions:会聚结点的前置动作。
TaskActions:会聚结点的任务动作,在每个分支到达时执行。
PostActions:会聚结点的后置动作。
IsSecret:标识结点是否保密结点,保密结点流程追踪时用户不可见,常用在管理流程中。
IsReversable:标识是否可回退结点,流程回退时不能越过该结点,也就是该结点的结果是不可补偿的,常用在管理流程中。
图22所示的SplitNode元素定义分支结点,包括并行分支(AND逻辑)和选择分支(OR逻辑)。其中子元素的定义:
Handle:结点的句柄。
Id:结点的ID,必须遵循Java标识符规范。
Name:结点的名字。
LogicKind:结点的逻辑类型:
5:AND逻辑
6:OR逻辑
Remark:结点的描述。
TaskActions:分支结点的任务动作。
IsSecret:标识结点是否保密结点,保密结点流程追踪时用户不可见,常用在管理流程中。
IsReversable:标识是否可回退结点,流程回退时不能越过该结点,也就是该结点的结果是不可补偿的,常用在管理流程中。
图23所示的EventNode元素定义事件监听结点。在事件监听结点中定义了需要监听的事件的匹配模板,如果事件队列中到达了一个事件,那么就把事件和事件匹配模板进行比较,如果匹配成功,那么就接收事件。一个事件监听结点可以定义多个事件匹配模板,以接收多种类型的事件。
其中事件匹配规则:(1)把事件头信息和EventWatch中的EventHeader进行匹配,必须匹配成功。(2)基于流程中的变量集执行EventWatch中的条件表达式,条件表达式要返回真值。其中事件头匹配规则:(1)事件标题一致(2)具有相同的事件关键字(3)每一个事件关键字的值相同。其中子元素的定义:
Handle:结点的句柄。
Id:结点的ID,必须遵循Java标识符规范。
Name:结点的名字。
Remark:结点的描述。
PreActions:事件监听结点的前置动作。
PostActions:事件监听结点的后置动作。
IsSecret:标识结点是否保密结点,保密结点流程追踪时用户不可见,常用在管理流程中。
IsReversable:标识是否可回退结点,流程回退时不能越过该结点,也就是该结点的结果是不可补偿的,常用在管理流程中。
EventWatches:可以定义多个事件匹配模板,各个事件之间互相独立,是XOR关系,接收到任何一个事件都将激活流程。
EventWatch:事件匹配模板定义。
EventHeader:事件头。
EventTitle:事件标题。
EventKeys:事件头中可以包含多个事件关键字。
EventKey:事件关键字定义。
Name:事件关键字的名字,必须符合Java标识符规范。
Kind:事件关键字值的类型,如果为1,那么Value中是表达式,真正的值要基于流程实例的变量集执行表达式获得。
Value:事件关键字的值,根据类型的不同,可以是表达式或者是常量值的字符串表示形式。
Condition:事件监听的条件,基于流程中的变量集条件为真才能接收事件。如果没有定义条件,那么认为是恒真。
图24所示的TimerNode元素定义计时结点,包括同步计时和异步计时。其中子元素的定义:
Handle:结点的句柄。
Id:结点的ID,必须遵循Java标识符规范。
Name:结点的名字。
Remark:结点的描述。
PreActions:计时结点的前置动作。
Timer:计时定义。
DelayTime:注册到计时服务之后,过多长时间才开始计时。
Duration:计时周期,不包括DelayTime部分。W3C XML Schema的duration类型。
LoopKind:周期性计时的类型
1-无循环
2-有时间限制的循环
3-有次数限制的循环
4-无限循环
LoopInterval:周期性计时的间隔时间,W3C XML Schema的duration类型。
Times:循环的总次数。如果既有次数限制又有计时周期的限制,那么以哪个限制先到达为准。
TimingMode:计时结点的模式
1:同步 2:异步
TaskActions:计时结点的任务动作,每次时钟触发时执行。
IsSecret:标识结点是否保密结点,保密结点流程追踪时用户不可见,常用在管理流程中。
IsReversable:标识是否可回退结点,流程回退时不能越过该结点,也就是该结点的结果是不可补偿的,常用在管理流程中。
图25所示的SubflowNode元素定义子流程结点,调用方式有单模板单实例、单模板多实例、多模板多实例三种,每种调用方式都包括同步、异步模式。其中子元素的定义:
Handle:结点的句柄。
Id:结点的ID,必须遵循Java标识符规范。
Name:结点的名字。
Remark:结点的描述。
CallMode:子流程的调用模式
1:同步 2:异步
对应于部署表结构中的ExecMode
PreActions:子流程结点的前置动作。
SubflowDefinition:子流程调用定义。
PostActions:子流程结点的后置动作。
IsSecret:标识结点是否保密结点,保密结点流程追踪时用户不可见,常用在管理流程中。
IsReversable:标识是否可回退结点,流程回退时不能越过该结点,也就是该结点的结果是不可补偿的,常用在管理流程中。
图26所示的SubflowDefinition元素是子流程调用定义,有三种子流程调用:单模板单实例、单模板多实例、多模版多实例。其中多模版多实例是其中的每个模板只有一个实例。其中子元素的定义:
OneTemplateOneInstance:单模板单实例。
OneTemplateMultiInstance:单模板多实例。
MultiTemplateMultiInstance:多模版多实例,是其中的每个模板只有一个实例。
图27所示的OneTemplateOneInstance元素定义了单模板单实例的子流程调用。其中子元素的定义:
CalledTemplate:定义了调用的流程模板。
CallMappings:定义了把父流程变量值传给子流程变量的参数映射。
ReturnMappings:定义了把子流程变量值传给父流程的参数映射。
图28所示的CalledTemplate元素定义了调用的流程模板。其中子元素的定义:
PackageId:包ID,可以引用流程变量的值。如果引用流程变量的值,那么流程变量必须是字符串类型,使用‘$’作为前缀,例如“$packageId”。
TemplateId:模板ID,可以引用流程变量的值。如果引用流程变量的值,那么流程变量必须是字符串类型,使用‘$’作为前缀,例如“$templateId”。
MainVersion:模板的主版本号,如果是0,表示调用当前部署的最新版本。如果引用流程变量的值,那么流程变量必须是字符串类型,使用‘$’作为前缀,例如“$mainVer”。
SubVersion:模板的子版本号,如果是0,表示调用当前部署的最新版本。如果引用流程变量的值,那么流程变量必须是字符串类型,使用‘$’作为前缀,例如“$subVer”。
图29所示的CallMappings元素定义了把父流程变量值传给子流程变量的参数映射。其中子元素的定义:
CallMappings:可以定义多个子流程调用参数映射。
Mapping:参数映射。
Value:根据Kind的不同,可以是表达式或者常量值的字符串表示形式。
Kind:Value的类型。如果为1,那么Value是表达式,实际的值通过基于父流程的变量集执行表达式得到。
MappedName:基于子流程变量集的表达式,表达式的格式符合通常的赋值语句的左边表达式,可以支持点操作和下标操作。
图30所示的ReturnMappings元素定义了把子流程变量值传给父流程的参数映射。其中子元素的定义:
ReturnMappings:可以定义多个子流程返回参数映射。
Mapping:参数映射。
Value:根据Kind的不同,可以是表达式或者常量值的字符串表示形式。
Kind:Value的类型。如果为1,那么Value是表达式,实际的值通过基于子流程的变量集执行表达式得到。
MappedName:基于父流程变量集的表达式,表达式的格式符合通常的赋值语句的左边表达式,可以支持点操作和下标操作。
图31所示的OneTemplateMultiInstanc元素定义了单模板多实例的子流程调用。其中子元素的定义:
CalledTemplate:定义了调用的流程模板。
MultiCallMappings:定义了把父流程变量值传给多个子流程实例变量的参数映射。
MultiReturnMappings:定义了把不同子流程变量值传给父流程的参数映射。
图32所示的MultiCallMappings元素定义了把父流程变量值传给多个子流程实例变量的参数映射。其中子元素的定义:
ParamContainer:ParamContainer是可变参数部分,各个子流程实例不一样,Mapping是不变部分,各个子流程实例一样。
ParamContainerName:List或Map类型的对象型流程变量称为容器变量,父流程中的容器变量。e.g.list
IndexMapping:容器中的索引值映射到子流程的变量名,对于List类型的容器是下标值,对于HashMap类型的容器是键值。
属性indexName:用作容器下标的临时变量名,用于表达式中从容器变量中获取值。名字不能和父流程变量名重。必须遵循Java标识符规范。indexName=idx,list[idx]
Mapping:参数映射,可以定义多个。
Value:根据Kind的不同,可以是表达式或者常量值的字符串表示形式。
Kind:Value的类型。如果为1,那么Value是表达式,实际的值通过基于父流程的变量集执行表达式得到。
MappedName:基于子流程变量集的表达式,表达式的格式符合通常的赋值语句的左边表达式,可以支持点操作和下标操作。
图33所示的MultiReturnMappings元素定义了把不同子流程变量值传给父流程的参数映射。其中子元素的定义:
ParamContainer:ParamContainer是可变参数部分,各个子流程实例不一样,Mapping是不变部分,各个子流程实例一样。
ParamContainerName:List或Map类型的对象型流程变量称为容器变量,父流程中的容器变量。
IndexMapping:容器中的索引值映射到子流程的变量名,对于List类型的容器是下标值,对于HashMap类型的容器是键值。
属性indexName:用作容器下标的临时变量名,用于表达式中从容器变量中获取值。名字不能和父流程变量名重。必须遵循Java标识符规范。
Mapping:参数映射,可以定义多个。
Value:根据Kind的不同,可以是表达式或者常量值的字符串表示形式。
Kind:Value的类型。如果为1,那么Value是表达式,实际的值通过基于子流程的变量集执行表达式得到。
MappedName:基于父流程变量集的表达式,表达式的格式符合通常的赋值语句的左边表达式,可以支持点操作和下标操作。
图34所示的MultiTemplateMultiInstance元素定义了多模版多实例的子流程调用。其中子元素的定义:
TemplateContainer:定义了存放多个模板的流程变量,也作为发起多个子流程的循环次数的依据。
MultiCallMappings:定义了把父流程变量值传给多个子流程实例变量的参数映射。
MultiReturnMappings:定义了把不同子流程变量值传给父流程的参数映射。
图35所示的TemplateContainer元素定义了存放多个模板的流程变量,也作为发起多个子流程的循环次数的依据。其中子元素的定义:
TemplateContainer:定义了子流程模板容器,多个子流程模板既可以定义在List类型的容器变量中,也可以用CalledTemplate元素预先定义,或者二者同时定义,互为补充。
属性containerName:存放容器(List)的名字,是流程变量名,每个元素的对象是Map对象,Map中的键值是″PackageId″,″TemplateId″,″MainVersion″,″SubVersion″,List索引值用于MultiCallMappings和MultiReturnMappings中的ParamContainer的索引值。
CalledTemplate:可以定义多个被调用的子流程模板。参考CalledTemplate元素描述。
图36所示的NopNode元素定义空结点,提供XOR逻辑控制,主要用于并行逻辑块和选择逻辑块中控制分支数和会聚数保持一致。其中子元素的定义:
Handle:结点的句柄。
Id:结点的ID,必须遵循Java标识符规范。
Name:结点的名字。
Remark:结点的描述。
TaskActions:NOP结点的任务动作。
图37所示的DoneNode元素定义结束结点,一个模板中可以有1..n个结束结点。其中子元素的定义:
Handle:结点的句柄。
Id:结点的ID,必须遵循Java标识符规范。
Name:结点的名字。
Remark:结点的描述。
DoneMode:结束结点的模式,是从业务角度区分的
3:Finish 4:Terminate
TaskActions:结束结点的任务动作。
图38所示的Routes元素定义了流程模板中所有的路由边。其中子元素的定义:
Route:边的定义。
Handle:边的句柄。
FromNodeHandle:边的开始结点。
ToNodeHandle:边的目标结点。
Notation:边上显示的文本。
Condition:边上的路由条件。
IsDefault:标识是否为缺省边。当一个结点的所有出边上的条件都不满足的时候走缺省边。缺省值是false。
Remark:边的描述。
图39所示的TemplateGraphics元素定义了模板的图形绘制信息,模板中把业务流程的描述和流程的图形绘制描述分开。其中子元素的定义:
Vertexes:定义了所有结点的坐标信息。
Rotes:定义了所有边的坐标信息。
Claims (19)
1、一种具有丰富业务语义的工作流模型结构,其特征在于:
(1)结点类型有:开始结点、结束结点、并行分子结点、并行会聚结点、多重选择分支结点、多重选择会聚结点、空结点、人工任务结点、自动任务结点、子流程结点、计时结点和事件监听结点;
(2)连接结点的路由边是有向边,在边上可以设置业务条件,在流程执行期间,只有当业务条件满足的时候才会选择该路由边,不同类型的模型结点的输入边之间和输出边之间具有不同的逻辑语义,可以互相组合成具有复杂结构的业务流程;
(3)在任何一种模型结点内部都可以定义业务语义,按结点的执行过程进行划分成前、中、后三个阶段,可以在不同的阶段中设置前置动作序列、任务动作序列和后置动作序列,这些动作可以根据业务条件来决定是否要执行。
(4)流程模型和结点上可以定义0..N个超时策略,超时策略定义了流程的预估执行周期,以及在截止时间到达时或到达之前的某些时间点所要执行的动作。
(5)在流程模型中可以定义在流程中各个结点所共享的全局变量,也可以定义每个步骤中的局部变量,用于结点之间交换数据以及流程内部和外部之间交换数据,既支持简单类型的流程变量,也支持具有结构的复杂类型的流程变量;(i)支持的简单类型有STRING、INTEGER、LONG、FLOAT、DOUBLE、BIGDECIMAL、DATETIME、BOOLEAN、CHAR和CLOB,统称为SIMPLE类型(ii)支持的具有结构的复杂类型有RECORD、LIST、MAP和OBJECT;
(6)在表达式运算中可以组合使用下标操作符“[ ]”和成员变量操作符“.”来引用具有复杂结构流程变量中的值。
2、根据权利要求1所述的一种具有丰富业务语义的工作流模型结构,其特征在于:该计时结点定义为
(1)计时模式定义:同步计时和异步计时。
(2)计时器定义,包含以下几个方面:
①计时总长度,描述格式遵循W3C XML Schema的duration规范。
②周期性触发的类型,包括:无循环、有时间限制的循环、有次数限制的循环和无限循环。
③期性计时的间隔时间,描述格式遵循W3C XML Schema的duration规范。
④环的总次数,如果既有次数限制又有计时总长度的限制,那么以哪个限制先到达为准。
3、根据权利要求1所述的一种具有丰富业务语义的工作流模型结构,其特征在于:该事件监听结点包括1..N个事件匹配模板的定义,表示可以监听一种或多种事件,每个事件匹配模板中定义了事件的标题和标识事件的关键字,工作流系统接收到事件后,把事件头和事件匹配模板进行匹配,如果满足以下三个条件就正式接收事件:(i)事件标题一致(ii)具有相同的事件关键字(iii)每一个事件关键字的值相同。
4、根据权利要求1所述的一种具有丰富业务语义的工作流模型结构,其特征在于:该子程序结点定义三种子流程调用模式,分别是单模板单实例、单模板多实例和多模板多实例。
5、根据权利要求4所述的一种具有丰富业务语义的工作流模型结构,其特征在于:该单模板单实例调用模式定义为(i)用包路径ID、流程模板ID、流程模板版本号来定义被调用的流程模板;(ii)调用映射,定义了把父流程变量值传递给子流程的方法;(iii)返回映射,定义了把子流程数据传递给父流程的方法。
6、根据权利要求5所述的一种具有丰富业务语义的工作流模型结构,其特征在于:该单模板单实例调用模式通过引用流程变量的参数化方式来动态定义,使用‘$’或其它特殊字符作为前缀。
7、根据权利要求4所述的一种具有丰富业务语义的工作流模型结构,其特征在于:该单模板多实例调用模式,其中定义调用映射:调用子流程采用基于容器类型变量进行循环的方式,容器变量类型包括数组类型和映射表类型,在定义调用子流程的数据映射方式时,要指定一个容器类型的流程变量作为循环控制的依据,容器中的元素个数或条目数作为循环次数,同时还要定义一个用于存放容器元素指针的临时变量,对于数组中元素的指针是0..N之间的数值,N是元素个数减一,对于映射表中元素的指针是条目的键值,该临时变量用于调用数据映射的表达式中,另外定义一个子流程中用于存放容器元素指针的变量,用于标识不同的子流程;定义返回映射:子流程返回父流程的返回映射中要定义一个父流程中的容器类型变量作为接收子流程返回值的容器,在容器中的存放位置由子流程中标识子流程的变量值定义,该变量和调用映射中定义的接收容器元素指针的变量相同,另外还要定义一个临时变量用于接收子流程中标识子流程的变量值,该临时变量用于返回数据映射的表达式中。
8、根据权利要求4所述的一种具有丰富业务语义的工作流模型结构,其特征在于:该多模板多实例调用模式,定义被调用的多个流程模板放在一个数据类型的容器变量中,每个元素是映射表类型的数据,映射表中的键值是″PackageId″、″TemplateId″、″MainVersion″和″SubVersion″,数据类型的容器作为循环控制的依据。
9、根据权利要求1所述的一种具有丰富业务语义的工作流模型结构,其特征在于:所述的路由边上定义基于流程变量集的条件表达式,如果没有定义条件表达式,那么认为是恒真。
10、根据权利要求1所述的一种具有丰富业务语义的工作流模型结构,其特征在于:对于记录类型(RECORD)的值描述,包含了0..N个字段的描述,每个字段描述有两个属性,分别定义了字段的名字和字段的类型,字段的类型可以是任何所支持的流程变量类型,字段的值描述又递归使用RECORD、LIST、MAP和SIMPLE的值描述。
11、根据权利要求1所述的一种具有丰富业务语义的工作流模型结构,其特征在于:对于数组类型(LIST)的值描述,包含了0..N个数组元素的描述,每个数组元素有一个属性,定义了数组元素的类型,数组元素的类型可以是任何所支持的流程变量类型,其值描述又递归使用RECORD、LIST、MAP和SIMPLE的值描述。
12、根据权利要求1所述的一种具有丰富业务语义的工作流模型结构,其特征在于:对于映射表类型(MAP)的值描述,包含了0..N个条目,每个条目是一个“键-值”对,每个条目有三个属性,分别定义了键的名字、键的类型和值的数据类型,值的类型可以是任何所支持的流程变量类型,其值描述又递归使用RECORD、LIST、MAP和SIMPLE的值描述。
13、根据权利要求1所述的一种具有丰富业务语义的工作流模型结构,其特征在于:对于简单类型(SIMPLE)的值描述,直接使用其字符串描述格式,其中日期类型(DATATIME)的字符串描述格式是“年-月-日时:分:秒”。
14、根据权利要求7所述的一种具有丰富业务语义的工作流模型结构,其特征在于:所述的数据映射定义的基本内涵是“From表达式→To表达式”,“From表达式”是基于源流程变量集的表达式,“TO表达式”是基于目标流程变量集的表达式。
15、根据权利要求7所述的一种具有丰富业务语义的工作流模型结构,其特征在于:所谓一个表达式基于一个变量集,就是表达式中所用到的所用变量都在该变量集中定义。
16、根据权利要求7所述的一种具有丰富业务语义的工作流模型结构,其特征在于:所述的子流程结点的调用数据映射,源流程变量集是父流程的变量集,目标流程的变量集是子流程的变量集。
17、根据权利要求7所述的一种具有丰富业务语义的工作流模型结构,其特征在于:所述的子流程结点的返回数据映射,源流程变量集是子流程的变量集,目标流程的变量集是父流程的变量集。
18、根据权利要求2所述的一种具有丰富业务语义的工作流模型结构,其特征在于:该不同类型的模型结点的输入边之间和输出边之间具有不同的逻辑语义,其特征在于:
开始结点StartNode:没有入边,出边是XOR逻辑;
结束结点DoneNode:入边是XOR逻辑,没有出边;
并行分支结点AndSplitNode:入边是XOR逻辑,出边是AND逻辑;
并行会聚结点AndJoinNode:入边是AND逻辑,出边是XOR逻辑;
多重选择分支结点OrSplitNode:入边是XOR逻辑,出边是OR逻辑;
多重选择会聚结点OrJoinNode:入边是OR逻辑,出边是XOR逻辑;
子流程结点SubflowNode:入边是XOR逻辑,出边是XOR逻辑;
空结点NopNode:入边是XOR逻辑,出边是XOR逻辑;
人工任务结点ManualTaskNode:入边是XOR逻辑,出边是XOR逻辑;
自动任务结点AutoTaskNode:入边是XOR逻辑,出边是XOR逻辑;
计时结点TimerNode:入边是XOR逻辑,出边是XOR逻辑;
事件监听结点EventReceiverNode:入边是XOR逻辑,出边是XOR逻辑。
19、根据权利要求18所述的一种具有丰富业务语义的工作流模型结构,其特征在于::该入边之间的XOR逻辑语义表示任何一条边到达都会立即触发该结点开始执行,出边之间的XOR逻辑语义表示结点执行完成的时候只能有一条出边满足条件;入边之间的AND逻辑语义表示当所有的入边都到达的时候才触发该结点开始执行,出边之间的AND逻辑语义表示结点执行完成的时候所有的出边都满足条件;入边之间的OR逻辑语义表示当所有满足条件的入边都到达的时候才触发该结点开始执行,出边之间的OR逻辑语义表示结点执行完成的时候可以有一条或多条出边满足条件。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNA2005101214901A CN1928904A (zh) | 2005-12-28 | 2005-12-28 | 一种具有丰富业务语义的工作流模型结构 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNA2005101214901A CN1928904A (zh) | 2005-12-28 | 2005-12-28 | 一种具有丰富业务语义的工作流模型结构 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN1928904A true CN1928904A (zh) | 2007-03-14 |
Family
ID=37858860
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNA2005101214901A Pending CN1928904A (zh) | 2005-12-28 | 2005-12-28 | 一种具有丰富业务语义的工作流模型结构 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN1928904A (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102314349A (zh) * | 2011-09-16 | 2012-01-11 | 武汉中地数码科技有限公司 | 空间信息功能插件工作流搭建方法 |
CN104331632A (zh) * | 2014-11-21 | 2015-02-04 | 西安电子科技大学 | 用于处理诊疗流程的计算机软系统 |
CN104460602A (zh) * | 2014-11-07 | 2015-03-25 | 浙江大学 | 工业过程控制工艺流程安全的检测方法及其系统 |
CN113537943A (zh) * | 2021-07-30 | 2021-10-22 | 苏州工业园区测绘地理信息有限公司 | 一种通用工作流引擎及其构建方法 |
-
2005
- 2005-12-28 CN CNA2005101214901A patent/CN1928904A/zh active Pending
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102314349A (zh) * | 2011-09-16 | 2012-01-11 | 武汉中地数码科技有限公司 | 空间信息功能插件工作流搭建方法 |
CN102314349B (zh) * | 2011-09-16 | 2014-07-09 | 武汉中地数码科技有限公司 | 空间信息功能插件工作流搭建方法 |
CN104460602A (zh) * | 2014-11-07 | 2015-03-25 | 浙江大学 | 工业过程控制工艺流程安全的检测方法及其系统 |
CN104331632A (zh) * | 2014-11-21 | 2015-02-04 | 西安电子科技大学 | 用于处理诊疗流程的计算机软系统 |
CN104331632B (zh) * | 2014-11-21 | 2017-05-17 | 西安电子科技大学 | 用于处理诊疗流程的计算机软系统 |
CN113537943A (zh) * | 2021-07-30 | 2021-10-22 | 苏州工业园区测绘地理信息有限公司 | 一种通用工作流引擎及其构建方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN1027198C (zh) | 计算装置 | |
CN1182467C (zh) | 可扩充的分布企业应用集成系统 | |
CN1155906C (zh) | 数据处理方法、系统、处理程序及记录媒体 | |
CN1130626C (zh) | 支援并行程序的装置以及支持程序编制的方法 | |
CN1280730C (zh) | 不用存储单元收集装置及不用存储单元收集方法 | |
CN1866253A (zh) | 把Web服务映射到本体 | |
CN1592905A (zh) | 自动产生数据库查询的系统和方法 | |
CN1961329A (zh) | 用于按需业务协作的信息超链管理的方法和装置 | |
CN1949763A (zh) | 共享信息服务器系统 | |
CN101034349A (zh) | 基于功能设计的数据库应用系统开发平台 | |
CN1910601A (zh) | 限制条件解决方法、限制条件解决装置、以及限制条件解决系统 | |
CN1073276A (zh) | 语言的中性对象 | |
CN1073540A (zh) | 管理类方法名 | |
CN1629869A (zh) | 产生和管理商业过程集成解决方案的系统和方法 | |
CN1604082A (zh) | 用于任意数据模型的映射体系结构 | |
CN1875345A (zh) | 在编译过程中表示和检查程序组件的一致性的可扩展类型系统 | |
CN101044482A (zh) | 基于实体的可配置数据归档管理系统和方法 | |
CN1126053C (zh) | 文件检索方法、文件检索发送方法及装置 | |
CN1619561A (zh) | 商品交易装置 | |
CN1856788A (zh) | 类似率算出装置和类似率算出程序 | |
CN101030138A (zh) | 应用构架 | |
CN1745364A (zh) | 用于扩展应用程序首选项类的系统和方法 | |
CN1402173A (zh) | 成本估计方法及系统 | |
CN1799048A (zh) | 通用数据库模式 | |
CN1384454A (zh) | 信息概括系统和信息概括方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C12 | Rejection of a patent application after its publication | ||
RJ01 | Rejection of invention patent application after publication |
Open date: 20070314 |