Squashed 'SpiffWorkflow/' changes from 12f81480a..d27519a36

d27519a36 Merge pull request #259 from sartography/bugfix/spiff-postscript-execution
21aa8a12c update execution order for postscripts
d83fd3d81 Merge pull request #256 from sartography/feature/xml-validation
8303aaab5 uping the sleep time in a test slightly to see if we can get this test to pass consistently in CI.
1d251d55d determine whether to validate by passing in a validator instead of a parameter
2d3daad2d add spiff schema
f8c65dc60 Minor changes to BPMN diagrams to assure all tests are run against valid BPMN Diagrams. Changes required:
9e06b25bf add DMN validation
1b7cbeba0 set parser to validate by default
53fdbba52 add schemas & validation option
a212d9c5d general cleanup

git-subtree-dir: SpiffWorkflow
git-subtree-split: d27519a3631b9772094e5f24dba2f478b0c47135
This commit is contained in:
jasquat 2022-10-27 10:50:48 -04:00
parent 6524778a76
commit 69e814758e
31 changed files with 107 additions and 569 deletions

View File

@ -3,6 +3,7 @@
import json
import os
import unittest
from SpiffWorkflow.bpmn.parser.BpmnParser import BpmnValidator
from SpiffWorkflow.task import TaskState
@ -18,9 +19,10 @@ class BpmnWorkflowTestCase(unittest.TestCase):
serializer = BpmnWorkflowSerializer(wf_spec_converter)
def load_workflow_spec(self, filename, process_name):
def load_workflow_spec(self, filename, process_name, validate=True):
f = os.path.join(os.path.dirname(__file__), 'data', filename)
parser = TestBpmnParser()
validator = BpmnValidator() if validate else None
parser = TestBpmnParser(validator=validator)
parser.add_bpmn_files_by_glob(f)
top_level_spec = parser.get_spec(process_name)
subprocesses = parser.get_subprocess_specs(process_name)

View File

@ -1,36 +0,0 @@
# -*- coding: utf-8 -*-
import sys
import os
import unittest
sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..', '..', '..'))
from tests.SpiffWorkflow.bpmn.BpmnWorkflowTestCase import BpmnWorkflowTestCase
from SpiffWorkflow.bpmn.parser.ValidationException import ValidationException
__author__ = 'kellym'
class ClashingNameTest2(BpmnWorkflowTestCase):
"""The example bpmn diagram tests both a set cardinality from user input
as well as looping over an existing array."""
def setUp(self):
pass
def loadWorkflow(self):
self.load_workflow_spec('Approvals_bad.bpmn', 'Approvals')
def testRunThroughHappy(self):
# make sure we raise an exception
# when validating a workflow with multiple
# same IDs in the BPMN workspace
self.assertRaises(ValidationException,self.loadWorkflow)
def suite():
return unittest.TestLoader().loadTestsFromTestCase(ClashingNameTest2)
if __name__ == '__main__':
unittest.TextTestRunner(verbosity=2).run(suite())

View File

@ -1,18 +1,10 @@
# -*- coding: utf-8 -*-
import sys
import os
import unittest
from SpiffWorkflow.camunda.parser.CamundaParser import CamundaParser
from SpiffWorkflow.dmn.parser.BpmnDmnParser import BpmnDmnParser
from SpiffWorkflow.spiff.parser import SpiffBpmnParser
from tests.SpiffWorkflow.bpmn.BpmnLoaderForTests import TestBpmnParser
sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..', '..', '..'))
from SpiffWorkflow.bpmn.workflow import BpmnWorkflow
from tests.SpiffWorkflow.bpmn.BpmnWorkflowTestCase import BpmnWorkflowTestCase
__author__ = 'danfunk'
@ -34,6 +26,7 @@ class ProcessDependencyTest(BpmnWorkflowTestCase):
self.actual_test(SpiffBpmnParser())
def actual_test(self, parser):
# We ought to test the parsers in the packages they belong to, not here.
filename = 'call_activity_nested'
process_name = 'Level1'
base_dir = os.path.join(os.path.dirname(__file__), 'data', filename)

View File

@ -102,7 +102,7 @@
</model:process>
<model:process id="First_Approval_Wins" name="First Approval Wins">
<model:documentation></model:documentation>
<model:laneSet id="First_Approval_Wins.First Approval Wins_laneSet">
<model:laneSet id="First_Approval_Wins.First_Approval_Wins_laneSet">
<model:lane id="First_Approval_Wins.Supervisor" name="Supervisor">
<model:documentation></model:documentation>
<model:flowNodeRef>Supervisor_Approval</model:flowNodeRef>
@ -147,7 +147,7 @@
</model:process>
<model:process id="Parallel_Approvals_SP" name="Parallel Approvals SP">
<model:documentation></model:documentation>
<model:laneSet id="Parallel_Approvals_SP.Parallel Approvals SP_laneSet">
<model:laneSet id="Parallel_Approvals_SP.Parallel_Approvals_SP_laneSet">
<model:lane id="Parallel_Approvals_SP.Supervisor" name="Supervisor">
<model:documentation></model:documentation>
<model:flowNodeRef>Start3</model:flowNodeRef>

View File

@ -1,403 +0,0 @@
<?xml version="1.0" encoding="ASCII"?>
<model:definitions xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:di="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:di_1="http://www.omg.org/spec/DD/20100524/DI" xmlns:model="http://www.omg.org/spec/BPMN/20100524/MODEL" exporter="BonitaSoft" exporterVersion="5.7" expressionLanguage="http://groovy.codehaus.org/" targetNamespace="http://bonitasoft.com/Approvals">
<model:collaboration id="Approvals">
<model:documentation></model:documentation>
<model:participant id="Initiator">
<model:documentation>Person who takes the first action to start the process</model:documentation>
</model:participant>
<model:participant id="_auWnIO-1EeG6ILSEFG-uBA" name="Approvals" processRef="Approvals"/>
<model:participant id="_auX1QO-1EeG6ILSEFG-uBA" name="First Approval Wins" processRef="First_Approval_Wins"/>
<model:participant id="_auYcUO-1EeG6ILSEFG-uBA" name="Parallel Approvals SP" processRef="Parallel_Approvals_SP"/>
</model:collaboration>
<model:process id="Approvals" name="Approvals">
<model:documentation></model:documentation>
<model:laneSet id="Approvals_laneSet">
<model:lane id="Approvals.Test" name="Test">
<model:documentation></model:documentation>
<model:flowNodeRef>Start1</model:flowNodeRef>
<model:flowNodeRef>First_Approval_Wins</model:flowNodeRef>
<model:flowNodeRef>End1</model:flowNodeRef>
<model:flowNodeRef>First_Approval_Wins_Done</model:flowNodeRef>
<model:flowNodeRef>Parallel_Approvals_Done</model:flowNodeRef>
<model:flowNodeRef>Parallel_SP</model:flowNodeRef>
<model:flowNodeRef>Parallel_SP_Done</model:flowNodeRef>
</model:lane>
<model:lane id="Approvals.Supervisor" name="Supervisor">
<model:documentation></model:documentation>
<model:flowNodeRef>Supervisor_Approval__P_</model:flowNodeRef>
<model:flowNodeRef>Gateway4</model:flowNodeRef>
<model:flowNodeRef>Gateway5</model:flowNodeRef>
</model:lane>
<model:lane id="Approvals.Manager" name="Manager">
<model:documentation></model:documentation>
<model:flowNodeRef>Manager_Approval__P_</model:flowNodeRef>
</model:lane>
</model:laneSet>
<model:startEvent id="Approvals.Start1" name="Start1">
<model:documentation></model:documentation>
</model:startEvent>
<model:callActivity id="Approvals.First_Approval_Wins" name="First Approval Wins" calledElement="First_Approval_Wins">
<model:documentation></model:documentation>
</model:callActivity>
<model:endEvent id="Approvals.End1" name="End1">
<model:documentation></model:documentation>
</model:endEvent>
<model:manualTask id="Approvals.First_Approval_Wins_Done" name="First Approval Wins Done">
<model:documentation></model:documentation>
</model:manualTask>
<model:manualTask id="Approvals.Parallel_Approvals_Done" name="Parallel Approvals Done">
<model:documentation></model:documentation>
</model:manualTask>
<model:callActivity id="Approvals.Parallel_SP" name="Parallel SP" calledElement="Parallel_Approvals_SP">
<model:documentation></model:documentation>
</model:callActivity>
<model:manualTask id="Approvals.Parallel_SP_Done" name="Parallel SP Done">
<model:documentation></model:documentation>
</model:manualTask>
<model:manualTask id="Approvals.Supervisor_Approval__P_" name="Supervisor Approval (P)">
<model:documentation></model:documentation>
</model:manualTask>
<model:parallelGateway id="Approvals.Gateway4" name="Gateway4">
<model:documentation></model:documentation>
</model:parallelGateway>
<model:parallelGateway id="Approvals.Gateway5" name="Gateway5">
<model:documentation></model:documentation>
</model:parallelGateway>
<model:manualTask id="Approvals.Manager_Approval__P_" name="Manager Approval (P)">
<model:documentation></model:documentation>
</model:manualTask>
<model:sequenceFlow id="_IcV3AO4CEeG6ILSEFG-uBA" sourceRef="Approvals.Start1" targetRef="Approvals.First_Approval_Wins">
<model:documentation></model:documentation>
</model:sequenceFlow>
<model:sequenceFlow id="_vVCwgO4DEeG6ILSEFG-uBA" sourceRef="Approvals.First_Approval_Wins" targetRef="Approvals.First_Approval_Wins_Done">
<model:documentation></model:documentation>
</model:sequenceFlow>
<model:sequenceFlow id="On_to_Parallel_Approvals1" name="On to Parallel Approvals" sourceRef="Approvals.First_Approval_Wins_Done" targetRef="Approvals.Gateway4">
<model:documentation></model:documentation>
</model:sequenceFlow>
<model:sequenceFlow id="_dceXwO6YEeG6ILSEFG-uBA" sourceRef="Approvals.Gateway4" targetRef="Approvals.Manager_Approval__P_">
<model:documentation></model:documentation>
</model:sequenceFlow>
<model:sequenceFlow id="_d_Hx0O6YEeG6ILSEFG-uBA" sourceRef="Approvals.Gateway4" targetRef="Approvals.Supervisor_Approval__P_">
<model:documentation></model:documentation>
</model:sequenceFlow>
<model:sequenceFlow id="Approve2" name="Approve" sourceRef="Approvals.Supervisor_Approval__P_" targetRef="Approvals.Gateway5">
<model:documentation></model:documentation>
</model:sequenceFlow>
<model:sequenceFlow id="On_To_Parallel_SP3" name="On To Parallel SP" sourceRef="Approvals.Parallel_Approvals_Done" targetRef="Approvals.Parallel_SP">
<model:documentation></model:documentation>
</model:sequenceFlow>
<model:sequenceFlow id="Approve4" name="Approve" sourceRef="Approvals.Manager_Approval__P_" targetRef="Approvals.Gateway5">
<model:documentation></model:documentation>
</model:sequenceFlow>
<model:sequenceFlow id="OK5" name="OK" sourceRef="Approvals.Parallel_SP_Done" targetRef="Approvals.End1">
<model:documentation></model:documentation>
</model:sequenceFlow>
<model:sequenceFlow id="_76Vy8O6ZEeG6ILSEFG-uBA" sourceRef="Approvals.Parallel_SP" targetRef="Approvals.Parallel_SP_Done">
<model:documentation></model:documentation>
</model:sequenceFlow>
<model:sequenceFlow id="_E8AnwO6aEeG6ILSEFG-uBA" sourceRef="Approvals.Gateway5" targetRef="Approvals.Parallel_Approvals_Done">
<model:documentation></model:documentation>
</model:sequenceFlow>
</model:process>
<model:process id="First_Approval_Wins" name="First Approval Wins">
<model:documentation></model:documentation>
<model:laneSet id="First_Approval_Wins.First Approval Wins_laneSet">
<model:lane id="First_Approval_Wins.Supervisor" name="Supervisor">
<model:documentation></model:documentation>
<model:flowNodeRef>Supervisor_Approval</model:flowNodeRef>
<model:flowNodeRef>Start2</model:flowNodeRef>
<model:flowNodeRef>Supervisor_Approved</model:flowNodeRef>
</model:lane>
<model:lane id="First_Approval_Wins.Manager" name="Manager">
<model:documentation></model:documentation>
<model:flowNodeRef>Manager_Approval</model:flowNodeRef>
<model:flowNodeRef>Manager_Approved</model:flowNodeRef>
</model:lane>
</model:laneSet>
<model:manualTask id="First_Approval_Wins.Supervisor_Approval" name="Supervisor Approval">
<model:documentation></model:documentation>
</model:manualTask>
<model:startEvent id="First_Approval_Wins.Start2" name="Start2">
<model:documentation></model:documentation>
</model:startEvent>
<model:endEvent id="First_Approval_Wins.Supervisor_Approved" name="Supervisor Approved">
<model:documentation></model:documentation>
<model:terminateEventDefinition id="_auX1Qe-1EeG6ILSEFG-uBA"/>
</model:endEvent>
<model:manualTask id="First_Approval_Wins.Manager_Approval" name="Manager Approval">
<model:documentation></model:documentation>
</model:manualTask>
<model:endEvent id="First_Approval_Wins.Manager_Approved" name="Manager Approved">
<model:documentation></model:documentation>
<model:terminateEventDefinition id="_auX1Qu-1EeG6ILSEFG-uBA"/>
</model:endEvent>
<model:sequenceFlow id="Approve6" name="Approve" sourceRef="First_Approval_Wins.Supervisor_Approval" targetRef="First_Approval_Wins.Supervisor_Approved">
<model:documentation></model:documentation>
</model:sequenceFlow>
<model:sequenceFlow id="Approve7" name="Approve" sourceRef="First_Approval_Wins.Manager_Approval" targetRef="First_Approval_Wins.Manager_Approved">
<model:documentation></model:documentation>
</model:sequenceFlow>
<model:sequenceFlow id="_CtMukO7hEeG6ILSEFG-uBA" sourceRef="First_Approval_Wins.Start2" targetRef="First_Approval_Wins.Supervisor_Approval">
<model:documentation></model:documentation>
</model:sequenceFlow>
<model:sequenceFlow id="_DBwCQO7hEeG6ILSEFG-uBA" sourceRef="First_Approval_Wins.Start2" targetRef="First_Approval_Wins.Manager_Approval">
<model:documentation></model:documentation>
</model:sequenceFlow>
</model:process>
<model:process id="Parallel_Approvals_SP" name="Parallel Approvals SP">
<model:documentation></model:documentation>
<model:laneSet id="Parallel_Approvals_SP.Parallel Approvals SP_laneSet">
<model:lane id="Parallel_Approvals_SP.Supervisor" name="Supervisor">
<model:documentation></model:documentation>
<model:flowNodeRef>Start3</model:flowNodeRef>
<model:flowNodeRef>Supervisor_Approval</model:flowNodeRef>
<model:flowNodeRef>End2</model:flowNodeRef>
</model:lane>
<model:lane id="Parallel_Approvals_SP.Manager" name="Manager">
<model:documentation></model:documentation>
<model:flowNodeRef>Manager_Approval</model:flowNodeRef>
</model:lane>
<model:lane id="Parallel_Approvals_SP.Operator" name="Operator">
<model:documentation></model:documentation>
<model:flowNodeRef>Step1</model:flowNodeRef>
</model:lane>
</model:laneSet>
<model:startEvent id="Parallel_Approvals_SP.Start3" name="Start3">
<model:documentation></model:documentation>
</model:startEvent>
<model:manualTask id="Parallel_Approvals_SP.Supervisor_Approval" name="Supervisor Approval">
<model:documentation></model:documentation>
</model:manualTask>
<model:endEvent id="Parallel_Approvals_SP.End2" name="End2">
<model:documentation></model:documentation>
</model:endEvent>
<model:manualTask id="Parallel_Approvals_SP.Manager_Approval" name="Manager Approval">
<model:documentation></model:documentation>
</model:manualTask>
<model:manualTask id="Parallel_Approvals_SP.Step1" name="Operator Approval">
<model:documentation></model:documentation>
</model:manualTask>
<model:sequenceFlow id="Approve8" name="Approve" sourceRef="Parallel_Approvals_SP.Supervisor_Approval" targetRef="Parallel_Approvals_SP.End2">
<model:documentation></model:documentation>
</model:sequenceFlow>
<model:sequenceFlow id="Approve9" name="Approve" sourceRef="Parallel_Approvals_SP.Manager_Approval" targetRef="Parallel_Approvals_SP.End2">
<model:documentation></model:documentation>
</model:sequenceFlow>
<model:sequenceFlow id="_InMVgO6ZEeG6ILSEFG-uBA" sourceRef="Parallel_Approvals_SP.Start3" targetRef="Parallel_Approvals_SP.Step1">
<model:documentation></model:documentation>
</model:sequenceFlow>
<model:sequenceFlow id="_JEeucO6ZEeG6ILSEFG-uBA" sourceRef="Parallel_Approvals_SP.Start3" targetRef="Parallel_Approvals_SP.Manager_Approval">
<model:documentation></model:documentation>
</model:sequenceFlow>
<model:sequenceFlow id="Approve10" name="Approve" sourceRef="Parallel_Approvals_SP.Step1" targetRef="Parallel_Approvals_SP.Supervisor_Approval">
<model:documentation></model:documentation>
</model:sequenceFlow>
</model:process>
<di:BPMNDiagram name="Approvals">
<di:BPMNPlane id="plane_Approvals" bpmnElement="Approvals">
<di:BPMNShape id="_Ib2u0O4CEeG6ILSEFG-uBA" bpmnElement="Approvals" isHorizontal="true">
<dc:Bounds height="724.0" width="1352.0" x="30.0" y="30.0"/>
</di:BPMNShape>
<di:BPMNShape id="_H6ddQO6XEeG6ILSEFG-uBA" bpmnElement="Test" isHorizontal="true">
<dc:Bounds height="329.0" width="1330.0" x="52.0" y="30.0"/>
</di:BPMNShape>
<di:BPMNShape id="_IcCVAO4CEeG6ILSEFG-uBA" bpmnElement="Start1">
<dc:Bounds height="34.0" width="30.0" x="92.0" y="95.0"/>
</di:BPMNShape>
<di:BPMNShape id="_R6kE8O4CEeG6ILSEFG-uBA" bpmnElement="First_Approval_Wins">
<dc:Bounds height="74.0" width="148.0" x="206.0" y="95.0"/>
</di:BPMNShape>
<di:BPMNShape id="_FRlL8O6WEeG6ILSEFG-uBA" bpmnElement="End1">
<dc:Bounds height="34.0" width="30.0" x="1045.0" y="170.0"/>
</di:BPMNShape>
<di:BPMNShape id="_8wLWIO6WEeG6ILSEFG-uBA" bpmnElement="First_Approval_Wins_Done">
<dc:Bounds height="84.0" width="168.0" x="192.0" y="190.0"/>
</di:BPMNShape>
<di:BPMNShape id="_oV8bsO6YEeG6ILSEFG-uBA" bpmnElement="Parallel_Approvals_Done">
<dc:Bounds height="74.0" width="148.0" x="522.0" y="190.0"/>
</di:BPMNShape>
<di:BPMNShape id="_Q-TKYO6ZEeG6ILSEFG-uBA" bpmnElement="Parallel_SP">
<dc:Bounds height="50.0" width="100.0" x="735.0" y="107.0"/>
</di:BPMNShape>
<di:BPMNShape id="_4T7s8O6ZEeG6ILSEFG-uBA" bpmnElement="Parallel_SP_Done">
<dc:Bounds height="74.0" width="148.0" x="865.0" y="117.0"/>
</di:BPMNShape>
<di:BPMNShape id="_rvrNEO6XEeG6ILSEFG-uBA" bpmnElement="Supervisor" isHorizontal="true">
<dc:Bounds height="250.0" width="1330.0" x="52.0" y="359.0"/>
</di:BPMNShape>
<di:BPMNShape id="_8zU7UO6XEeG6ILSEFG-uBA" bpmnElement="Supervisor_Approval__P_">
<dc:Bounds height="83.0" width="166.0" x="403.0" y="459.0"/>
</di:BPMNShape>
<di:BPMNShape id="_aVYD8O6YEeG6ILSEFG-uBA" bpmnElement="Gateway4">
<dc:Bounds height="43.0" width="43.0" x="211.0" y="408.0"/>
</di:BPMNShape>
<di:BPMNShape id="_CesQwO6aEeG6ILSEFG-uBA" bpmnElement="Gateway5">
<dc:Bounds height="43.0" width="43.0" x="613.0" y="479.0"/>
</di:BPMNShape>
<di:BPMNShape id="_vgLDMO6XEeG6ILSEFG-uBA" bpmnElement="Manager" isHorizontal="true">
<dc:Bounds height="145.0" width="1330.0" x="52.0" y="609.0"/>
</di:BPMNShape>
<di:BPMNShape id="_JXN5sO6YEeG6ILSEFG-uBA" bpmnElement="Manager_Approval__P_">
<dc:Bounds height="60.0" width="120.0" x="419.0" y="639.0"/>
</di:BPMNShape>
<di:BPMNEdge id="_IcWeEO4CEeG6ILSEFG-uBA" bpmnElement="_IcV3AO4CEeG6ILSEFG-uBA">
<di_1:waypoint x="122.0" y="122.0"/>
<di_1:waypoint x="206.0" y="122.0"/>
</di:BPMNEdge>
<di:BPMNEdge id="_vVDXkO4DEeG6ILSEFG-uBA" bpmnElement="_vVCwgO4DEeG6ILSEFG-uBA">
<di_1:waypoint x="311.0" y="169.0"/>
<di_1:waypoint x="311.0" y="190.0"/>
</di:BPMNEdge>
<di:BPMNEdge id="_DYxlUO6YEeG6ILSEFG-uBA" bpmnElement="On_to_Parallel_Approvals">
<di_1:waypoint x="240.0" y="274.0"/>
<di_1:waypoint x="240.0" y="415.0"/>
</di:BPMNEdge>
<di:BPMNEdge id="_dcfl4O6YEeG6ILSEFG-uBA" bpmnElement="_dceXwO6YEeG6ILSEFG-uBA">
<di_1:waypoint x="236.0" y="447.0"/>
<di_1:waypoint x="236.0" y="668.0"/>
<di_1:waypoint x="419.0" y="668.0"/>
</di:BPMNEdge>
<di:BPMNEdge id="_d_I_8O6YEeG6ILSEFG-uBA" bpmnElement="_d_Hx0O6YEeG6ILSEFG-uBA">
<di_1:waypoint x="248.0" y="434.0"/>
<di_1:waypoint x="325.0" y="434.0"/>
<di_1:waypoint x="325.0" y="480.0"/>
<di_1:waypoint x="403.0" y="480.0"/>
</di:BPMNEdge>
<di:BPMNEdge id="_vsd9UO6YEeG6ILSEFG-uBA" bpmnElement="Approve">
<di_1:waypoint x="569.0" y="487.0"/>
<di_1:waypoint x="592.0" y="487.0"/>
<di_1:waypoint x="592.0" y="496.0"/>
<di_1:waypoint x="616.0" y="496.0"/>
</di:BPMNEdge>
<di:BPMNEdge id="_yTd0wO6YEeG6ILSEFG-uBA" bpmnElement="On_To_Parallel_SP">
<di_1:waypoint x="670.0" y="194.0"/>
<di_1:waypoint x="720.0" y="194.0"/>
<di_1:waypoint x="720.0" y="173.0"/>
<di_1:waypoint x="745.0" y="173.0"/>
<di_1:waypoint x="745.0" y="157.0"/>
</di:BPMNEdge>
<di:BPMNEdge id="_34HwIO6YEeG6ILSEFG-uBA" bpmnElement="Approve">
<di_1:waypoint x="539.0" y="668.0"/>
<di_1:waypoint x="626.0" y="668.0"/>
<di_1:waypoint x="626.0" y="514.0"/>
</di:BPMNEdge>
<di:BPMNEdge id="_UUS10O6ZEeG6ILSEFG-uBA" bpmnElement="OK">
<di_1:waypoint x="1013.0" y="180.0"/>
<di_1:waypoint x="1045.0" y="180.0"/>
</di:BPMNEdge>
<di:BPMNEdge id="_76XBEO6ZEeG6ILSEFG-uBA" bpmnElement="_76Vy8O6ZEeG6ILSEFG-uBA">
<di_1:waypoint x="835.0" y="135.0"/>
<di_1:waypoint x="850.0" y="135.0"/>
<di_1:waypoint x="850.0" y="137.0"/>
<di_1:waypoint x="865.0" y="137.0"/>
</di:BPMNEdge>
<di:BPMNEdge id="_E8B14O6aEeG6ILSEFG-uBA" bpmnElement="_E8AnwO6aEeG6ILSEFG-uBA">
<di_1:waypoint x="628.0" y="485.0"/>
<di_1:waypoint x="628.0" y="264.0"/>
</di:BPMNEdge>
<di:BPMNShape id="_R6hBoO4CEeG6ILSEFG-uBA" bpmnElement="First_Approval_Wins" isHorizontal="true">
<dc:Bounds height="500.0" width="1352.0" x="30.0" y="774.0"/>
</di:BPMNShape>
<di:BPMNShape id="_sDQsIO4CEeG6ILSEFG-uBA" bpmnElement="Supervisor" isHorizontal="true">
<dc:Bounds height="250.0" width="1330.0" x="52.0" y="774.0"/>
</di:BPMNShape>
<di:BPMNShape id="_R6vrIe4CEeG6ILSEFG-uBA" bpmnElement="Supervisor_Approval">
<dc:Bounds height="50.0" width="100.0" x="320.0" y="858.0"/>
</di:BPMNShape>
<di:BPMNShape id="_VgS1gO4CEeG6ILSEFG-uBA" bpmnElement="Start2">
<dc:Bounds height="34.0" width="30.0" x="134.0" y="843.0"/>
</di:BPMNShape>
<di:BPMNShape id="_jja8kO4DEeG6ILSEFG-uBA" bpmnElement="Supervisor_Approved">
<dc:Bounds height="34.0" width="30.0" x="538.0" y="876.0"/>
</di:BPMNShape>
<di:BPMNShape id="_ttNsgO4CEeG6ILSEFG-uBA" bpmnElement="Manager" isHorizontal="true">
<dc:Bounds height="250.0" width="1330.0" x="52.0" y="1024.0"/>
</di:BPMNShape>
<di:BPMNShape id="_jf_DgO4CEeG6ILSEFG-uBA" bpmnElement="Manager_Approval">
<dc:Bounds height="50.0" width="100.0" x="304.0" y="1124.0"/>
</di:BPMNShape>
<di:BPMNShape id="_oUPnQO4DEeG6ILSEFG-uBA" bpmnElement="Manager_Approved">
<dc:Bounds height="34.0" width="30.0" x="522.0" y="1134.0"/>
</di:BPMNShape>
<di:BPMNEdge id="_mAyW4O4DEeG6ILSEFG-uBA" bpmnElement="Approve">
<di_1:waypoint x="420.0" y="886.0"/>
<di_1:waypoint x="479.0" y="886.0"/>
<di_1:waypoint x="479.0" y="892.0"/>
<di_1:waypoint x="538.0" y="892.0"/>
</di:BPMNEdge>
<di:BPMNEdge id="_qIrZUO4DEeG6ILSEFG-uBA" bpmnElement="Approve">
<di_1:waypoint x="404.0" y="1153.0"/>
<di_1:waypoint x="463.0" y="1153.0"/>
<di_1:waypoint x="463.0" y="1147.0"/>
<di_1:waypoint x="522.0" y="1147.0"/>
</di:BPMNEdge>
<di:BPMNEdge id="_CtMuku7hEeG6ILSEFG-uBA" bpmnElement="_CtMukO7hEeG6ILSEFG-uBA">
<di_1:waypoint x="164.0" y="872.0"/>
<di_1:waypoint x="242.0" y="872.0"/>
<di_1:waypoint x="242.0" y="880.0"/>
<di_1:waypoint x="320.0" y="880.0"/>
</di:BPMNEdge>
<di:BPMNEdge id="_DBxQYO7hEeG6ILSEFG-uBA" bpmnElement="_DBwCQO7hEeG6ILSEFG-uBA">
<di_1:waypoint x="149.0" y="877.0"/>
<di_1:waypoint x="149.0" y="1149.0"/>
<di_1:waypoint x="304.0" y="1149.0"/>
</di:BPMNEdge>
<di:BPMNShape id="_Zk-u8O4uEeG6ILSEFG-uBA" bpmnElement="Parallel_Approvals_SP" isHorizontal="true">
<dc:Bounds height="630.0" width="1352.0" x="30.0" y="1294.0"/>
</di:BPMNShape>
<di:BPMNShape id="_f_FroO4uEeG6ILSEFG-uBA" bpmnElement="Supervisor" isHorizontal="true">
<dc:Bounds height="280.0" width="1330.0" x="52.0" y="1394.0"/>
</di:BPMNShape>
<di:BPMNShape id="_uEKI4O4uEeG6ILSEFG-uBA" bpmnElement="Start3">
<dc:Bounds height="34.0" width="30.0" x="134.0" y="1530.0"/>
</di:BPMNShape>
<di:BPMNShape id="_vTJEgO4uEeG6ILSEFG-uBA" bpmnElement="Supervisor_Approval">
<dc:Bounds height="50.0" width="100.0" x="493.0" y="1522.0"/>
</di:BPMNShape>
<di:BPMNShape id="_K4QgkO6WEeG6ILSEFG-uBA" bpmnElement="End2">
<dc:Bounds height="34.0" width="30.0" x="799.0" y="1530.0"/>
</di:BPMNShape>
<di:BPMNShape id="_j4eYAO4uEeG6ILSEFG-uBA" bpmnElement="Manager" isHorizontal="true">
<dc:Bounds height="250.0" width="1330.0" x="52.0" y="1674.0"/>
</di:BPMNShape>
<di:BPMNShape id="_y4gBoO4uEeG6ILSEFG-uBA" bpmnElement="Manager_Approval">
<dc:Bounds height="50.0" width="100.0" x="364.0" y="1795.0"/>
</di:BPMNShape>
<di:BPMNShape id="_RkTswO7hEeG6ILSEFG-uBA" bpmnElement="Operator" isHorizontal="true">
<dc:Bounds height="100.0" width="1330.0" x="52.0" y="1294.0"/>
</di:BPMNShape>
<di:BPMNShape id="_VVzBYO7hEeG6ILSEFG-uBA" bpmnElement="Step1">
<dc:Bounds height="50.0" width="100.0" x="364.0" y="1324.0"/>
</di:BPMNShape>
<di:BPMNEdge id="_-dnqoO4uEeG6ILSEFG-uBA" bpmnElement="Approve">
<di_1:waypoint x="593.0" y="1554.0"/>
<di_1:waypoint x="799.0" y="1554.0"/>
</di:BPMNEdge>
<di:BPMNEdge id="__RQHAO4uEeG6ILSEFG-uBA" bpmnElement="Approve">
<di_1:waypoint x="464.0" y="1825.0"/>
<di_1:waypoint x="631.0" y="1825.0"/>
<di_1:waypoint x="631.0" y="1558.0"/>
<di_1:waypoint x="799.0" y="1558.0"/>
</di:BPMNEdge>
<di:BPMNEdge id="_InOKsO6ZEeG6ILSEFG-uBA" bpmnElement="_InMVgO6ZEeG6ILSEFG-uBA">
<di_1:waypoint x="164.0" y="1558.0"/>
<di_1:waypoint x="264.0" y="1558.0"/>
<di_1:waypoint x="264.0" y="1365.0"/>
<di_1:waypoint x="364.0" y="1365.0"/>
</di:BPMNEdge>
<di:BPMNEdge id="_JEgjoO6ZEeG6ILSEFG-uBA" bpmnElement="_JEeucO6ZEeG6ILSEFG-uBA">
<di_1:waypoint x="149.0" y="1564.0"/>
<di_1:waypoint x="149.0" y="1634.0"/>
<di_1:waypoint x="307.0" y="1634.0"/>
<di_1:waypoint x="307.0" y="1812.0"/>
<di_1:waypoint x="364.0" y="1812.0"/>
</di:BPMNEdge>
<di:BPMNEdge id="_W9jpYO7hEeG6ILSEFG-uBA" bpmnElement="Approve">
<di_1:waypoint x="464.0" y="1356.0"/>
<di_1:waypoint x="532.0" y="1356.0"/>
<di_1:waypoint x="532.0" y="1522.0"/>
</di:BPMNEdge>
</di:BPMNPlane>
</di:BPMNDiagram>
</model:definitions>

View File

@ -2,31 +2,31 @@
<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" xmlns:modeler="http://camunda.org/schema/modeler/1.0" id="Definitions_0qmxumb" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="5.0.0" modeler:executionPlatform="Camunda Platform" modeler:executionPlatformVersion="7.17.0">
<bpmn:collaboration id="my_collaboration">
<bpmn:participant id="buddy" name="Buddy" processRef="process_buddy" />
<bpmn:participant id="Person" name="Person" processRef="random_person_process" />
<bpmn:messageFlow id="love_letter_flow" name="Love Letter Flow" sourceRef="ActivitySendLetter" targetRef="Person" />
<bpmn:messageFlow id="response_flow" name="response flow" sourceRef="Person" targetRef="EventReceiveLetter" />
<bpmn:correlationKey name="lover">
<bpmn:correlationPropertyRef>lover_name</bpmn:correlationPropertyRef>
</bpmn:correlationKey>
</bpmn:collaboration>
<bpmn:message id="love_letter" name="Love Letter" />
<bpmn:message id="love_letter_response" name="Love Letter Response" />
<bpmn:correlationProperty id="lover_name" name="Lover&#39;s Name">
<bpmn:correlationPropertyRetrievalExpression messageRef="love_letter">
<bpmn:formalExpression>lover_name</bpmn:formalExpression>
<bpmn:messagePath>lover_name</bpmn:messagePath>
</bpmn:correlationPropertyRetrievalExpression>
<bpmn:correlationPropertyRetrievalExpression messageRef="love_letter_response">
<bpmn:formalExpression>from_name</bpmn:formalExpression>
<bpmn:messagePath>from_name</bpmn:messagePath>
</bpmn:correlationPropertyRetrievalExpression>
</bpmn:correlationProperty>
<bpmn:process id="process_buddy" name="Process Buddy" isExecutable="true">
<bpmn:startEvent id="StartEvent_1">
<bpmn:outgoing>Flow_1bl6jeh</bpmn:outgoing>
@ -49,12 +49,12 @@
</bpmn:process>
<bpmn:process id="random_person_process" name="Process" isExecutable="false" />
<bpmndi:BPMNDiagram id="BPMNDiagram_1">
<bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="my_collaboration">
<bpmndi:BPMNShape id="Participant_12ffz3p_di" bpmnElement="buddy" isHorizontal="true">
@ -109,4 +109,4 @@
</bpmndi:BPMNEdge>
</bpmndi:BPMNPlane>
</bpmndi:BPMNDiagram>
</bpmn:definitions>
</bpmn:definitions>

View File

@ -9,10 +9,10 @@
</bpmn:collaboration>
<bpmn:correlationProperty id="process_id" name="Test Correlation">
<bpmn:correlationPropertyRetrievalExpression messageRef="Message_19nm5f5">
<bpmn:formalExpression>task_num</bpmn:formalExpression>
<bpmn:messagePath>task_num</bpmn:messagePath>
</bpmn:correlationPropertyRetrievalExpression>
<bpmn:correlationPropertyRetrievalExpression messageRef="Message_0fc1gu7">
<bpmn:formalExpression>init_id</bpmn:formalExpression>
<bpmn:messagePath>init_id</bpmn:messagePath>
</bpmn:correlationPropertyRetrievalExpression>
</bpmn:correlationProperty>
<bpmn:process id="proc_1" name="Process 1" isExecutable="true">

View File

@ -13,18 +13,18 @@
</bpmn:collaboration>
<bpmn:correlationProperty id="process_id" name="Test Correlation">
<bpmn:correlationPropertyRetrievalExpression messageRef="Message_19nm5f5">
<bpmn:formalExpression>task_num</bpmn:formalExpression>
<bpmn:messagePath>task_num</bpmn:messagePath>
</bpmn:correlationPropertyRetrievalExpression>
<bpmn:correlationPropertyRetrievalExpression messageRef="Message_0fc1gu7">
<bpmn:formalExpression>init_id</bpmn:formalExpression>
<bpmn:messagePath>init_id</bpmn:messagePath>
</bpmn:correlationPropertyRetrievalExpression>
</bpmn:correlationProperty>
<bpmn:correlationProperty id="task_id" name="Test Correlation">
<bpmn:correlationPropertyRetrievalExpression messageRef="Message_0hr1xdn">
<bpmn:formalExpression>task_num</bpmn:formalExpression>
<bpmn:messagePath>task_num</bpmn:messagePath>
</bpmn:correlationPropertyRetrievalExpression>
<bpmn:correlationPropertyRetrievalExpression messageRef="Message_0z3cr5h">
<bpmn:formalExpression>subprocess</bpmn:formalExpression>
<bpmn:messagePath>subprocess</bpmn:messagePath>
</bpmn:correlationPropertyRetrievalExpression>
</bpmn:correlationProperty>
<bpmn:process id="proc_1" name="Process 1" isExecutable="true">

View File

@ -1,7 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" xmlns:modeler="http://camunda.org/schema/modeler/1.0" id="Definitions_19o7vxg" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="4.11.1" modeler:executionPlatform="Camunda Platform" modeler:executionPlatformVersion="7.17.0">
<bpmn:process id="Process" isExecutable="true">
<bpmn:ioSpecification />
<bpmn:dataObject id="obj_1" />
<bpmn:startEvent id="Event_0kmwi7u">
<bpmn:outgoing>Flow_18858hr</bpmn:outgoing>

View File

@ -9,6 +9,18 @@
<dataInput id="in_2" name="input 2" />
<dataOutput id="out_1" name="output 1" />
<dataOutput id="out_2" name="output 2" />
<!-- creating input sets and output sets is way to define these
as a required set of inputs or outputs that must all
appear together -->
<inputSet name="Inputs" id="INS_1">
<dataInputRefs>id_1</dataInputRefs>
<dataInputRefs>id_2</dataInputRefs>
</inputSet>
<outputSet name="Outputs" id="OUTS_1">
<dataOutputRefs>out_1</dataOutputRefs>
<dataOutputRefs>out_2</dataOutputRefs>
</outputSet>
<outputSet name="Outputs" id="ID_8"/>
</ioSpecification>
<startEvent id="Event_1rtivo5">
<outgoing>Flow_0n038fc</outgoing>

View File

@ -11,8 +11,8 @@ __author__ = 'matth'
class ActionManagementTest(BpmnWorkflowTestCase):
START_TIME_DELTA=0.01
FINISH_TIME_DELTA=0.02
START_TIME_DELTA=0.05
FINISH_TIME_DELTA=0.10
def now_plus_seconds(self, seconds):
return datetime.datetime.now() + datetime.timedelta(seconds=seconds)
@ -27,7 +27,7 @@ class ActionManagementTest(BpmnWorkflowTestCase):
self.assertEqual(1, len(self.workflow.get_tasks(TaskState.READY)))
self.workflow.get_tasks(TaskState.READY)[0].set_data(
start_time=start_time, finish_time=finish_time)
def testRunThroughHappy(self):
self.do_next_exclusive_step("Review Action", choice='Approve')
self.workflow.do_engine_steps()

View File

@ -41,7 +41,7 @@ def track_workflow(wf_spec, completed_set):
class CallActivityEscalationTest(BpmnWorkflowTestCase):
def setUp(self):
self.spec, subprocesses = self.load_workflow_spec('Test-Workflows/*.bpmn20.xml', 'CallActivity-Escalation-Test')
self.spec, subprocesses = self.load_workflow_spec('Test-Workflows/*.bpmn20.xml', 'CallActivity-Escalation-Test', False)
self.workflow = BpmnWorkflow(self.spec, subprocesses)
def testShouldEscalate(self):

View File

@ -13,7 +13,7 @@ __author__ = 'matth'
class MessageInterruptsSpTest(BpmnWorkflowTestCase):
def setUp(self):
self.spec, self.subprocesses = self.load_workflow_spec('Test-Workflows/*.bpmn20.xml', 'Message Interrupts SP')
self.spec, self.subprocesses = self.load_workflow_spec('Test-Workflows/*.bpmn20.xml', 'Message Interrupts SP', False)
def testRunThroughHappySaveAndRestore(self):

View File

@ -13,7 +13,7 @@ __author__ = 'matth'
class MessageInterruptsTest(BpmnWorkflowTestCase):
def setUp(self):
self.spec, self.subprocesses = self.load_workflow_spec('Test-Workflows/*.bpmn20.xml', 'Test Workflows')
self.spec, self.subprocesses = self.load_workflow_spec('Test-Workflows/*.bpmn20.xml', 'Test Workflows', False)
def testRunThroughHappySaveAndRestore(self):

View File

@ -13,7 +13,7 @@ __author__ = 'matth'
class MessageNonInterruptTest(BpmnWorkflowTestCase):
def setUp(self):
self.spec, self.subprocesses = self.load_workflow_spec('Test-Workflows/*.bpmn20.xml', 'Test Workflows')
self.spec, self.subprocesses = self.load_workflow_spec('Test-Workflows/*.bpmn20.xml', 'Test Workflows', False)
def testRunThroughHappySaveAndRestore(self):

View File

@ -13,7 +13,7 @@ __author__ = 'matth'
class MessageNonInterruptsSpTest(BpmnWorkflowTestCase):
def setUp(self):
self.spec, self.subprocesses = self.load_workflow_spec('Test-Workflows/*.bpmn20.xml', 'Message Non Interrupt SP')
self.spec, self.subprocesses = self.load_workflow_spec('Test-Workflows/*.bpmn20.xml', 'Message Non Interrupt SP', False)
def testRunThroughHappySaveAndRestore(self):

View File

@ -13,7 +13,7 @@ __author__ = 'matth'
class MessagesTest(BpmnWorkflowTestCase):
def setUp(self):
self.spec, self.subprocesses = self.load_workflow_spec('Test-Workflows/*.bpmn20.xml', 'Test Workflows')
self.spec, self.subprocesses = self.load_workflow_spec('Test-Workflows/*.bpmn20.xml', 'Test Workflows', False)
def testRunThroughHappy(self):

View File

@ -1,8 +1,7 @@
from SpiffWorkflow.bpmn.parser.util import full_tag
from SpiffWorkflow.camunda.specs.UserTask import UserTask
from SpiffWorkflow.camunda.parser.CamundaParser import CamundaParser
from SpiffWorkflow.camunda.parser.UserTaskParser import UserTaskParser
from SpiffWorkflow.camunda.parser.business_rule_task import BusinessRuleTaskParser
from SpiffWorkflow.camunda.parser.task_spec import UserTaskParser, BusinessRuleTaskParser
from SpiffWorkflow.dmn.specs.BusinessRuleTask import BusinessRuleTask
from .BaseTestCase import BaseTestCase

View File

@ -1,6 +1,6 @@
import unittest
from SpiffWorkflow.camunda.parser.UserTaskParser import UserTaskParser
from SpiffWorkflow.camunda.parser.task_spec import UserTaskParser
from tests.SpiffWorkflow.camunda.BaseTestCase import BaseTestCase

View File

@ -1,28 +0,0 @@
import unittest
from SpiffWorkflow.camunda.parser.UserTaskParser import UserTaskParser
from SpiffWorkflow.camunda.specs.UserTask import UserTask
from SpiffWorkflow.camunda.parser.CamundaParser import CamundaParser
class CamundaParserTest(unittest.TestCase):
CORRELATE = CamundaParser
def setUp(self):
self.parser = CamundaParser()
def test_overrides(self):
expected_key = "{http://www.omg.org/spec/BPMN/20100524/MODEL}userTask"
self.assertIn(expected_key,
self.parser.OVERRIDE_PARSER_CLASSES)
self.assertEqual((UserTaskParser, UserTask),
self.parser.OVERRIDE_PARSER_CLASSES.get(expected_key))
def suite():
return unittest.TestLoader().loadTestsFromTestCase(CamundaParserTest)
if __name__ == '__main__':
unittest.TextTestRunner(verbosity=2).run(suite())

View File

@ -4,7 +4,7 @@ from lxml import etree
from SpiffWorkflow.bpmn.PythonScriptEngine import Box
from SpiffWorkflow.dmn.engine.DMNEngine import DMNEngine
from SpiffWorkflow.dmn.parser.DMNParser import DMNParser
from SpiffWorkflow.dmn.parser.DMNParser import DMNParser, get_dmn_ns
class Workflow:
@ -33,7 +33,7 @@ class DecisionRunner:
with open(fn) as fh:
node = etree.parse(fh)
self.dmnParser = DMNParser(None, node.getroot())
self.dmnParser = DMNParser(None, node.getroot(), get_dmn_ns(node.getroot()))
self.dmnParser.parse()
decision = self.dmnParser.decision

View File

@ -12,7 +12,7 @@ class DmnVersionTest(BpmnWorkflowTestCase):
def testLoad(self):
dmn = os.path.join(os.path.dirname(__file__), 'data',
'dmn_version_20191111_test.dmn')
'dmn_version_20151101_test.dmn')
self.assertIsNone(self.parser.add_dmn_file(dmn))

View File

@ -1,7 +1,7 @@
# -*- coding: utf-8 -*-
import os
from SpiffWorkflow.spiff.parser import SpiffBpmnParser
from SpiffWorkflow.spiff.parser import SpiffBpmnParser, VALIDATOR
from SpiffWorkflow.spiff.serializer import NoneTaskConverter, \
ManualTaskConverter, UserTaskConverter, ScriptTaskConverter, \
SubWorkflowTaskConverter, TransactionSubprocessConverter, \
@ -28,9 +28,9 @@ class BaseTestCase(BpmnWorkflowTestCase):
serializer = BpmnWorkflowSerializer(wf_spec_converter)
def load_workflow_spec(self, filename, process_name, dmn_filename=None):
def load_workflow_spec(self, filename, process_name, dmn_filename=None, validate=True):
bpmn = os.path.join(os.path.dirname(__file__), 'data', filename)
parser = SpiffBpmnParser()
parser = SpiffBpmnParser(validator=VALIDATOR if validate else None)
parser.add_bpmn_files_by_glob(bpmn)
if dmn_filename is not None:
dmn = os.path.join(os.path.dirname(__file__), 'data', 'dmn', dmn_filename)

View File

@ -5,53 +5,51 @@
<bpmn:outgoing>Flow_0lrg65h</bpmn:outgoing>
</bpmn:startEvent>
<bpmn:sequenceFlow id="Flow_0lrg65h" sourceRef="StartEvent_1" targetRef="Activity_10k4dgb" />
<bpmn:endEvent id="Event_184erzz">
<bpmn:incoming>Flow_0l8nhib</bpmn:incoming>
</bpmn:endEvent>
<bpmn:sequenceFlow id="Flow_0l8nhib" sourceRef="Activity_0ux7vpx" targetRef="Event_184erzz" />
<bpmn:businessRuleTask id="Activity_0ux7vpx" name="Business Rules" scriptFormat="python" script="question = &#34;X&#34;">
<bpmn:extensionElements>
<spiffworkflow:calledDecisionId>decision_1</spiffworkflow:calledDecisionId>
<spiffworkflow:preScript />
<spiffworkflow:postScript />
</bpmn:extensionElements>
<bpmn:incoming>Flow_1109ldv</bpmn:incoming>
<bpmn:outgoing>Flow_0l8nhib</bpmn:outgoing>
</bpmn:businessRuleTask>
<bpmn:sequenceFlow id="Flow_1109ldv" sourceRef="Activity_10k4dgb" targetRef="Activity_0ux7vpx" />
<bpmn:scriptTask id="Activity_10k4dgb" name="Set BR Variable">
<bpmn:incoming>Flow_0lrg65h</bpmn:incoming>
<bpmn:outgoing>Flow_1109ldv</bpmn:outgoing>
<bpmn:outgoing>Flow_0m1tt51</bpmn:outgoing>
<bpmn:script>question = "X"</bpmn:script>
</bpmn:scriptTask>
<bpmn:sequenceFlow id="Flow_0m1tt51" sourceRef="Activity_10k4dgb" targetRef="Activity_0diq2z1" />
<bpmn:businessRuleTask id="Activity_0diq2z1" name="Business Rules">
<bpmn:extensionElements>
<spiffworkflow:calledDecisionId>decision_1</spiffworkflow:calledDecisionId>
</bpmn:extensionElements>
<bpmn:incoming>Flow_0m1tt51</bpmn:incoming>
<bpmn:outgoing>Flow_19vr2vt</bpmn:outgoing>
</bpmn:businessRuleTask>
<bpmn:endEvent id="Event_0cqyhox">
<bpmn:incoming>Flow_19vr2vt</bpmn:incoming>
</bpmn:endEvent>
<bpmn:sequenceFlow id="Flow_19vr2vt" sourceRef="Activity_0diq2z1" targetRef="Event_0cqyhox" />
</bpmn:process>
<bpmndi:BPMNDiagram id="BPMNDiagram_1">
<bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="Process_bd2e724">
<bpmndi:BPMNEdge id="Flow_1109ldv_di" bpmnElement="Flow_1109ldv">
<di:waypoint x="370" y="177" />
<di:waypoint x="430" y="177" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_0l8nhib_di" bpmnElement="Flow_0l8nhib">
<di:waypoint x="530" y="177" />
<di:waypoint x="612" y="177" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_0lrg65h_di" bpmnElement="Flow_0lrg65h">
<di:waypoint x="215" y="177" />
<di:waypoint x="270" y="177" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNShape id="_BPMNShape_StartEvent_2" bpmnElement="StartEvent_1">
<dc:Bounds x="179" y="159" width="36" height="36" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Event_184erzz_di" bpmnElement="Event_184erzz">
<dc:Bounds x="612" y="159" width="36" height="36" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Activity_070a8q9_di" bpmnElement="Activity_0ux7vpx">
<dc:Bounds x="430" y="137" width="100" height="80" />
<bpmndi:BPMNLabel />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Activity_1emp7lc_di" bpmnElement="Activity_10k4dgb">
<dc:Bounds x="270" y="137" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Activity_08xsh1p_di" bpmnElement="Activity_0diq2z1">
<dc:Bounds x="430" y="137" width="100" height="80" />
<bpmndi:BPMNLabel />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Event_0cqyhox_di" bpmnElement="Event_0cqyhox">
<dc:Bounds x="592" y="159" width="36" height="36" />
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge id="Flow_0lrg65h_di" bpmnElement="Flow_0lrg65h">
<di:waypoint x="215" y="177" />
<di:waypoint x="270" y="177" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_0m1tt51_di" bpmnElement="Flow_0m1tt51">
<di:waypoint x="370" y="177" />
<di:waypoint x="430" y="177" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_19vr2vt_di" bpmnElement="Flow_19vr2vt">
<di:waypoint x="530" y="177" />
<di:waypoint x="592" y="177" />
</bpmndi:BPMNEdge>
</bpmndi:BPMNPlane>
</bpmndi:BPMNDiagram>
</bpmn:definitions>

View File

@ -9,10 +9,10 @@
</bpmn:collaboration>
<bpmn:correlationProperty id="process_id" name="Test Correlation">
<bpmn:correlationPropertyRetrievalExpression messageRef="Message_19nm5f5">
<bpmn:formalExpression>num</bpmn:formalExpression>
<bpmn:messagePath>num</bpmn:messagePath>
</bpmn:correlationPropertyRetrievalExpression>
<bpmn:correlationPropertyRetrievalExpression messageRef="Message_0fc1gu7">
<bpmn:formalExpression>init_id</bpmn:formalExpression>
<bpmn:messagePath>init_id</bpmn:messagePath>
</bpmn:correlationPropertyRetrievalExpression>
</bpmn:correlationProperty>
<bpmn:message id="Message_19nm5f5" name="init_proc_2">

View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" xmlns:spiffworkflow="http://spiffworkflow.org/bpmn/schema/1.0/core" id="Definitions_96f6665" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="3.0.0-dev">
<bpmn:collaboration id="Collaboration_0oye1os" messages="[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]">
<bpmn:collaboration id="Collaboration_0oye1os">
<bpmn:participant id="message_initiator" name="Message Initiator" processRef="message_send_process" />
<bpmn:participant id="message-receiver-one" name="Message Receiver One" />
<bpmn:participant id="message-receiver-two" name="Message Receiver Two" />
@ -19,18 +19,18 @@
</bpmn:collaboration>
<bpmn:correlationProperty id="mcp_topica_one" name="MCP TopicA One">
<bpmn:correlationPropertyRetrievalExpression messageRef="message_send_one">
<bpmn:formalExpression>topica_one</bpmn:formalExpression>
<bpmn:messagePath>topica_one</bpmn:messagePath>
</bpmn:correlationPropertyRetrievalExpression>
<bpmn:correlationPropertyRetrievalExpression messageRef="message_response_one">
<bpmn:formalExpression>payload_var_one.topica</bpmn:formalExpression>
<bpmn:messagePath>payload_var_one.topica</bpmn:messagePath>
</bpmn:correlationPropertyRetrievalExpression>
</bpmn:correlationProperty>
<bpmn:correlationProperty id="mcp_topicb_one" name="MCP TopicB_one">
<bpmn:correlationPropertyRetrievalExpression messageRef="message_send_one">
<bpmn:formalExpression>topicb_one</bpmn:formalExpression>
<bpmn:messagePath>topicb_one</bpmn:messagePath>
</bpmn:correlationPropertyRetrievalExpression>
<bpmn:correlationPropertyRetrievalExpression messageRef="message_response_one">
<bpmn:formalExpression>payload_var_one.topicb</bpmn:formalExpression>
<bpmn:messagePath>payload_var_one.topicb</bpmn:messagePath>
</bpmn:correlationPropertyRetrievalExpression>
</bpmn:correlationProperty>
<bpmn:process id="message_send_process" name="Message Send Process" isExecutable="true">
@ -117,18 +117,18 @@ del time</bpmn:script>
</bpmn:message>
<bpmn:correlationProperty id="mcp_topica_two" name="MCP Topica Two">
<bpmn:correlationPropertyRetrievalExpression messageRef="message_send_two">
<bpmn:formalExpression>topica_two</bpmn:formalExpression>
<bpmn:messagePath>topica_two</bpmn:messagePath>
</bpmn:correlationPropertyRetrievalExpression>
<bpmn:correlationPropertyRetrievalExpression messageRef="message_response_two">
<bpmn:formalExpression>topica_two</bpmn:formalExpression>
<bpmn:messagePath>topica_two</bpmn:messagePath>
</bpmn:correlationPropertyRetrievalExpression>
</bpmn:correlationProperty>
<bpmn:correlationProperty id="mcp_topicb_two" name="MCP Topicb Two">
<bpmn:correlationPropertyRetrievalExpression messageRef="message_send_two">
<bpmn:formalExpression>topicb_two</bpmn:formalExpression>
<bpmn:messagePath>topicb_two</bpmn:messagePath>
</bpmn:correlationPropertyRetrievalExpression>
<bpmn:correlationPropertyRetrievalExpression messageRef="message_response_two">
<bpmn:formalExpression>topicb_two</bpmn:formalExpression>
<bpmn:messagePath>topicb_two</bpmn:messagePath>
</bpmn:correlationPropertyRetrievalExpression>
</bpmn:correlationProperty>
<bpmndi:BPMNDiagram id="BPMNDiagram_1">

View File

@ -1,7 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" xmlns:spiffworkflow="http://spiffworkflow.org/bpmn/schema/1.0/core" xmlns:modeler="http://camunda.org/schema/modeler/1.0" id="Definitions_19o7vxg" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="5.0.0" modeler:executionPlatform="Camunda Platform" modeler:executionPlatformVersion="7.17.0">
<bpmn:process id="Process_1" isExecutable="true">
<bpmn:ioSpecification />
<bpmn:startEvent id="Event_1ftsuzw">
<bpmn:outgoing>Flow_1hjrex4</bpmn:outgoing>
</bpmn:startEvent>

View File

@ -4,6 +4,12 @@
<bpmn:ioSpecification>
<bpmn:dataInput id="in_data" name="Input" />
<bpmn:dataOutput id="out_data" name="Output" />
<bpmn:inputSet>
<bpmn:dataInputRefs>in_data</bpmn:dataInputRefs>
</bpmn:inputSet>
<bpmn:outputSet>
<bpmn:dataOutputRefs>out_data</bpmn:dataOutputRefs>
</bpmn:outputSet>
</bpmn:ioSpecification>
<bpmn:startEvent id="Event_1ftsuzw">
<bpmn:outgoing>Flow_1a4nkhi</bpmn:outgoing>

View File

@ -1,7 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" xmlns:spiffworkflow="http://spiffworkflow.org/bpmn/schema/1.0/core" xmlns:modeler="http://camunda.org/schema/modeler/1.0" id="Definitions_19o7vxg" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="5.0.0" modeler:executionPlatform="Camunda Platform" modeler:executionPlatformVersion="7.17.0">
<bpmn:process id="Process_1" isExecutable="true">
<bpmn:ioSpecification />
<bpmn:startEvent id="Event_1ftsuzw">
<bpmn:outgoing>Flow_1hjrex4</bpmn:outgoing>
</bpmn:startEvent>

View File

@ -1,7 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" xmlns:spiffworkflow="http://spiffworkflow.org/bpmn/schema/1.0/core" xmlns:modeler="http://camunda.org/schema/modeler/1.0" id="Definitions_19o7vxg" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="5.0.0" modeler:executionPlatform="Camunda Platform" modeler:executionPlatformVersion="7.17.0">
<bpmn:process id="parent" isExecutable="true">
<bpmn:ioSpecification />
<bpmn:startEvent id="Event_1i37yhp">
<bpmn:outgoing>Flow_1e5oj0e</bpmn:outgoing>
</bpmn:startEvent>

View File

@ -1,7 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" xmlns:spiffworkflow="http://spiffworkflow.org/bpmn/schema/1.0/core" xmlns:modeler="http://camunda.org/schema/modeler/1.0" id="Definitions_19o7vxg" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="5.0.0" modeler:executionPlatform="Camunda Platform" modeler:executionPlatformVersion="7.17.0">
<bpmn:process id="Process_1" isExecutable="true">
<bpmn:ioSpecification />
<bpmn:startEvent id="Event_1ftsuzw">
<bpmn:outgoing>Flow_1hjrex4</bpmn:outgoing>
</bpmn:startEvent>
@ -16,7 +15,7 @@
<spiffworkflow:property name="formJsonSchemaFilename" value="my_json_jschema.json" />
<spiffworkflow:property name="formUiSchemaFilename" value="my_ui_jschema.json" />
</spiffworkflow:properties>
</bpmn:extensionElements>3
</bpmn:extensionElements>
<bpmn:incoming>Flow_1hjrex4</bpmn:incoming>
<bpmn:outgoing>Flow_1vlqqxh</bpmn:outgoing>
</bpmn:userTask>