如何扩展 BPMN 2.0

Posted

技术标签:

【中文标题】如何扩展 BPMN 2.0【英文标题】:How to extend BPMN 2.0 【发布时间】:2012-07-11 11:18:59 【问题描述】:

目前,我正在研究扩展 BPMN 的方法。我想创建一个新的任务类型,它的属性比任务少,还有一些非 BPMN 属性和一种新类型的池。

直到现在我看到人们提到了两种方法,使用扩展点和使用外部模式。不幸的是,在互联网上,我找不到那么多资源来广泛理解这些方法。

我从这些方法中了解到的:

扩展点: BPMN 引擎供应商(Aktiviti、jBPM 等)提供了一些标准扩展点。例如,在 Activiti 中有一个自定义服务任务,可以使用用户所需的属性进行扩展,但如果这个新创建的扩展任务可以部署在 Aktiviti 工作流引擎上,我没有找到任何资源,而且很高兴看到新的 BPMN此扩展的架构。

使用外部架构: 在外部架构中定义所需属性并从 Semantic.xsd 引用此架构。在这种情况下,我们还需要调整我们的工作流引擎,但它比我之前提到的方法更灵活,还是我遗漏了什么?

唯一不清楚的是这个方法没有直接扩展任务定义,所以这些属性可以被 BPMN 中的每个元素使用?

一个示例外部架构是:

    <?xml version="1.0" encoding="UTF-8"?>
    <xsd:schema elementFormDefault="qualified" attributeFormDefault="unqualified"
    xmlns="http://myproject.org//bpmn/extensions/NEWTask"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL"
    xmlns:exvar="http://myproject.org/externalDefs"
    targetNamespace="http://myproject.org//bpmn/extensions/NEWTask"
    > 
    <xsd:import namespace="http://www.omg.org/spec/BPMN/20100524/MODEL"             schemaLocation="BPMN20.xsd"/>
    <xsd:import schemaLocation="externalDefs.xsd" namespace="http://myproject.org/externalDefs" />
    <xsd:complexType name="tProperty1" abstract="false">
        <xsd:sequence>
            <xsd:any namespace="##any" processContents="lax" minOccurs="0" />
        </xsd:sequence>
    </xsd:complexType>
        <xsd:group id="tNEWTask" name="tNEWTask">
        <xsd:sequence>
            <xsd:element name="Property2" type="xsd:string" minOccurs="0" maxOccurs="unbounded"/>
            <xsd:element name="Property1" type="tProperty1" minOccurs="0" maxOccurs="unbounded"/>
            <xsd:element name="Property2" type="exvar:Varaible1" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:sequence>
    </xsd:group>
    </xsd:schema>

是否有任何其他方法可以扩展 BPMN 或您可以指出的任何资源,以便我可以更好地了解这个主题?

任何帮助将不胜感激,在此先感谢!

【问题讨论】:

【参考方案1】:

有个巴西研究员开发的工具:http://code.google.com/p/bpmnx/

据我所知,它适用于扩展点。

【讨论】:

【参考方案2】:

由于您不是在谈论任何具体的 BPMN 实现(activiti、jbpm),而是在谈论您自己的流程引擎,我假设您想要做的是根据 BPMN 规则扩展 XML。

也就是说,您可以查看 BPMN 2.0 规范(我认为它很长,而且可能很无聊),或者您可以尝试查看一些 bpmn 书籍。 BPMN method & style book 有一部分是关于实现 BPMN,所以也许这对你有用。

注意:当有像 BPMN 这样的标准时,它有很多支持,如果您真的需要扩展,有时它很有用。是否值得扩展一些尚未考虑的标准? (不是说你做不到,但你应该想想它会给你带来什么,如果你不能用常规的东西来做)。

【讨论】:

【参考方案3】:

Here 是在 Activiti 论坛和 MDT Eclipse 插件forum 上对该主题的一些讨论。

不幸的是,通过一些简单的测试,我无法实现一个新的命名空间

(例如,xmlns:newns="http://www.mynewns.com/newns

<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:activiti="http://activiti.org/bpmn" 
xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" 
xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" 
xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" 
typeLanguage="http://www.w3.org/2001/XMLSchema" 
xmlns:newns="http://www.mynewns.com/newns" 
expressionLanguage="http://www.w3.org/1999/XPath" 
targetNamespace="http://www.activiti.org/bpmn2.0">

还有一个像&lt;userTask newns:ownerID="owner1"&gt;这样的元素。

Activiti 图表中的自定义元素也不起作用——Eclipse 插件似乎丢弃了我的自定义命名空间并忽略了我的元素。不知道为什么;还在研究中。

【讨论】:

【参考方案4】:

您可以查看Eclipse BPMN2 Modeler。

有一些tutorials 可用(例如扩展runtime 并创建custom task)。

【讨论】:

以上是关于如何扩展 BPMN 2.0的主要内容,如果未能解决你的问题,请参考以下文章

Liferay7 BPM门户开发之2: BPMN 2.0 开发入门 (Activiti BPMN extensions)

Flowable入门系列文章19 - BPMN 2.0简介

Activiti BPMN 2.0 学习心得

192 - 启用安全的BPMN 2.0 xml和事件记录

192 - 启用安全的BPMN 2.0 xml和事件记录

192 - 启用安全的BPMN 2.0 xml和事件记录