Prev Next

Integrate a DMN Module Into BPSim for Simulation

The strength of DMN is its ability to describe business requirements through the Decision Requirement diagram and to encapsulate the complicated logic in versatile expressions such as the Decision Table and Boxed Context.

Equally, the strength of BPMN is its ability to describe business processes with a Sequence Flow of tasks and events, or to describe collaborations of processes with Message Flows.

The Decision Requirements diagram forms a bridge between Business Process models and decision logic models:

  • Business Process models define tasks within business processes, where decision-making is required
  • Decision Requirements diagrams define the decisions to be made in those tasks, their interrelationships, and their requirements for decision logic
  • Decision logic defines the required decisions in sufficient detail to allow validation and/or automation

DMN provides a complete Decision model that complements a Business Process model by specifying in detail the decision-making carried out in process tasks.

The two examples demonstrated in this topic can be accessed from:

  • EAExample Model | Model Simulation | BPSim Models
  • Perspective | Business Modeling | BPSim | BPSim Case Studies

There are two ways in which BPSim expressions use a DMN model:

  • DMN's Decision Service - demonstrated by the Loan Application Process
  • DMN's BusinessKnowledgeModel - demonstrated by the Delivery Cost Calculation

The process of integrating a DMN model with a BPSim model includes:

  • DMN Model Validation, Simulation, Code Generation and Testing on the generated module
  • Set up a usage dependency from the BPSim Artifact to the DMN Artifact
  • Generate or update the BPMN DataObject from the DMN DataSet
  • Create Property Parameters in BPSim to be used on tasks and Sequence Flows out going from Gateways
  • Bind the DMN interface to BPSim Property Parameters

DMN Model Validation for Compiled languages such as Java

When you create a DMN model and simulate it in Enterprise Architect, the code driving the simulation is JavaScript; this means that the variables do not need to be explicitly typed (the variable type is inferred from the value assigned to it).

However, for languages such as C++, C# and Java, the compiler will report an error that a variable does not have a type.

For generation to these languages you must run validation on the model and use the results to find variables that need their type set. For example:

  • Business Knowledge Model parameter - select the BKM element to view in the DMN Expression window, click on the second button to open the 'Parameter' dialog, specify a type for the parameter
  • Decision type - select the Decision element, open the Properties window, for the property 'variableType' select from the 'Value' field
  • Decision Table Input/Output clauses - on the Decision Table Input/Output clause, right-click to display the context menu and choose the type
  • Boxed Context variables - refer to the Boxed Context Help topic

DMN Code Generation In Java

After using validation to fix any variable type issues, we can proceed to the 'Generate Module' page in the DMN Simulation window.

  • Select DecisionService1 in the top toolbar data entry field; all the elements involved in DecisionService1 will now be included in the list
  • Item Definition and Business Knowledge Model are global elements
  • Input Data and Decisions are encapsulated in the DecisionService element
  • The supported languages are C++, C#, Java and JavaScript; note that for JavaScript the generated .js file is the same as the simulation script ('Simulate' tab | Run button drop down menu | Generate New Script (Scripting Window)) except that the simulation-related codes are omitted
  • For Java, the 'Module Path' value must match the Package structure; in this example, the DMNModule.java must be generated to a directory to form a file path that ends with '\com\sparxsystems\dmn\DMNModule.java' - you have to manually create the directory structures for now

Click on the Generate Code button () on the toolbar. This example will use Java; however, C++ and C# are the same. These actions are performed:

  • The .java file is generated to the path specified
  • An Analyzer Script (Build script) for this Artifact is created
  • The Build Script for this Analyzer Script is executed
  • Progress messages are reported in the System Output window

If the model is valid, this process will return the message:

If there are compiling errors, you can open the generated .java file by clicking the button next to the button on the toolbar, manually fix the issue, and compile with the generated script until you are successful.

One common reason for a compile failure is that languages can have different grammars for an expression. You might need to provide a value for a language to overwrite the default (right-click on a DMN Literal Expression | Edit Expression).

Testing DMN Modules before external Use

Having generated the model to java code and successfully compiled it we now want to:

  • Test this module's correctness
  • Provide it with inputs
  • Get the output Decision values

Generate BPMN DataObject

The data carried by the selected data set will be generated to the BPMN DataObject's 'Notes' field.

  • Click the button (2nd to the right on the toolbar of the 'Generate Module' tab) to open the 'Test Module' tab

  • Click the on the toolbar to select the input BPMN DataObject elements
  • Select the available outputs from the 'Decision' combo box, such as Get_Routing(), and click on the Run button on the toolbar

The execution result will be displayed in the Debug window. You can also open the test module file, set a breakpoint on the line and debug in the DMN Module to do line-level-debugging.

We highly recommend you test your DMN Module with this window to guarantee that the DMN Module is functional with the given inputs (from the BPMN DataObjects) and that it will successfully compute the result of the output.

Note: The DMN Module path is saved in the DMNSimConfiguration Artifact's 'Filepath' property.

Now, it is time to integrate the DMN module with the BPSim model.

The first step is to set up the usage dependency between the BPSim Artifact and the DMN Simulation Artifact.

Note: A BPSim Artifact can use multiple DMN modules if necessary. This is supported by simply putting all DMN Artifacts on this diagram and drawing a Dependency connector from the BPSim Artifact to each DMN Simulation Artifact.

These Help topics provide two examples of using these methods. See:

  • Example: Integrate DMN Decision Service into BPSim Data Object and Property Parameter
  • Example: Integrate DMN Business Knowledge Model into BPSim Property Parameter

Learn More