2017-01-25 3 views
0

Hier ist unsere Activiti (Version 5.21) Haupt Diagramm: diagram Code:Activiti - Signal und Anrufaktivität

<?xml version="1.0" encoding="UTF-8"?> 
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" 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" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.activiti.org/test"> 
    <signal id="alertSignal" name="alert"></signal> 
    <process id="Call" name="Call" isExecutable="true"> 
    <callActivity id="callactivity1" name="Call activity 1" calledElement="Call1"> 
     <extensionElements> 
    <activiti:in source="VARIABLE1" target="VARIABLE1"></activiti:in> 
    <activiti:in source="VARIABLE2" target="VARIABLE2"></activiti:in> 
     </extensionElements> 
    </callActivity> 
    <callActivity id="callactivity2" name="Call activity 2" calledElement="Call2"> 
     <extensionElements> 
    <activiti:in source="VARIABLE1" target="VARIABLE1"></activiti:in> 
    <activiti:in source="VARIABLE2" target="VARIABLE2"></activiti:in> 
     </extensionElements> 
    </callActivity> 
    <callActivity id="callactivity3" name="Call activity 3" calledElement="Call3"> 
     <extensionElements> 
    <activiti:in source="VARIABLE1" target="VARIABLE1"></activiti:in> 
    <activiti:in source="VARIABLE2" target="VARIABLE2"></activiti:in> 
     </extensionElements> 
    </callActivity> 
    <startEvent id="startevent1" name="Start"></startEvent> 
    <endEvent id="endevent1" name="End"></endEvent> 
    <endEvent id="endevent2" name="End"></endEvent> 
    <sequenceFlow id="flow1" sourceRef="startevent1" targetRef="callactivity1"></sequenceFlow> 
    <sequenceFlow id="flow2" sourceRef="callactivity1" targetRef="callactivity2"></sequenceFlow> 
    <sequenceFlow id="flow3" sourceRef="callactivity2" targetRef="endevent1"></sequenceFlow> 
    <sequenceFlow id="flow4" sourceRef="callactivity3" targetRef="endevent2"></sequenceFlow> 
    <boundaryEvent id="boundarysignal1" name="Signal" attachedToRef="callactivity1" cancelActivity="true"> 
     <signalEventDefinition signalRef="alertSignal"></signalEventDefinition> 
    </boundaryEvent> 
    <sequenceFlow id="flow5" sourceRef="boundarysignal1" targetRef="callactivity3"></sequenceFlow> 
    </process> 
</definitions> 

Und der erste Anruf Aktivität: diagram 2 Code:

<?xml version="1.0" encoding="UTF-8"?> 
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" 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" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.activiti.org/test"> 
    <signal id="alertSignal" name="alert"></signal> 
    <process id="Call1" name="Call1" isExecutable="true"> 
    <startEvent id="startevent1" name="Start"></startEvent> 
    <userTask id="test-a" name="test-a"> 
     <extensionElements> 
    <activiti:taskListener event="create" expression="#{VARIABLE1.allow(task)}"></activiti:taskListener> 
     </extensionElements> 
    </userTask> 
    <parallelGateway id="parallelgateway1" name="Parallel Gateway"></parallelGateway> 
    <userTask id="test-b" name="test-b"> 
     <extensionElements> 
    <activiti:taskListener event="create" expression="#{VARIABLE1.allow(task)}"></activiti:taskListener> 
     </extensionElements> 
    </userTask> 
    <endEvent id="endevent1" name="End"></endEvent> 
    <sequenceFlow id="flow1" sourceRef="startevent1" targetRef="test-a"></sequenceFlow> 
    <sequenceFlow id="flow2" sourceRef="test-a" targetRef="parallelgateway1"></sequenceFlow> 
    <sequenceFlow id="flow3" sourceRef="parallelgateway1" targetRef="test-b"></sequenceFlow> 
    <sequenceFlow id="flow4" sourceRef="test-b" targetRef="endevent1"></sequenceFlow> 
    <intermediateThrowEvent id="signalintermediatethrowevent1" name="SignalThrowEvent"> 
     <signalEventDefinition signalRef="alertSignal"></signalEventDefinition> 
    </intermediateThrowEvent> 
    <sequenceFlow id="flow5" sourceRef="parallelgateway1" targetRef="signalintermediatethrowevent1"></sequenceFlow> 
    </process> 
</definitions> 

Die Sache ist, dass die Variablen "VARIABLE1" und "VARIABLE2" nicht an die "Call activity 2" übergeben werden, ich vermute, dass etwas mit dem Grenzsignal vielleicht nicht stimmt ? Weil sie an "Call Activity 1" übergeben werden. Irgendwelche Ideen ?

Antwort

1

Woher wissen Sie, dass die Variablen nicht an Call Activity 2 gesendet werden? Sie injizieren die Variablen beim Start des Prozesses?

Ich frage, weil, wenn Sie die Prozessvariablen nicht initialisieren, bevor Sie aufgerufene Aktivität 1 erhalten, dann werden sie tatsächlich nicht in den Unterprozess als Variablen übergeben, sondern sie werden bei Instanziierung der Anrufaktivität 1 Unter initialisiert verarbeiten.

Wenn also die Variablen beim Eintritt in die Anrufaktivität nicht existieren 1, dann gibt es keine Variable 2 in Anrufaktivität passiert

Dieser relativ einfachen Unit-Test sein sollte, zu schaffen zu demonstrieren, welche würde klar irgendwelche Fragen zu Ihrem Szenario.

Dank Greg

+0

Im Variablen beim Start initialisiert. Diese Variablen werden in act_ru_variable für "Call Activity 1" gespeichert. Aber nach dem Signal, wenn "Call Activity 2" versucht, sie zu verwenden, erhalte ich einen Fehler, weil sie nicht weitergeleitet werden. – Mateo

+0

Können Sie einen Komponententest anhängen. Beachten Sie, dass die aktualisierten Werte in der aufgerufenen Aktivität 2 nicht verfügbar sind, wenn die Variablen in der aufgerufenen Aktivität 1 vor dem Senden des Signals aktualisiert werden, da ein aufgerufener Unterprozess in einem eigenen Ausführungskontext existiert. Aber mit einem nit Test sollten wir in der Lage sein zu sehen, was vor sich geht. –

+0

Ich implementierte einen Client (einfache Java-Anwendung mit JDBC) mit dem Ziel der Komponententests und es funktionierte. So war wahrscheinlich etwas in unserem Hauptprojekt. Vielen Dank! – Mateo

Verwandte Themen