Camunda Team Blog

Camunda BPM 7.6.0-alpha2 Released

Written by Philipp Ossler on , under Execution category.

Camunda 7.6.0-alpha2 is here and it is packed with new features. The highlights are:

  • Support for Decision Requirements Graphs
  • New Task Dashboard in Cockpit
  • Mapping Input/Output Parameters of a Call Activity using Java Code
  • 38 Bug Fixes

The complete release notes are available in Jira.

You can Download Camunda For Free or Run it with Docker.

Support for Decision Requirements Graphs

In the current release, we add support for Decision Requirements Graphs (aka DRG) to model dependencies between decision tables.

Assuming you have a decision table to decide which dish should be served to our guests for dinner. The dish depends on the season and the amount of guests. Using a DRG, you can model that both inputs are the results of two required decision tables which resolve the season and the amount of guests. The following image shows the decision tables.

DRG Example

All decision tables are inside one DMN resource. The decision table (i.e., the decision which contains the table) references the required decision tables by the requiredDecision elements in the XML.

<?xml version="1.0" encoding="UTF-8"?>
<definitions id="dish" name="Desired Dish" 
  namespace="http://camunda.org/schema/1.0/dmn"
  xmlns="http://www.omg.org/spec/DMN/20151101/dmn11.xsd" >
  
  <decision id="dish-decision" name="Dish Decision">
    <informationRequirement>
      <requiredDecision href="#season" />
    </informationRequirement>
    <informationRequirement>
      <requiredDecision href="#guestCount" />
    </informationRequirement>
    <decisionTable id="dishDecisionTable">
      <!-- ... -->
    </decisionTable>
  </decision>
  
  <decision id="season" name="Season decision">
    <decisionTable id="seasonDecisionTable">
      <!-- ... -->
    </decisionTable>
  </decision>
  
  <decision id="guestCount" name="Guest Count">
    <decisionTable id="guestCountDecisionTable">
      <!-- ... -->
    </decisionTable>
  </decision>
</definitions>

A DRG can be deployed, parsed and evaluated in the same way as a DMN resource with a single decision table. When the DMN engine evaluates a decision which has required decisions, then it first evaluates the required decision and then maps the output values to the input expressions of the decision table.

You can evaluate the Dish Decision using the following Code:

DmnDecision decision = dmnEngine.parseDecision("dish-decision", inputStream);

VariableMap variables = Variables
  .putValue("temperature", 8)
  .putValue("dayType", "Weekday");

DmnDecisionTableResult result = dmnEngine.evaluateDecisionTable(decision, variables);
String dish = result.getSingleResult().getSingleEntry();

You can find more information about DRGs in the reference guide and an example on GitHub.

Note that you can’t model DRGs in the Camunda Modeler, yet. We will add support in future releases.

New Tasks Dashboard in Cockpit

We added a new dashboard to Cockpit which shows the amount of open tasks grouped by type and group name.

Tasks Dashboard

Mapping Input/Output Parameters of a Call Activity using Java Code

When you use a call activity in a process then you may want to pass variables to or from the calling process. Instead of specifying the mapping in the XML, you can now map the variables using Java code. The class must implement the DelegateVariableMapping interface and is referenced by name in the Camunda extension property variableMappingClass of the call activity.

<callActivity id="callSubProcess" calledElement="subProcess" 
  camunda:variableMappingClass="org.camunda.bpm.example.DelegatedVarMapping"/>

You can also reference the delegate via expression, using the Camunda extension property variableMappingDelegateExpression. See the user guide for additional information.

Feedback Welcome

Please try out the awesome new features of this release and provide feedback by commenting on this post or reaching out to us in the forum.