具有3输出专用网关的BPMN图在Camunda中不起作用

时间:2016-08-11 16:08:02

标签: java eclipse wildfly bpmn camunda

我正在处理一个包含在部署到Camunda的.war文件中的BPMN图表。该图显示正常,我可以完成前两个用户任务,但是当我到达专用网关时,我收到错误消息:表达式中使用的未知属性:$ {Approve == 1}。原因:无法解析标识符'批准'

我还没有确定变量Approve,但我不确定在哪里这样做?我一直在使用BPM图的.xml文件,其中与专用网关相关的代码如下:

<bpmn:sequenceFlow id="SequenceFlow_07b7fwg" name="Approve" sourceRef="ExclusiveGateway_0znxqqy" targetRef="ServiceTask_06fn5cm">
      <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">${Approve == 1}</bpmn:conditionExpression>
    </bpmn:sequenceFlow>
    <bpmn:sequenceFlow id="SequenceFlow_0qnqvj1" sourceRef="ServiceTask_06fn5cm" targetRef="EndEvent_146k48m" />
    <bpmn:endEvent id="EndEvent_0ug591n" name="End">
      <bpmn:incoming>SequenceFlow_1y6i7xo</bpmn:incoming>
    </bpmn:endEvent>
    <bpmn:sequenceFlow id="SequenceFlow_068nx8b" name="Reject" sourceRef="ExclusiveGateway_0znxqqy" targetRef="ServiceTask_17qnuyi">
      <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">${Reject == 2}</bpmn:conditionExpression>
    </bpmn:sequenceFlow>
    <bpmn:sequenceFlow id="SequenceFlow_1irpvhx" sourceRef="ServiceTask_17qnuyi" targetRef="ServiceTask_1jks4hs" />
    <bpmn:sequenceFlow id="SequenceFlow_1mjdjw2" sourceRef="ServiceTask_1jks4hs" targetRef="EndEvent_1qmduq" />
    <bpmn:endEvent id="EndEvent_1qmduq" name="Hello!" />
    <bpmn:sequenceFlow id="SequenceFlow_1deve3u" name="Extra Step" sourceRef="ExclusiveGateway_0znxqqy" targetRef="ServiceTask_09nq79v" />
    <bpmn:sequenceFlow id="SequenceFlow_1y6i7xo" sourceRef="ServiceTask_09nq79v" targetRef="EndEvent_0ug591n" />

这是基于Camunda在此提供的代码:https://docs.camunda.org/manual/7.4/reference/bpmn20/gateways/exclusive-gateway/

还有一些已在Eclipse中创建的步骤的.java文件,并引用相同的BPMN图。我不确定是否应该在.xml文件或.java文件中定义变量,以及如何进行此操作?感谢。

1 个答案:

答案 0 :(得分:2)

您有两个具有条件表达式的序列流。分别对Approve Reject变量的表达式引用。必须在要评估的当前范围中定义这些变量。创建变量有不同的方法,应该在之后进行评估。例如,创建一个表单,您可以在其上完成用户任务并创建变量。

您可以使用task complete REST资源来完成用户任务并创建变量。

也可以在execution listener

中使用Java API
public class ExampleExecutionListenerOne implements ExecutionListener {

  public void notify(DelegateExecution execution) throws Exception {
    execution.setVariable("Approve", true);
  }
}

希望它有所帮助。