Skip to content

Commit 5b511be

Browse files
committed
Use cmmn script task expression value if no string value is missing and do not throw exception if field is missing
Not throwing the exception aligns this with the way it works for BPMN, where no exception is thrown by the model. There will eventually be an exception thrown when the script is executed
1 parent 01cd325 commit 5b511be

File tree

3 files changed

+79
-8
lines changed

3 files changed

+79
-8
lines changed

modules/flowable-cmmn-converter/src/test/java/org/flowable/test/cmmn/converter/ScriptServiceTaskCmmnXmlConverterTest.java

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,4 +84,34 @@ public void validateModel(CmmnModel cmmnModel) {
8484
});
8585
}
8686

87+
88+
@CmmnXmlConverterTest("org/flowable/test/cmmn/converter/script-task-expression-field.cmmn")
89+
public void scriptTaskWithExpressionField(CmmnModel cmmnModel) {
90+
assertThat(cmmnModel).isNotNull();
91+
92+
PlanItem planItemTaskA = cmmnModel.findPlanItem("planItemTaskA");
93+
assertThat(planItemTaskA.getEntryCriteria()).isEmpty();
94+
95+
PlanItemDefinition planItemDefinition = planItemTaskA.getPlanItemDefinition();
96+
assertThat(planItemDefinition)
97+
.isInstanceOfSatisfying(ScriptServiceTask.class, scriptTask -> {
98+
assertThat(scriptTask.getType()).isEqualTo(ScriptServiceTask.SCRIPT_TASK);
99+
assertThat(scriptTask.getScriptFormat()).isEqualTo("javascript");
100+
assertThat(scriptTask.getScript()).isEqualTo("var a = '${testA}';");
101+
assertThat(scriptTask.getResultVariableName()).isEqualTo("scriptResult");
102+
assertThat(scriptTask.isAutoStoreVariables()).isFalse();
103+
assertThat(scriptTask.isBlocking()).isTrue();
104+
assertThat(scriptTask.isAsync()).isFalse();
105+
});
106+
107+
PlanItem planItemTaskB = cmmnModel.findPlanItem("planItemTaskB");
108+
planItemDefinition = planItemTaskB.getPlanItemDefinition();
109+
assertThat(planItemDefinition)
110+
.isInstanceOfSatisfying(ScriptServiceTask.class, scriptServiceTask -> {
111+
assertThat(scriptServiceTask.getScriptFormat()).isEqualTo("groovy");
112+
assertThat(scriptServiceTask.getScript()).isEqualTo("var b = '${testB}';");
113+
assertThat(scriptServiceTask.isAutoStoreVariables()).isTrue();
114+
});
115+
}
116+
87117
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<definitions xmlns="http://www.omg.org/spec/CMMN/20151109/MODEL"
3+
xmlns:dc="http://www.omg.org/spec/CMMN/20151109/DC"
4+
xmlns:di="http://www.omg.org/spec/CMMN/20151109/DI"
5+
xmlns:cmmndi="http://www.omg.org/spec/CMMN/20151109/CMMNDI"
6+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
7+
xsi:schemaLocation="http://www.omg.org/spec/CMMN/20151109/MODEL https://www.omg.org/spec/CMMN/20151109/CMMN11.xsd
8+
http://www.omg.org/spec/CMMN/20151109/DC https://www.omg.org/spec/CMMN/20151109/DC.xsd
9+
http://www.omg.org/spec/CMMN/20151109/DI https://www.omg.org/spec/CMMN/20151109/DI.xsd
10+
http://www.omg.org/spec/CMMN/20151109/CMMNDI https://www.omg.org/spec/CMMN/20151109/CMMNDI11.xsd"
11+
xmlns:flowable="http://flowable.org/cmmn"
12+
targetNamespace="http://flowable.org/cmmn">
13+
14+
<case id="scriptCase" flowable:initiatorVariableName="test">
15+
<casePlanModel id="myScriptPlanModel" name="My Script CasePlanModel">
16+
17+
<planItem id="planItemTaskA" definitionRef="taskA" />
18+
<planItem id="planItemTaskB" definitionRef="taskB" />
19+
<task id="taskA" name="A" flowable:type="script" flowable:scriptFormat="javascript" flowable:resultVariableName="scriptResult" flowable:autoStoreVariables="false">
20+
<extensionElements>
21+
<flowable:field name="script">
22+
<expression><![CDATA[var a = '${testA}';]]></expression>
23+
</flowable:field>
24+
</extensionElements>
25+
</task>
26+
27+
<task id="taskB" name="B" flowable:type="script" flowable:scriptFormat="groovy" flowable:autoStoreVariables="true">
28+
<extensionElements>
29+
<flowable:field name="script">
30+
<expression><![CDATA[var b = '${testB}';]]></expression>
31+
</flowable:field>
32+
</extensionElements>
33+
</task>
34+
35+
</casePlanModel>
36+
</case>
37+
38+
</definitions>

modules/flowable-cmmn-model/src/main/java/org/flowable/cmmn/model/ScriptServiceTask.java

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,7 @@
1212
*/
1313
package org.flowable.cmmn.model;
1414

15-
import java.util.Optional;
16-
17-
import org.flowable.common.engine.api.FlowableException;
15+
import org.apache.commons.lang3.StringUtils;
1816

1917
/**
2018
* @author Dennis
@@ -38,11 +36,16 @@ public void setScriptFormat(String scriptFormat) {
3836
}
3937

4038
public String getScript() {
41-
Optional<String> script = fieldExtensions.stream()
42-
.filter(e -> "script".equalsIgnoreCase(e.getFieldName()))
43-
.findFirst()
44-
.map(FieldExtension::getStringValue);
45-
return script.orElseThrow(() -> new FlowableException("Missing script"));
39+
for (FieldExtension fieldExtension : fieldExtensions) {
40+
if ("script".equalsIgnoreCase(fieldExtension.getFieldName())) {
41+
String script = fieldExtension.getStringValue();
42+
if (StringUtils.isNotEmpty(script)) {
43+
return script;
44+
}
45+
return fieldExtension.getExpression();
46+
}
47+
}
48+
return null;
4649
}
4750

4851
public boolean isAutoStoreVariables() {

0 commit comments

Comments
 (0)