Alternative BPMN-Spec implementation: Tool suitable and how to?

Hi there,

I’m currently seeking a tool for implementing a BPMN 2.0 derivate I would like to develop and that’s how I found Camunda Modeler and bpmn-io/bpmn-js.

I checked through different source of information available regarding the tools (github, youtube, forum, …) but was quite confused in the end.

What I would like to do:

  • Derive a new standalone specification from BPMN 2.0 (such as BPMN 2.1 or BPMN 2 Extended)
  • Derive and integrate a new flow type
  • Add new tasks types in addition to the exisiting ones with a respective identifying marker
  • Add new markers to sub-processes and tasks
  • Add new elements with respective graphical representations and attributes

This this should be complient to the way BPMN 2.0 is specified.

As far as I understood the tools in general would provide such an option, yet it is highly confusing how this would be achieved and which tools to be used.

The example at github for bpmn-js somehow is related to bmpn-moddle, unfortunately it only covers the extension of the BPMN spec and I did not fully understand how or why to apply bpmn-moddle and which tools are most suitable to achieved the required modifications in a conventient way.

Could you please give me some feedback if this tool / these tools are suitable for the intended task and how to do it? :slight_smile:

BR
Mike

Hi :wave:

Did you already check out our custom elements example? It shows step by step how to provide custom elements, especially by extending the existing BPMN 2.0 meta model.

Dear Niklas,

thanks for your answer and link to the custom elements example.

Yes, I checked the example and also the linked example for a model extension and unfortunately it did not answer any of my questions. :frowning:

The example deals with e.g. extending bpmn, but did not explain how to “fork” the bpmn spec, and it also did not show how to implement or modify a / the graphical representation of an element, which tool(s) to use to modify the model / elements / files or a full documentation for the JSON file (structure, available attributes, …).

BR
Mike

It seems like you have several questions here, and one thread might be not ideal to talk about all of them in detail.

I’d propose to create several threads with detailed questions, and especially what in particular your BPMN extension should achieve? How should the new elements update? What did you already tried out?

Detailed questions in detailed threads would follow to detailed answers I think :slight_smile:

Well, first I would like to know if the tool is suitable for implementing an own BPMN derivate instead of just adding elements to the implemented bpmn spec, how to do so, which tools are required and how difficult it is to do so or if I should consider utilizing a different bpmn modeler?

That highly depends on what you want to achieve. Generally, it’s possible with moddle-xml, the tool, for example, bpmn-moddle is using beyond. But, of course, creating a completely new meta model is far away from easy. Technically, you could just fork bpmn-moddle & bpmn-js and try to make the adjustments you need. There is postit-js that is doing exactly this. It tooks bpmn-js as inspiration, but implementing an own meta model, renderer and friends.

I hope this helps.

To add to what @Niklas_Kiefer wrote, let me quickly answer your question:

Well, first I would like to know if the tool is suitable for implementing an own BPMN derivate.

Yes. The tool is perfectly suitable to do the job.

No, it won’t be as easy as configuring stuff in JSON and it would magically work. You’d need to

(1) be proficient to a certain extend in JavaScript
(2) get proficient to a certain extend how our tooling works (cf. examples, walkthrough).

If you reached that point you’ll likely realize that building your derivative of the BPMN standard is straight forward:

  • bpmn-moddle needs to be forked and get your own BPMN scheme built into
  • bpmn-js needs to be forked to change import, rules and, albeit very unlikely, interaction patterns related to your derivative.

Again, I’m just repeating what Niklas says. It starts with you getting an understanding of how our tooling works.

Thanks for your replies, based on the BPMN Spec I assumed it would / should have been quite simple e.g. by the bpmn spec adding such as

<xsd:element name="NewdataObject" type="tNewDataObject" />
   <xsd:complexType name="tNewDataObject">
      <xsd:complexContent>
         <xsd:extension base="tFlowElement">
            <xsd:sequence>
               <xsd:element ref="dataState" minOccurs="0" maxOccurs="1"/>
            </xsd:sequence>
            <xsd:attribute name="itemSubjectRef" type="xsd:QName"/>
            <xsd:attribute name="isCollection" type="xsd:boolean"/>
         </xsd:extension>
      </xsd:complexContent>
</xsd:complexType>

or

<xsd:element name="globalAlienTask" type="tGlobalAlienTask" substitutionGroup="rootElement"/>
<xsd:complexType name="tGlobalAlienTask">
   <xsd:complexContent>
      <xsd:extension base="tGlobalTask">
         <xsd:sequence>
            <xsd:element ref="script" minOccurs="0" maxOccurs="1"/>
         </xsd:sequence>
         <xsd:attribute name="scriptLanguage" type="xsd:anyURI"/>
      </xsd:extension>
   </xsd:complexContent>
</xsd:complexType>

and to specify a respective graphical representation / path to an icon.

I guess I’ll stick to MS Visio then. :slight_smile:

1 Like