2016-05-31 21 views
3

Zum Beispiel habe ich einen Workflow, der sofort oder mit einer Verzögerung (startTime Variable) beginnen kann.Wie überprüfe ich in Activiti, ob eine Variable gesetzt ist?

Direkt nach der startEvent Ich habe eine exclusiveGateway wo ich überprüfe, ob der Fluss weitergehen oder bis startTime warten soll.

<exclusiveGateway id="startGateway" default="startSequenceFlow3"/> 
<sequenceFlow id="startSequenceFlow1" sourceRef="startGateway" targetRef="startTimer"> 
    <conditionExpression xsi:type="tFormalExpression"><![CDATA[${startTime != null}]]></conditionExpression> 
</sequenceFlow> 

Starten des Workflow eine Variable vorbei startTime funktioniert gut, aber keine startTime vorbei löst eine Ausnahme:

kann nicht aufgelöst werden Bezeichner 'starttime'

Was ist der beste Weg wäre, prüfen, ob startTime gesetzt ist, da startTime != null nicht funktioniert? Ich würde es vorziehen, eine startTime überhaupt nicht zu passieren (nicht startTime=null).

-Code, die ich mit der Variable verwenden:

variables.put("startTime", startTime); 
ProcessInstance instance = runtimeService.startProcessInstanceByKey(processKey, variables); 

oder ohne:

ProcessInstance instance = runtimeService.startProcessInstanceByKey(processKey, variables); 
+1

Statt nicht Einstellung 'startTime' überhaupt, können Sie es auf einen speziellen Wert gesetzt könnten zum Beispiel' NONE', und dann in dem Prozess prüfen, ob es auf 'NONE'-Set um zu entscheiden, was zu tun ist. – Jesper

Antwort

5

Verwenden Sie den folgenden Ausdruck:

${execution.getVariable('startTime') != null} 
+0

IMO das ist die beste Antwort. –

3

Sie starttime Variable in beiden Fällen setzen müssen;

variables.put("startTime", startTime); 
ProcessInstance instance = runtimeService.startProcessInstanceByKey(processKey, variables); 

und

variables.put("startTime", null); 
ProcessInstance instance = runtimeService.startProcessInstanceByKey(processKey, variables); 

Dann Variable in Gateway überprüfen

<exclusiveGateway id="startGateway" default="waitSequenceFlow"/> 
<sequenceFlow id="startSequenceFlow" sourceRef="startGateway" targetRef="firstTask"> 
    <conditionExpression xsi:type="tFormalExpression"><![CDATA[${empty startTime}]]></conditionExpression> 
</sequenceFlow> 
<sequenceFlow id="waitSequenceFlow" sourceRef="startGateway" targetRef="startTimer"/> 

ODER

Sie können http://www.activiti.org/userguide/#bpmnTimerStartEvent

+0

Ja Ich weiß, dass ich die Variable auf 'null' setzen kann. Ich hätte lieber eine Methode, bei der ich die Variable nicht setzen muss. Zum Beispiel habe ich zwei GUIs und jede von ihnen füllt nur die Variablen, die es zur Verfügung stellt, was bedeutet, dass in GUI1 verschiedene Variablen als in GUI2 sind. Ich habe den Status erhöht, kann ihn aber nicht als Antwort markieren. –

+0

Sie können ServiceTask vor Gateway hinzufügen, um zu prüfen, ob die Variable gesetzt ist. Ist dies nicht der Fall, setzen Sie sie auf null. – fersmi

Verwandte Themen