如何扩展BPMN 2.0

时间:2012-07-11 11:18:59

标签: bpm bpmn activiti

目前,我正在研究扩展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或您可以指向我的任何资源,以便我可以更好地了解此主题?

任何帮助将不胜感激,提前谢谢!

4 个答案:

答案 0 :(得分:1)

巴西研究人员开发了这个工具:http://code.google.com/p/bpmnx/

就我记忆而言,它适用于扩展点。

答案 1 :(得分:0)

Here是关于Activiti论坛和MDT Eclipse插件forum的讨论。

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

(例如{/ 1}}

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"> )之类的元素。

我的<userTask newns:ownerID="owner1">图中的自定义元素也不起作用 - Eclipse插件似乎丢弃了我的自定义命名空间并忽略了我的元素。不知道为什么;还在研究。

答案 2 :(得分:0)

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

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

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

答案 3 :(得分:0)

您可以查看Eclipse BPMN2 Modeler

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