一种将业务流程图转换为执行语言的方法

文档序号:6557660阅读:179来源:国知局
专利名称:一种将业务流程图转换为执行语言的方法
技术领域
本发明涉及计算机软件应用领域,特别涉及一种将业务流程图转换为执行语言的方法。
背景技术
业务流程建模标注(Business Process Modeling Notation,BPMN)是一套用于描述企业复杂业务流程的图形符号,也是当前主流的可视化、图形化地描述业务流程的国际化标准规范。按照业务流程建模标注的标准规范所绘制出的业务流程图表示一个企业内部或多个企业之间为了达到某种业务目的而需要执行的一系列操作和协作。业务流程图由结点和顺序流组成,结点代表单个操作,顺序流表示结点(操作)之间执行的顺序关系。
业务流程执行语言(Business Process Execution Language for Web Service,BPEL)是一种基于可扩展标记语言(Extensible Markup Language,XML)的企业业务流程定义和执行语言,用于将多个网络服务(Web Service)组织起来实现复杂的业务流程。
业务流程建模标注是一种对于业务流程的图形化示意表示,主要用于企业管理者对于业务流程的绘制、理解、讨论和分享。业务流程图必须转换成业务流程执行语言,整个业务流程才能够实际运行并发挥作用。然而在实际过程中,将业务流程图转换为业务流程执行语言是非常困难的。转换的难点在于业务流程建模标注和业务流程执行语言的结构特点不同业务流程执行语言遵循严格的结构化,是层层嵌套的块状结构,不同元素的范围划分非常明确,位于同一层次的两个块不能有重叠部分,而位于不同块内的两个子块也不能有重叠部分;而业务流程建模标注是灵活多变的图状结构,图中不同结点之间可以用顺序流随意连接,所以很难将业务流程图划分为不同的块。
目前业界只有很少的公司从事开发将业务流程图转换为业务流程执行语言的技术和产品。ITP Commerce公司的Process Modeler for Visio和Telelogic公司的System Architect是其中比较著名和主流的产品。但是这些产品存在着许多缺点。首先,这些产品只能处理结构非常简单的业务流程图,对于复杂结构的业务流程图无法转换,例如,它们无法处理业务流程图中的部分重叠的循环流程;其次,这些产品均未提出一套完整的、系统的将业务流程图转换为业务流程执行语言的操作过程和方法学。

发明内容
本发明的目的在于提供一种能够对复杂的业务流程图进行精确的分析和转换,最终得到可以实际用于企业业务执行的业务流程执行语言文件的方法。
为达到上述目的,本发明一种将业务流程图转换为执行语言的方法,通过计算机将所述业务流程图转换为能够实际运行的业务流程执行语言,实现企业业务执行的真实环境,该方法执行如下步骤(1)划分所述业务流程图中结点的类型并定义所述结点的名称和编号方式、块的模式以及所述结点与所述业务流程执行语言中语言元素的对应关系和所述块的模式与所述业务流程执行语言中结构活动元素的对应关系;(2)读入业务流程图文件,并转换为内存表示;(3)分析所述业务流程图读取所述业务流程图所包含的所有所述结点的列表并对所述业务流程图中所有的所述结点和顺序流按步骤(1)中划分的结点类型分别进行令牌创建;(4)标记业务流程图读取所述业务流程图所包含的所有所述结点的列表并对所述业务流程图中所有的所述结点和顺序流的所述令牌分别进行令牌处理,所述令牌处理包括对所述令牌按所述步骤(1)中定义的名称和编号进行合并和/或组合;(5)转换业务流程图读取所述业务流程图所包含的所有所述结点的列表并对所述业务流程图中所有的块分别进行转换处理,所述转换处理包括按所述步骤(1)中所述结点与所述业务流程执行语言中语言元素的对应关系和所述块的模式与所述业务流程执行语言中结构活动元素的对应关系将所述结点分别转换为对应的业务流程执行语言元素;(6)转换过程结束,获取最终得到的业务流程执行语言文件。
本发明所述的方法,其中在所述步骤(3)中所述令牌创建的方法执行如下步骤1)读取所述业务流程图所包含的所有所述结点的列表;2)从所述列表中读取下一个未处理的所述结点;3)若该结点没有流入的顺序流,则执行步骤4),否则执行步骤5);4)为该结点创建一个原子令牌,执行步骤9);5)判断流入该结点的所有顺序流是否均已携带有所述令牌,若为是,执行步骤6),否则执行步骤2);
6)判断流入该结点的所有所述令牌是否能够合并,若流入该结点的所有顺序流所携带的所述令牌由同一个结点生成的,且这些令牌的数目与该所述结点所生成的所述令牌数目相同,则将这些令牌合并为原来的父令牌,并执行步骤7),否则执行步骤8);7)将流入该结点的所有顺序流所携带的令牌分段合并为它们的父令牌,执行步骤9);8)当流入该结点的所有顺序流所携带的令牌无法合并为一个父令牌时,这些令牌将被堆放到一起组合成一个组合令牌;9)若该结点只有一条流出的顺序流,则执行步骤10),否则执行步骤11);10)将7)或8)中通过合并或组合所得到的所述令牌,或4)中所生成的所述令牌赋予该结点的唯一流出顺序流,执行步骤12);11)为该结点的多条流出顺序流分别赋予一个子令牌,这些子令牌都是由该结点所生成的,其中,若该结点有多条流入的顺序流,则生成的这些令牌都是7)或8)中通过合并或组合所得到的令牌的子令牌;若该结点只有一条流入的顺序流,则这些生成的令牌都是该流入顺序流所携带的令牌的子令牌;若该结点没有流入的顺序流,则这些生成的令牌都是4)中所生成的令牌的子令牌;12)判断是否还有在本次处理中未处理的所述结点,若为是,则执行步骤2),否则执行步骤13);13)判断是否所述业务流程图中所有的顺序流都拥有了所述令牌,若为是,则执行步骤14),否则执行步骤1);(14)分析过程结束。
本发明所述的方法,其中在所述步骤(4)中所述令牌处理的方法执行如下步骤1)读取所述业务流程图所包含的所有所述结点的列表;2)从所述列表中读取下一个未处理的结点;3)若当前结点没有流入的顺序流,则执行步骤4),若所述当前结点有且仅有一条流入的顺序流,则执行步骤8);若所述当前结点有多条流入的顺序流,则执行步骤15);4)若所述当前结点有且仅有一条流出的顺序流,则执行步骤5);若所述当前结点有多条流出的顺序流,则执行步骤6);5)若所述当前结点有且仅有一条流出的顺序流时,将所述当前结点判定为是一个块的起点,所述当前结点的唯一流出顺序流所携带的所述令牌最后经过的结点判定为是该块的终点,位于此两结点之间的其他结点,即从起点出发沿顺序流行走到终点的过程中所可能经过的所有所述结点判定为在该块中,该块的模式为“正常”,执行步骤20);6)若所述当前结点有多条流出的顺序流时,首先获得在所述当前结点处生成的所述令牌,通过该令牌的属性数据得到所述当前结点在后面流程中的对应结点,即所述令牌途经结点列表中位于所述当前结点之后的下一个结点,也即从该令牌分支出的各个子令牌下一次重新合并为该令牌处;7)将所述当前结点判定为是一个块的起点,所述当前结点的对应结点判定为是该块的终点,位于此两结点之间的其他结点判定为在该块中,并判定该块的相应模式,执行步骤20);8)若所述当前结点没有流出的顺序流,则执行步骤9);若所述当前结点有且仅有一条流出的顺序流,则执行步骤10);若所述当前结点有多条流出的顺序流,则执行步骤11);9)若所述当前结点没有流出的顺序流时,则判定该结点是一个块的终点并执行步骤20);10)若所述当前结点有且仅有一条流出的顺序流时,则判定该结点在一个“正常”块中并执行步骤20);11)若所述当前结点是一个循环结构的起点,即所述当前结点的某一条流出顺序流又指回到了位于上游,在所述当前结点之前的某个结点,则执行步骤12),否则执行步骤13);12)将指向上游的顺序流所指向的所述结点判定为是一个块的起点,所述当前结点判定为是该块的终点,位于此两结点之间的其他所述结点判定为在该块中,该块的模式为“循环”,执行步骤20);13)首先获得所述当前结点的唯一流入顺序流携带的所述令牌,通过该令牌的属性数据得到所述当前结点在后面流程中的对应结点,即所述令牌的途经结点列表中位于所述当前结点之后的下一个结点,也即从该令牌分支出的各个子令牌下一次重新合并为该令牌处;14)将所述当前结点判定为是一个块的起点,所述当前结点的对应结点判定为是该块的终点,位于此两结点之间的其他所述结点判定为在该块中,并判定该块的相应模式;执行步骤20);
15)若所述当前结点没有流出的顺序流,则执行步骤16);若所述当前结点有且仅有一条流出的顺序流,则执行步骤7);若所述当前结点有多条流出的顺序流,则执行步骤18);16)若所述当前结点没有流出的顺序流时,判定该结点是一个块的终点,执行步骤20);17)若所述当前结点有且仅有一条流出的顺序流时,判定该结点是一个块的终点,执行步骤20);18)若所述当前结点有多条流出的顺序流时,首先获得在所述当前结点处通过合并或组合所得到的所述令牌,通过该令牌的属性数据得到所述当前结点在后面流程中的对应结点,即所述令牌的途经结点列表中位于所述当前结点之后的下一个结点,也即从该令牌分支出的各个子令牌下一次重新合并为该令牌处;19)将所述当前结点判定为是一个块的起点,所述当前结点的对应结点判定为是该块的终点,位于此两结点之间的其他结点判定为在该块中,并判定该块的相应模式;执行步骤20);20)判断是否还有在本次处理中未处理的所述结点,若为是,则执行步骤2);21)判断是否所述业务流程图中所有的所述结点都已确定了其所处的块,若为是,则执行步骤22),否则执行步骤1);22)标记过程结束。
本发明所述的方法,其中在所述步骤(5)中执行如下步骤1)读取所述业务流程图所包含的所有所述结点的列表;2)从所述列表中读取下一个未处理的所述结点;3)若当前结点是一个块的起点,则执行步骤4);若所述当前结点是一个块的终点,则执行步骤5);若所述当前结点在一个块中,则执行步骤6);4)若所述当前结点是一个块的起点,根据该块的模式,创建对应的业务流程执行语言结构活动元素,并将其放入到作为结果输出的业务流程执行语言文件中;该块内的所有结点所转换成的所述业务流程执行语言元素将全部被放入该结构活动元素中;执行步骤7);5)若所述当前结点是一个块的终点时,判定该块内的结点已经全部转换完毕,执行步骤7);
6)根据所述当前结点的类型及属性信息,将所述结点转换为相应的所述业务流程执行语言元素,并将被转换后的语言元素放入到与其所在块对应的结构活动元素中;7)判断是否还有在本次处理中未处理的所述结点,若为是,则执行步骤2);8)判断是否所述业务流程图中所有的所述结点都已转换完毕,若为是,则执行步骤9),否则执行步骤1);9)转换过程结束,输出最终得到的所述业务流程执行语言文件。
本发明将业务流程图转换为执行语言的方法的优点是能够对复杂的业务流程图进行精确的分析,恰当的分块,使转换后所得到的业务流程执行语言所表示的流程与原业务流程图所表示的流程保持语义上的基本一致和结构上的近似;本方法提出了一整套完整而系统的基于令牌对业务流程图进行分析的技术,使从业务流程图到业务流程执行语言的转换能够建立在一个坚实的基础上;使用本方法转换得到的业务流程执行语言结果已通过了主流的执行引擎的检验,能够实际用于企业业务执行的真实环境。


下面结合附图对本发明进行进一步的描述。
图1是本发明主流程图;图2是本发明的方法中分析业务流程图的子流程图一;图3是本发明的方法中标记业务流程图的子流程图二;图4是本发明的方法中转换业务流程图的子流程图三;图5是本发明实施例一的业务流程图;图6是本发明实施例二的业务流程图。
具体实施例方式
本发明将业务流程图转换为执行语言的方法,是采用基于令牌(Token)的分析技术将业务流程图有效地转化为业务流程执行语言。在本发明的方法中,为每一条顺序流赋予一个令牌,当流入一个结点的顺序流多于一条时,这些顺序流所携带的令牌将尝试合并;当流出一个结点的顺序流多于一条时,将为这些顺序流产生子令牌。本发明的方法根据令牌的分支和合并,以及令牌本身所携带的属性信息将复杂的业务流程图划分为不同的块,并获知该块的流程结构特点,从而最终将块转化为业务流程执行语言中的对应元素。
下面对本发明将业务流程图转换为执行语言的方法做出详细说明。
参见图1,第一步,在令牌(Token)的分析技术中,为了划分业务流程图中结点的类型,需要定义结点的名称和编号方式;定义块的模式以及结点与业务流程执行语言中语言元素的对应关系和块的模式与业务流程执行语言中结构活动元素的对应关系。
(一)关于令牌的定义如下原子令牌和组合令牌从结构上,令牌可分为原子令牌和组合令牌。原子令牌是无法再分割成更小令牌的令牌。组合令牌是由两个到多个原子令牌组合而形成的令牌。一个组合令牌内部的原子令牌是无法合并为它们的父令牌的。
父令牌和子令牌当一个结点有多条流出的顺序流时,需要为这些顺序流生成并赋予令牌。这时生成的令牌是子令牌,在该结点处通过生成、合并或组合而得到的令牌是这些令牌的父令牌。
关于令牌,具体情况可分为以下三种该结点没有流入的顺序流将为该结点生成一个令牌,该令牌是父令牌,为该结点的所有流出顺序流所生成的令牌都是该父令牌的子令牌;该结点有一条流入的顺序流该流入顺序流所携带的令牌是父令牌,为该结点的所有流出顺序流所生成的令牌都是该父令牌的子令牌;该结点有多条流入的顺序流这些流入的顺序流所携带的令牌将在该结点处进行合并或组合,合并或组合后得到的令牌是父令牌,为该结点的所有流出顺序流所生成的令牌都是该父令牌的子令牌;关于令牌的属性信息。一个令牌含有如下的属性编号用于在一个业务流程图中唯一标识一个令牌。当令牌是原子令牌时,令牌的编号是由系统在生成令牌时指定的,如1,1.1,1.2.1等;当令牌是组合令牌时,令牌的编号是由组成该令牌的各内部令牌的编号连接在一起得到的字符串,各内部令牌的编号用“,”隔开,字符串两边加上括号,如(1,1.2),((1,1.2),1.2.3)等。
兄弟数即有多少个令牌是与该令牌一起被同一个结点生成的。兄弟数包含了该令牌自身。
内部令牌内部令牌是一个列表,当该令牌是组合令牌时,内部令牌列表里保存了组成该令牌的各个内部令牌。当该令牌是原子令牌时,该列表为空。
途经结点途经结点是一个列表,该列表记录了该令牌所经过的结点。当一条顺序流流入一个结点时,则称该顺序流所携带的令牌“经过”了该结点。
(二)关于块的模式定义如下一个块的模式是由块的起始结点和终结结点的类型、属性,以及在起点和终点间的流程的性质决定的。
本方法中块的模式可分为以下几种,见表1表1



(三)在转换过程中,块将根据其模式被转换成其所对应的结构活动元素,关于块的模式与业务流程执行语言中结构活动元素的对应关系定义如下,见表2表2


(四)在转换过程中,结点将根据其本身类型和属性信息而被转换成其所对应的业务流程执行语言元素,关于结点与业务流程执行语言中语言元素的对应关系定义如下,见表3表3


12

承上,本发明的方法执行第二步,计算机读入业务流程图文件,并转换为内存表示。
参见图1和图2,第三步,分析所述业务流程图读取业务流程图所包含的所有结点的列表并对业务流程图中的结点和顺序流按划分的结点类型分别进行令牌创建。具体执行如下步骤(1)读取业务流程图所包含的所有结点的列表;(2)从列表中读取下一个未处理的结点;(3)若该结点没有流入的顺序流,则执行步骤(4),否则执行步骤(5);(4)为该结点创建一个原子令牌,执行步骤(9);(5)判断流入该结点的所有顺序流是否均已携带有令牌,若为是,执行步骤(6),否则执行步骤(2);(6)判断流入该结点的所有令牌是否能够合并,若流入该结点的所有顺序流所携带的令牌由同一个结点生成的,且这些令牌的数目与该结点所生成的令牌数目相同,则将这些令牌合并为原来的父令牌,并执行步骤(7),否则执行步骤(8);(7)将流入该结点的所有顺序流所携带的令牌分段合并为它们的父令牌,执行步骤(9);(8)当流入该结点的所有顺序流所携带的令牌无法合并为一个父令牌时,这些令牌将被堆放到一起组合成一个组合令牌;(9)若该结点只有一条流出的顺序流,则执行步骤(10),否则执行步骤(11);(10)将(7)或(8)中通过合并或组合所得到的令牌,或(4)中所生成的令牌赋予该结点的唯一流出顺序流,执行步骤(12);(11)为该结点的多条流出顺序流分别赋予一个子令牌,这些子令牌都是由该结点所生成的,其中,若该结点有多条流入的顺序流,则生成的这些令牌都是(7)或(8)中通过合并或组合所得到的令牌的子令牌;若该结点只有一条流入的顺序流,则这些生成的令牌都是该流入顺序流所携带的令牌的子令牌;若该结点没有流入的顺序流,则这些生成的令牌都是(4)中所生成的令牌的子令牌;(12)判断是否还有在本次处理中未处理的结点,若为是,则执行步骤(2),否则执行步骤(13);(13)判断是否业务流程图中所有的顺序流都拥有了令牌,若为是,则执行步骤(14),否则执行步骤(1);(14)分析过程结束。
参见图1和图3,第四步,标记业务流程图读取业务流程图所包含的所有结点的列表并对业务流程图中所有的结点和顺序流的令牌分别进行令牌处理,令牌处理包括对令牌按定义的名称和编号进行的合并和/或组合。具体执行如下步骤1)读取业务流程图所包含的所有结点的列表;2)从列表中读取下一个未处理的结点;3)若当前结点没有流入的顺序流,则执行步骤4),若当前结点有且仅有一条流入的顺序流,则执行步骤8);若当前结点有多条流入的顺序流,则执行步骤15);4)若当前结点有且仅有一条流出的顺序流,则执行步骤5);若当前结点有多条流出的顺序流,则执行步骤6);5)若当前结点有且仅有一条流出的顺序流时,将当前结点判定为是一个块的起点,当前结点的唯一流出顺序流所携带的令牌最后经过的结点判定为该块的终点,位于此两结点之间的其他结点,即从起点出发沿顺序流行走到终点的过程中所可能经过的所有结点判定为在该块中,该块的模式为“正常”,执行步骤20);6)若当前结点有多条流出的顺序流时,首先获得在当前结点处生成的令牌,通过该令牌的属性数据得到当前结点在后面流程中的对应结点,即令牌的途经结点列表中位于当前结点之后的下一个结点,也即从该令牌分支出的各个子令牌下一次重新合并为该令牌处;7)将当前结点判定为是一个块的起点,当前结点的对应结点判定为是该块的终点,位于此两结点之间的其他结点判定为在该块中,并判定该块的相应模式,执行步骤20);8)若当前结点没有流出的顺序流,则执行步骤9);若当前结点有且仅有一条流出的顺序流,则执行步骤10);若当前结点有多条流出的顺序流,则执行步骤11);9)若当前结点没有流出的顺序流时,则判定该结点是一个块的终点并执行步骤20);10)若当前结点有且仅有一条流出的顺序流时,则判定该结点在一个“正常”块中并执行步骤20);11)若当前结点是一个循环结构的起点,即当前结点的某一条流出顺序流又指回到了位于上游,在当前结点之前的某个结点,则执行步骤12),否则执行步骤13);12)将指向上游的顺序流所指向的结点判定为是一个块的起点,当前结点判定为是该块的终点,位于此两结点之间的其他结点判定为在该块中,该块的模式为“循环”,执行步骤20);
13)首先获得当前结点的唯一流入顺序流所携带的令牌,通过该令牌的属性数据得到当前结点在后面流程中的对应结点,即令牌的途经结点列表中位于当前结点之后的下一个结点,也即从该令牌分支出的各个子令牌下一次重新合并为该令牌处;14)将当前结点判定为是一个块的起点,当前结点的对应结点判定为是该块的终点,位于此两结点之间的其他结点判定为在该块中,并判定该块的相应模式;执行步骤20);15)若当前结点没有流出的顺序流,则执行步骤16);若当前结点有且仅有一条流出的顺序流,则执行步骤7);若当前结点有多条流出的顺序流,则执行步骤18);16)若当前结点没有流出的顺序流时,判定该结点是一个块的终点,执行步骤20);17)若当前结点有且仅有一条流出的顺序流时,判定该结点是一个块的终点,执行步骤20);18)若当前结点有多条流出的顺序流时,首先获得在当前结点处通过合并或组合所得到的令牌,通过该令牌的属性数据得到当前结点在后面流程中的对应结点,即令牌的途经结点列表中位于当前结点之后的下一个结点,也即从该令牌分支出的各个子令牌下一次重新合并为该令牌处;19)将当前结点判定为是一个块的起点,当前结点的对应结点判定为是该块的终点,位于此两结点之间的其他结点判定为在该块中,并判定该块的相应模式;执行步骤20);20)判断是否还有在本次处理中未处理的结点,若为是,则执行步骤2);21)判断是否业务流程图中所有的结点都已确定了其所处的块,若为是,则执行步骤22),否则执行步骤1);22)标记过程结束。
参见图1和图4,第五步,转换业务流程图读取业务流程图所包含的所有结点的列表并对业务流程图中所有的块分别进行转换处理。具体执行如下步骤1)读取业务流程图所包含的所有结点的列表;2)从列表中读取下一个未处理的结点;3)若当前结点是一个块的起点,则执行步骤4);若当前结点是一个块的终点,则执行步骤5);若当前结点在一个块中,则执行步骤6);4)若当前结点是一个块的起点,根据该块的模式,创建对应的业务流程执行语言结构活动元素,并将其放入到作为结果输出的业务流程执行语言文件中;该块内的所有结点所转换成的业务流程执行语言元素将全部被放入该结构活动元素中;执行步骤7);
5)若当前结点是一个块的终点时,判定该块内的结点已经全部转换完毕,执行步骤7);6)根据当前结点的类型及属性信息,将结点转换为相应的业务流程执行语言元素,并将被转换后的元素放入到与元素所在块对应的结构活动元素中;7)判断是否还有在本次处理中未处理的结点,若为是,则执行步骤2);8)判断是否业务流程图中所有的结点都已转换完毕,若为是,则执行步骤9),否则执行步骤1);9)转换过程结束,输出最终得到的业务流程执行语言文件。
第六步,获取最终得到的业务流程执行语言文件。
下面说明应用本发明将业务流程图转换为执行语言的方法执行业务流程的实施例。
实施例一零售商流程本实施例是零售商处理一次用户订单的简化示例,其流程可以表述如下流程从收到客户的购买订单的消息开始;然后接着发送给客户一个确认凭据;将订单的数据记入数据库中;向仓库发出提货请求,并等待仓库回应;接收到仓库的回应(有货/无货)后,将订单的处理结果返回给客户,并更新订单在数据库中的状态;如果仓库无货,则将该订单分配给某位销售人员让其与客户直接沟通,如果仓库有货则什么也不做;最后整个流程结束。
参见图5所示的零售商流程的业务流程图,使用本方法对该业务流程图进行转换的各步骤如下(一)分析过程1.在“接收用户订单”开始事件处生成一个令牌,该令牌编号为1;2.从“接收用户订单”开始事件之后,到“仓库有货?”互斥门之前,这之间的所有图形元素都是只有一个流入顺序流和一个流出顺序流,所以在这些结点处都不会生成新的令牌,而只有令牌1在它们之间传递;3.在“仓库有货?”互斥门处,令牌1将分支为两个子令牌,编号为1.1和1.2;4.在“订单处理结束”结束事件处,令牌1.1和1.2合并回原来的父令牌1。
(二)标记过程
1.从“接收用户订单”开始事件到“更新订单在数据库中的状态”任务之间的部分被标记为一个块,“接收用户订单”开始事件是块的开始,“更新订单在数据库中的状态”任务是块的结束,块的模式为“正常”;2.从“仓库有货?”互斥门到“订单处理结束”结束事件之间的部分被标记为一个块,“仓库有货?”互斥门是块的开始,“订单处理结束”结束事件是块的结束,块的模式为“普通条件选择”;(三)转换过程1.首先为整个流程创建一个过程元素(<process>),转换得到的所有业务流程执行语言元素都将放入该过程元素中;对应代码如下<process name="seller"targetNamespace="http://acm.org/samples"suppressJoinFailure="yes"xmlns:tns="http://acm.org/samples"xmlns=”http://schemas.xmlsoap.org/ws/2003/03/business-process/”xmlns:bpws="http://schemas.xmlsoap.org/ws/2003/03/business-process/">
……</process>
2.创建一个序列元素(<sequence>),放入过程元素中(该序列元素在后文中称为主序列元素);对应代码如下<sequence name="main">
……</sequence>
3.从“接收用户订单”开始事件开始,到“更新订单在数据库中的状态”任务为止的块的模式为“正常”,应为该块创建一个序列元素,但因为流程整体是一个线性流程,且已经为流程创建了主序列元素,可以用主序列元素来控制块中各任务的执行顺序,所以此处无需再创建序列元素;
4.“接收用户订单”开始事件将被转换为接收元素(<receive>),并放入主序列元素中;块内其它的元素也被转换为对应的业务流程执行语言元素;对应代码可见后文业务流程执行语言文件的完整代码;5.从“仓库有货?”互斥门开始到“订单处理结束”结束事件为止的块的模式为“普通条件选择”,所以为该块创建一个条件选择元素(<switch>),放入主序列元素中;条件选择的各个分支分别被转换为条件选择元素中的条件分支元素(<case>)和默认分支元素(<otherWise>);对应代码如下<switch name="checkResp"><casecondition="bpws:getVariableData("poResponse","payload","/tns:POMsg/tns:action")"reject""><sequence><invoke name="salesFollowup"partnerLink="taskMgr"portType="tns:WorkflowTaskManager"operation="create"inputVariable="task"/></sequence></case><otherwise/></switch>
最终得到的业务流程执行语言文件的完整代码如下<process name="seller"targetNamespace="http://acm.org/samples"suppressJoinFailure="yes"xmlns:tns="http://acm.org/samples"xmlns=”http://schemas.xmlsoap.org/ws/2003/03/business-process/”xmlns:bpws="http://schemas.xmlsoap.org/ws/2003/03/business-process/"><sequence name="main"><receive name="receiveInput"partnerLink="consumer"portType="tns:Retailer"createInstance="yes"operation="sendPO"variable="po"><correlations><correlation set="poset"initiate="yes"/></correlations></receive><invoke name="callbackClient"partnerLink="consumer"portType="tns:RetailerCallback"operation="poReceipt"inputVariable="po"/><invoke name="writePOToDB"partnerLink="retailerDB"portType="tns:RetailerDB"operation="createPO"inputVariable="po"/><invoke name="sendPOToWH"partnerLink="warehouse"portType="tns:Warehouse"operation="sendPO"inputVariable="po"/><receive createInstance="no"name="receiveWHResponse"partnerLink="warehouse"portType="tns:WarehouseCallback"operation="onResult"variable="poResponse"><correlations><correlation set="poset"initiate="no"/></correlations></receive><invoke name="responseToConsumer"partnerLink="consumer"portType="tns:RetailerCallback"operation="poResult"inputVariable="poResponse"/><invoke name="updateDB"partnerLink="retailerDB"portType="tns:RetailerDB"operation="updatePO"inputVariable="poResponse"/><switch name="checkResp"><casecondition="bpws:getVariableData("poResponse","payload","/tns:POMsg/tns:action")"reject""><sequence><invoke name="salesFollowup"partnerLink="taskMgr"portType="tns:WorkflowTaskManager"operation="create"inputVariable="task"/></sequence></case><otherwise/></switch></sequence></process>
实施例二 贷款申请处理流程本例是银行处理一次贷款申请的简化示例,其流程可以表述如下流程从收到客户的贷款申请的消息开始;如果用户申请贷款的金额小于10000元,则需查看申请者的信用情况,对向其贷款的风险进行评估;如果风险较低,则同意贷款申请,否则进行贷款论证;如果用户申请贷款的金额大于10000元,则直接进行贷款论证;最后向用户发送同意或拒绝贷款申请的回应,整个流程结束。
参见图6所示的贷款申请流程的业务流程图,使用本方法对该业务流程图进行转换的具体步骤如下(一)分析过程1.在“接收贷款申请”开始事件处生成一个令牌,该令牌编号为1;2.在“金额大于等于一万元?”互斥门处,令牌1将分支为两个子令牌,编号分别为1.1和1.2;3.在“贷款风险高?”互斥门处,令牌1.1将分支为两个子令牌,编号分别1.1.1和1.1.2;4.在“贷款论证”任务处,将生成一个组合令牌,编号为(1.2,1.1.1);5.在“向用户发送回应”结束事件处,令牌1.1.2和(1.2,1.1.1)将合并为最初的父令牌1。(令牌1.1.2和令牌1.1.1将先合并为令牌1.1,然后和令牌1.2合并为令牌1)(二)标记过程1.从“接收贷款申请”开始事件到“向用户发送回应”结束事件之间的部分被标记为一个块,“接收贷款申请”开始事件是块的开始,“向用户发送回应”结束事件是块的结束,块的模式为“带链接的并发”,因为在该块中不同的分支在到达块结尾之前存在交叉;(三)转换过程1.首先为整个流程创建一个过程元素(<process>),转换得到的所有业务流程执行语言元素都将放入该过程元素中;对应代码如下<process name="loanApprovalProcess"suppressJoinFailure="yes"targetNamespace=”http://acme.com/loanprocessing”xmlns="http://schemas.xmlsoap.org/ws/2003/03/business-process/"xmlns:apns="http://tempuri.org/services/loanapprover"
xmlns:asns="http://tempuri.org/services/loanassessor"xmlns:bpws="http://schemas.xmlsoap.org/ws/2003/03/business-process/"xmlns:lns="http://loans.org/wsdl/loan-approval"xmlns:loandef="http://tempuri.org/services/loandefinitions"xmlns:xsd="http://www.w3.org/2001/XMLSchema">
2.创建一个序列元素(<sequence>),放入过程元素中(该序列元素在后文中称为主序列元素);对应代码如下<sequence name="main">
……</sequence>
3.从“接收贷款申请”开始事件开始,到“向用户发送回应”结束事件结束的块的模式是“带链接的并发”,所以为该块创建一个并发元素(<flow>),放入主序列元素中;对应代码如下<flow>
……</flow>
4.块中的各个业务流程图元素都将被被转换为对应的业务流程执行语言元素,并放入到并发元素中;各个业务流程图元素之间执行的先后关系被转换为链接元素(<link>),放入到并发元素中,同时,在对各个业务流程图元素进行转换所得到的业务流程执行语言元素中,必须加入起始元素(<source>)和目标元素(<target>),以控制执行的依赖次序;下面是“接收贷款申请”开始事件和“风险评估”任务的对应代码<links>
<link name="receive-to-assess"/>
<link name="assess-to-setMessage"/>
<link name="assess-to-approval"/>
……</links>
<receive createInstance="yes"name="receivel"operation="approve"partnerLink="customer"portType="apns:loanApprovalPT"variable="request">
<source linkName="receive-to-approval"transitionCondition="bpws:getVariableData(′request′,′amount′)>=10000"/>
<source linkName="receive-to-assess"transitionCondition="bpws:getVariableData(′request′,′amount′)<10000"/>
</receive>……<invoke input Variable="request"name="invokeAssessor"operation="check"outputVariable="riskAssessment"partnerLink="assessor"portType="asns:riskAssessmentPT">
<target linkName="receive-to-assess"/>
<source linkName="assess-to-setMessage"transitionCondition="bpws:getVariableData(′riskAssessment′,′risk′)=′low/>
<source linkName="assess-to-approval"transitionCondition="bpws:getVariableData(′riskAssessment′,′risk′)!=′low/></invoke>
其他业务流程图元素的对应代码可见后文业务流程执行语言文件的完整代码。
最终得到的业务流程执行语言文件的完整代码如下< xml version="1.0"encoding="UTF-8" ><process name="loanApprovalProcess"suppressJoinFailure="yes"targetNamespace=”http://acme.com/loanprocessing”xmlns="http://schemas.xmlsoap.org/ws/2003/03/business-process/"xmlns:apns="http://tempuri.org/services/loanapprover"xmlns:asns="http://tempuri.org/services/loanassessor"xmlns:bpws="http://schemas.xmlsoap.org/ws/2003/03/business-process/"xmlns:lns="http://loans.org/wsdl/loan-approval"xmlns:loandef="http://tempuri.org/services/loandefinitions"xmlns:xsd="http://www.w3.org/2001/XMLSchema"><partnerLinks>
<partnerLink myRole="approver"name="customer"partnerLinkType="lns:loanApprovalLinkType"/>
<partnerLink name="approver"partnerLinkType="lns:loanApprovalLinkType"partnerRole="apptover"/>
<partnerLink name="assessor"partnerLinkType="lns:riskAssessmentLinkType"partnerRole="assessor"/></partnerLinks><variables>
<variable messageType="loandef:creditInformationMessage"name="request"/><variable messageType="asns:riskAssessmentMessage"name="riskAssessment"/><variable messageType="apns:approvalMessage"name="approvalInfo"/>
<variable messageType="loandef:loanRequestErrorMessage"name="error"/></variables><faultHandlers>
<catch faultName="apns:loanProcessFault"fault Variable="error">
<reply faultName="apns:loanProcessFault"operation="approve"partnerLink="customer"portType="apns:loanApprovalPT"variable="error"/>
</catch></faultHandlers><flow>
<links>
<link name="receive-to-approval"/>
<link name="receive-to-assess"/>
<link name="approval-to-reply"/>
<link name="assess-to-setMessage"/>
<link name="assess-to-approval"/>
<link name="setMessage-to-reply"/>
</links>
<receive createInstance="yes"name="receivel"operation="approve"partnerLink="customer"portType="apns:loan ApprovaIPT"variable="request">
<source linkName="receive-to-approval"transitionCondition="bpws:getVariableData(′request′,′amount′)>=10000"/>
<source linkName="receive-to-assess"transitionCondition="bpws:getVariableData(′request′,′amount′)<10000"/>
</receive>
<invoke inputVariable="request"name="invokeapprover"operation="approve"outputVariable="approvalInfo"partnerLink="approver"portType="apns:loanApprovalPT">
<target linkName="receive-to-approval"/>
<target linkName="assess-to-approval"/>
<source linkName="approval-to-reply"/>
</invoke>
<invoke inputVariable="request"name="invokeAssessor"operation="check"outputVariable="riskAssessment"partnerLink="assessor"portType="asns:riskAssessmentPT">
<target linkName="receive-to-assess"/>
<source linkName="assess-to-setMessage"transitionCondition="bpws:getVariableData(′riskAssessment′,′risk′)=′low/>
<source linkName="assess-to-approval"transitionCondition="bpws:getVariableData(′riskAssessment′,′risk′)!=′low/></invoke><reply name="reply"operation="approve"partnerLink="customer"portType="apns:loanApprovalPT"variable="approvalInfo">
<target linkName="approval-to-reply"/>
<target linkName="setMessage-to-reply"/></reply><assign name="assign">
<target linkNme="assess-to-setMessage"/>
<source linkName="setMessage-to-reply"/>
<copy>
<from expression=approved/>
<to part="accept"variable="approvalInfo"/>
</copy></assign></flow></process>
权利要求
1.一种将业务流程图转换为执行语言的方法,该方法通过计算机将所述业务流程图转换为能够实际运行的业务流程执行语言,实现企业业务流程的可执行环境,其特征在于,该方法执行如下步骤(1)划分所述业务流程图中结点的类型并定义所述结点的名称和编号方式、块的模式以及所述结点与所述业务流程执行语言中语言元素的对应关系和所述块的模式与所述业务流程执行语言中结构活动元素的对应关系;(2)读入业务流程图文件,并转换为内存表示;(3)分析所述业务流程图读取所述业务流程图所包含的所有所述结点的列表并按步骤(1)中划分的结点类型对所述业务流程图中所有的结点和顺序流分别进行令牌创建;(4)标记业务流程图读取所述业务流程图所包含的所有所述结点的列表并对所述业务流程图中所有所述结点和顺序流的所述令牌分别进行令牌处理,所述令牌处理包括对所述令牌按所述步骤(1)中定义的名称和编号进行合并和/或组合;(5)转换业务流程图读取所述业务流程图所包含的所有所述结点的列表并对所述业务流程图中所有的块分别进行转换处理,所述转换处理包括按所述步骤(1)中所述结点与所述业务流程执行语言中语言元素的对应关系和所述块的模式与所述业务流程执行语言中结构活动元素的对应关系将所述结点分别转换为对应的业务流程执行语言元素;(6)转换过程结束,获取最终得到的业务流程执行语言文件。
2.根据权利要求1所述的方法,其特征在于,其中在所述步骤(3)中所述令牌创建的方法执行如下步骤1)读取所述业务流程图所包含的所有所述结点的列表;2)从所述列表中读取下一个未处理的所述结点;3)若该结点没有流入的顺序流,则执行步骤4),否则执行步骤5);4)为该结点创建一个原子令牌,执行步骤9);5)判断流入该结点的所有顺序流是否均已携带有所述令牌,若为是,执行步骤6),否则执行步骤2);6)判断流入该结点的所有所述令牌是否能够合并,若流入该结点的所有顺序流所携带的所述令牌由同一个结点生成的,且这些令牌的数目与该所述结点所生成的所述令牌数目相同,则将这些令牌合并为原来的父令牌,并执行步骤7),否则执行步骤8);7)将流入该结点的所有顺序流所携带的令牌分段合并为它们的父令牌,执行步骤9);8)当流入该结点的所有顺序流所携带的令牌无法合并为一个父令牌时,这些令牌将被堆放到一起组合成一个组合令牌;9)若该结点只有一条流出的顺序流,则执行步骤10),否则执行步骤11);10)将7)或8)中通过合并或组合所得到的所述令牌,或4)中所生成的所述令牌赋予该结点的唯一流出顺序流,执行步骤12);11)为该结点的多条流出顺序流分别赋予一个子令牌,这些子令牌都是由该结点所生成的,其中,若该结点有多条流入的顺序流,则生成的这些令牌都是7)或8)中通过合并或组合所得到的令牌的子令牌;若该结点只有一条流入的顺序流,则这些生成的令牌都是该流入顺序流所携带的令牌的子令牌;若该结点没有流入的顺序流,则这些生成的令牌都是4)中所生成的令牌的子令牌;12)判断是否还有在本次处理中未处理的所述结点,若为是,则执行步骤2),否则执行步骤13);13)判断是否所述业务流程图中所有的顺序流都拥有了所述令牌,若为是,则执行步骤14),否则执行步骤1);14)分析过程结束。
3.根据权利要求1或2所述的方法,其特征在于,其中在所述步骤(4)中所述令牌处理的方法执行如下步骤1)读取所述业务流程图所包含的所有所述结点的列表;2)从所述列表中读取下一个未处理的结点;3)若当前结点没有流入的顺序流,则执行步骤4),若所述当前结点有且仅有一条流入的顺序流,则执行步骤8);若所述当前结点有多条流入的顺序流,则执行步骤15);4)若所述当前结点有且仅有一条流出的顺序流,则执行步骤5);若所述当前结点有多条流出的顺序流,则执行步骤6);5)若所述当前结点有且仅有一条流出的顺序流时,将所述当前结点判定为是一个块的起点,所述当前结点的唯一流出顺序流所携带的所述令牌最后经过的结点判定为是该块的终点,位于此两结点之间的其他结点,即从起点出发沿顺序流行走到终点的过程中所可能经过的所有所述结点判定为在该块中,该块的模式为“正常”,执行步骤20);6)若所述当前结点有多条流出的顺序流时,首先获得在所述当前结点处生成的所述令牌,通过该令牌的属性数据得到所述当前结点在后面流程中的对应结点,即所述令牌途经结点列表中位于所述当前结点之后的下一个结点,也即从该令牌分支出的各个子令牌下一次重新合并为该令牌处;7)将所述当前结点判定为是一个块的起点,所述当前结点的对应结点判定为是该块的终点,位于此两结点之间的其他结点判定为在该块中,并判定该块的相应模式,执行步骤20);8)若所述当前结点没有流出的顺序流,则执行步骤9);若所述当前结点有且仅有一条流出的顺序流,则执行步骤10);若所述当前结点有多条流出的顺序流,则执行步骤11);9)若所述当前结点没有流出的顺序流时,则判定该结点是一个块的终点并执行步骤20);10)若所述当前结点有且仅有一条流出的顺序流时,则判定该结点在一个“正常”块中并执行步骤20);11)若所述当前结点是一个循环结构的起点,即所述当前结点的某一条流出顺序流又指回到了位于上游,在所述当前结点之前的某个结点,则执行步骤12),否则执行步骤13);12)将指向上游的顺序流所指向的所述结点判定为是一个块的起点,所述当前结点判定为是该块的终点,位于此两结点之间的其他所述结点判定为在该块中,该块的模式为“循环”,执行步骤20);13)首先获得所述当前结点的唯一流入顺序流携带的所述令牌,通过该令牌的属性数据得到所述当前结点在后面流程中的对应结点,即所述令牌的途经结点列表中位于所述当前结点之后的下一个结点,也即从该令牌分支出的各个子令牌下一次重新合并为该令牌处;14)将所述当前结点判定为是一个块的起点,所述当前结点的对应结点判定为是该块的终点,位于此两结点之间的其他所述结点判定为在该块中,并判定该块的相应模式;执行步骤20);15)若所述当前结点没有流出的顺序流,则执行步骤16);若所述当前结点有且仅有一条流出的顺序流,则执行步骤7);若所述当前结点有多条流出的顺序流,则执行步骤18);16)若所述当前结点没有流出的顺序流时,判定该结点是一个块的终点,执行步骤20);17)若所述当前结点有且仅有一条流出的顺序流时,判定该结点是一个块的终点,执行步骤20);18)若所述当前结点有多条流出的顺序流时,首先获得在所述当前结点处通过合并或组合所得到的所述令牌,通过该令牌的属性数据得到所述当前结点在后面流程中的对应结点,即所述令牌的途经结点列表中位于所述当前结点之后的下一个结点,也即从该令牌分支出的各个子令牌下一次重新合并为该令牌处;19)将所述当前结点判定为是一个块的起点,所述当前结点的对应结点判定为是该块的终点,位于此两结点之间的其他结点判定为在该块中,并判定该块的相应模式;执行步骤20);20)判断是否还有在本次处理中未处理的所述结点,若为是,则执行步骤2);21)判断是否所述业务流程图中所有的所述结点都已确定了其所处的块,若为是,则执行步骤22),否则执行步骤1);22)标记过程结束。
4.根据权利要求3所述的方法,其特征在于,其中在所述步骤(5)中执行如下步骤1)读取所述业务流程图所包含的所有所述结点的列表;2)从所述列表中读取下一个未处理的所述结点;3)若当前结点是一个块的起点,则执行步骤4);若所述当前结点是一个块的终点,则执行步骤5);若所述当前结点在一个块中,则执行步骤6);4)若所述当前结点是一个块的起点,根据该块的模式,创建对应的业务流程执行语言结构活动元素,并将其放入到作为结果输出的业务流程执行语言文件中;该块内的所有结点所转换成的所述业务流程执行语言元素将全部被放入该结构活动元素中;执行步骤(7);5)若所述当前结点是一个块的终点时,判定该块内的结点已经全部转换完毕,执行步骤7);6)根据所述当前结点的类型及属性信息,将所述结点转换为相应的所述业务流程执行语言元素,并将被转换后的语言元素放入到与其所在块对应的结构活动元素中;7)判断是否还有在本次处理中未处理的所述结点,若为是,则执行步骤2);8)判断是否所述业务流程图中所有的所述结点都已转换完毕,若为是,则执行步骤9),否则执行步骤1);9)转换过程结束,输出最终得到的所述业务流程执行语言文件。
全文摘要
本发明提供了一种将业务流程图转换为执行语言的方法,采用基于令牌(Token)的分析技术为每一条顺序流赋予一个令牌,当流入一个结点的顺序流多于一条时,这些顺序流所携带的令牌将尝试合并;当流出一个结点的顺序流多于一条时,将为这些顺序流产生子令牌,并根据令牌的分支和合并,以及令牌的属性信息将复杂的业务流程图划分为不同的块,并获知其结构特点,从而最终将块转化为业务流程执行语言中的对应元素。该方法的优点是能够对复杂的业务流程图进行精确地分析和恰当地分块,使转换保持语义上的基本一致和结构上的近似。使用本方法转换得到的业务流程执行语言结果已通过了主流的执行引擎的检验,能够实际用于企业业务执行的真实环境。
文档编号G06F9/44GK1828532SQ20061006663
公开日2006年9月6日 申请日期2006年4月17日 优先权日2006年4月17日
发明者潘志勇, 王新强 申请人:莱瑞世(北京)软件有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1