BPMN 简介

      

      隔了这么久,才又发了篇总结,真是不好意思啊。本来一直都想写有关BPMN,XPDL,BPEL方面的总结,也一直在准备。想先写XPDL,可总是没时间。没想到,因为要给同事做次讲座,逼的我先总结了BPMN。
      写在这里,主要是为了个人的一个总结。水平不高,参考了好多文献。希望对大家有帮助。     

      ^_^,还是先写参考文献吧:最重要当然还是BPMI的官方文档了,还有几篇以前学习的时候下的PDF,不知道来自那里了,这里就不标注了。
      http://se.csai.cn/ANALYZE/200712051042061988.htm
      http://www.javaresearch.org/article/39565.htm
      http://www.bpmn.org 


      概述


      BPMN,即Business Process Modeling Notation,业务流程建模符号。是用一种类似于流程图的图表形式来描述业务流程的一种方法。BPMN最初是由业务流程管理计划组织(Business Process Management Initiative BPMI)制定和发展起来的,目前由对象管理组织(Object Management Group OMG)来维护管理。BPMN从2002开始制定,到2004年5月发布了第一个版本。目前版本是1.1,好像2.0正在制定中。


      在BPMN出现之前,关于流程设计的符号并没有统一的标准,各个大的流程模型设计公司都有自己流程定义符号。这样在理解和沟通上就给大家造成了不便。所以BPMI组织就推出了BPMN这个标准,来统一业务流程描述符号。BPMN为大家提供了一种标准的、易读的定义和分析公开的和隐私的业务流程的方法。同时,BPMN也为管理人员、分析人员和程序开发人员提供了一种简单易懂的标注符号标准。从而消除公司或企业内部各个部门以及公司与公司之间的沟通障碍,为大家建立起一道沟通的桥梁。同时,业务流程建模符号还能够通过对各个业务流程的运行而设计的XML(扩展标记语言)文档加上了一种普通的符号使得该文档更加的直观易读。

      BPMN是一种图形化的建模工具,它的使用者主要是不懂IT技术的业务人员,有点像我们使用的UML。XPDL是一种基于XML的过程定义语言,主要是为了不同系统间有一个统一的流程定义语言,它像接口。而BPEL是业务流程执行语言,它是给流程引擎去直接执行的。它更像一种编程语言,让机器去运行。三者之间具体的区别,有时间我会另写一篇文章的。总的说来,BPMN是建模的,XPDL,BPEL是模型的实现。BPMN比后两者有更高的抽象。


      基本元素


      BPMN是以业务流程图(business process diagram BPD)为核心的。每个BPD根据提供的模型类型不同可以有三种基本的类型:Collaborative (Global) B2B Processes 协作图,Internal (Private) Business Processes 独立图,Public (Abstract) Process 抽象图。前者主要用来描述两个以上的业务实体或者说是参与者之间的交互,协作的情况。而后者主要关注的是某一个参与者内部业务流程的流转。而抽象图则是用来描述内部业务流程与外界的交互,关注点在交互,内部流程中不与外界交互的活动将被忽略。


      BPMN是以BPD为中心,规定了一些统一的图形元素。BPMN有四种基本元素。Flow Objects,Connecting Objects,Swimlanes,Artifacts.


      Flow Objects是BPMN的核心元素。它又包括:Event,Activity,Gateway。


      Event:Start Event,Intermediate Event,End Event三种。Event是指业务流程的运行过程中发生的事件。这些event会影响到流程的状态。一个event通常会有某种trigger或result。Trigger就是触发器,当有个消息到来,或者某个事情发生,比如说时间到了,都可以是一个Trigger,来触发该event。而Result就是该event发生后的一个结果,比如说发出一个消息等等。


      Activity,活动。就是业务流程中基本的业务单元。每一个activity代表一个特定的业务,比如说登陆,注销等等都可以是一个activity。Activity有两种类型:Task,Sub-process。Task很明显就是单一的业务活动。而sub-process是一个复合的业务活动,在该活动中存在一个子业务流程。相信学编程的人都可以理解这个概念。


      Gateway,网关。用来表示流程的分支和聚合。Gateway在BPMN是个很复杂的概念。它包括好几个种类:Data-based exclusive,Event-based exclusive,Inclusive,Complex,Parallel。不同的gateway的组合使用有时候可能会产生合法性问题。所以在使用的时候我们要格外小心。


      连接对象Connecting Objects。在一个业务流程图中,是使用连接对象把图中的各个独立的业务活动连接起来组成一个完成的含有语义的业务流程的。有三种连接对象:Sequence Flow,Message Flow,Association。
      Sequence Flow 序列流。用来表示业务流程中被执行的业务单元的执行顺序。
      Message Flow 消息流。用来表示不同业务流程参与者之间的消息交互的信息流。
      Association 关联。用来把对某个业务活动的输入输出的描述与这个业务活动联系起来。


      Swimlanes 甬道(泳道?)呵呵,也不知道用那个中文词比较合适。Swimlanes是用来区分不同部门或者不同参与者的功能和职责的。Swimlanes也包含两种类型:Pool,Lane。


      Pool代表流程中的一个参与者。它可以作为一个容器来包含其他图形元素,用以和其他参与者(其他Pool)来区分。在一个业务流程图中使用Pool主要是为了显示一个业务中不同的参与者之间的交互情况。每个Pool中的activity通常都有自身的流程。所以,Sequence Flow是不能穿越Pool的边界,而Message Flow就可以。它被用来表示两个不同流程之间消息的交互。


      Lane是Pool的子划分。它可以垂直也可以水平,用来对活动进行组织和分类。Lane常被用来将活动按角色划分,流程可以在一个Pool里跨Lane流转,也就是说Sequence Flow可以穿过Lane的边界。这种情况下,Message Flow就不可以。


      Artifacts 怎么翻译呢?一直找不到确切的中文意思,这里就直接使用英文吧。Artifacts是流程图中的扩展符号。它提供方法使得流程图可以具有描述更加详细活动的上下文的途径。Artifacts包括Data Object,Group,Annotation。
      Data Object 用来描述业务活动所需或者产生的数据。他们可以用Association与Activity连接起来。
      Group 组。用来描述和解释的。
      Annotation 注释。提供一些附加的文本信息给流程图的使用者和阅读者。

     

      BPD的合法性

      BPMN是有向图,在绘制时,会因为不小心造成业务流程模型无效,或者说是个不合法的模型。更高级的,我们有时会要求业务流程有一些特性,比如说时间上的优化。所以我们要对BPMN图进行合法性和有效性检查。这也是个难题。有过很多方法,我就无法展开介绍了。就合法性,我举个小例子。比如说我们在使用Gateway时就有可能出错。在正常的线型业务流程中使用了Gateway,就会出现分支,出现了分支,就有可能会出现死结或者无限循环,使得流程无法正常结束。气死了,不知道如何从PPT中考图,这里就无法描述了。最简单的吧,就是出现了分支,这个分支又指向了Gateway的前面的业务活动,如果这个Gateway是无条件转向的,那就会造成无限循环。

      BPMN to BPEL

      BPMN是图形化来表示业务流程的,它主要是为了人们的阅读。要想让BPMN所画出来的流程图能够被工作流引擎,特别是BPEL引擎所执行。我们就需要把BPMN的BPD图转化成BPEL。这种转化在BPMN中的规范中已经有介绍了。这里就不多说了。但在具体的转化过程中,还存在很多问题。这主要是因为BPD是一种有向图,而BPEL是一种严格嵌套的块结构执行语言。它们的转化就是要把一个有向图转化成嵌套结构。学过图论的同学,都会知道,这有一定的难度。当然也会有不同的办法去解决它。以后有机会我会详细介绍这部分的。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您可以使用Camunda Model API将BPMN模型(bpmnModel)转换为BPMN文件(bpmn)。以下是使用Camunda Model API在Java中实现此转换的示例代码: ```java import org.camunda.bpm.model.bpmn.Bpmn; import org.camunda.bpm.model.bpmn.BpmnModelInstance; import org.camunda.bpm.model.xml.ModelParseException; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; public class BpmnModelToBpmnConverter { public static void main(String[] args) { // 加载BpmnModelInstance(假设已经从其他地方获取到了bpmnModel实例) BpmnModelInstance bpmnModel = ...; // 将BpmnModelInstance转换为BPMN文件字节数组 byte[] bpmnBytes = null; try { bpmnBytes = Bpmn.convertToString(bpmnModel).getBytes("UTF-8"); } catch (IOException e) { System.err.println("转换BPMN模型时出现错误:" + e.getMessage()); e.printStackTrace(); } // 将BPMN文件字节数组写入文件 try { FileOutputStream outputStream = new FileOutputStream(new File("path/to/output.bpmn")); outputStream.write(bpmnBytes); outputStream.close(); System.out.println("BPMN文件转换成功!"); } catch (IOException e) { System.err.println("写入BPMN文件时出现错误:" + e.getMessage()); e.printStackTrace(); } } } ``` 请替换`bpmnModel`变量为您自己的BpmnModelInstance对象,并设置输出BPMN文件的路径`path/to/output.bpmn`。执行此代码后,您将获得一个包含BPMN模型的BPMN文件。 这是使用Camunda Model API将BPMN模型转换为BPMN文件的一种方法。还有其他方法可以使用不同的BPMN建模库或工具来完成相同的任务。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值