Activiti 6.0 中间捕获事件中的 SignalExpression

SignalExpression in Activiti 6.0 Intermediate Catching event

我正在尝试使用带条件表达式的中间捕获事件创建一个进程。我可以看到 SignalEventDefinition 有一个名为 signalExpression 的 属性。但不知何故我无法使用它。

这是来自 BaseBpmnXMLConverter 的代码。

protected void writeSignalDefinition(Event parentEvent, SignalEventDefinition signalDefinition, XMLStreamWriter xtw) throws Exception {
    xtw.writeStartElement(ELEMENT_EVENT_SIGNALDEFINITION);
    writeDefaultAttribute(ATTRIBUTE_SIGNAL_REF, signalDefinition.getSignalRef(), xtw);
    if (parentEvent instanceof ThrowEvent && signalDefinition.isAsync()) {
      BpmnXMLUtil.writeQualifiedAttribute(ATTRIBUTE_ACTIVITY_ASYNCHRONOUS, "true", xtw);
    }
    boolean didWriteExtensionStartElement = BpmnXMLUtil.writeExtensionElements(signalDefinition, false, xtw);
    if (didWriteExtensionStartElement) {
      xtw.writeEndElement();
    }
    xtw.writeEndElement();
  }

我不知道如何在 signalEventDefinition 中创建 signalExpression。

我什至可以看到在 IntermediateCatchSignalEventActivityBehaviorEventValidator 中都考虑了 signalExpression。所以看起来我不知道如何在捕获事件中使用 signalExpression。谁能帮我找到正确的方法。

我正在使用 Activiti 6.0 和我自己的自定义 UI 创建 BPMN 模型,该模型依次调用 activiti-bpmn-converter 来生成流程定义 XML。

我就是这样让它工作的

 BpmnXMLConverter.addConverter(new CatchEventXMLConverter() {
      @Override
      protected void writeSignalDefinition(Event parentEvent,
          SignalEventDefinition signalDefinition, XMLStreamWriter xtw) throws Exception {
        xtw.writeStartElement(ELEMENT_EVENT_SIGNALDEFINITION);
        writeDefaultAttribute("activiti:"+ATTRIBUTE_SIGNAL_EXPRESSION, signalDefinition.getSignalExpression(), xtw);
        if (parentEvent instanceof ThrowEvent && signalDefinition.isAsync()) {
          BpmnXMLUtil.writeQualifiedAttribute(ATTRIBUTE_ACTIVITY_ASYNCHRONOUS, "true", xtw);
        }
        boolean didWriteExtensionStartElement =
            BpmnXMLUtil.writeExtensionElements(signalDefinition, false, xtw);
        if (didWriteExtensionStartElement) {
          xtw.writeEndElement();
        }
        xtw.writeEndElement();
      }
    });
((ProcessEngineConfigurationImpl) activitiRule.getProcessEngine()
    .getProcessEngineConfiguration())
        .setActivityBehaviorFactory(new DefaultActivityBehaviorFactory() {
          @Override
          public IntermediateCatchSignalEventActivityBehavior createIntermediateCatchSignalEventActivityBehavior(
              IntermediateCatchEvent intermediateCatchEvent,
              SignalEventDefinition signalEventDefinition, Signal signal) {


            return new IntermediateCatchSignalEventActivityBehavior(signalEventDefinition,
                signal) {
              /**
                   * 
                   */
              private static final long serialVersionUID = 1L;

              @Override
              public void execute(DelegateExecution execution) {
                CommandContext commandContext = Context.getCommandContext();
                ExecutionEntity executionEntity = (ExecutionEntity) execution;

                String signalName = null;

                Expression signalExpression =
                    commandContext.getProcessEngineConfiguration().getExpressionManager()
                        .createExpression(signalEventDefinition.getSignalExpression());
                signalName = signalExpression.getValue(execution).toString();


                commandContext.getEventSubscriptionEntityManager().insertSignalEvent(signalName,
                    signal, executionEntity);
              }

            };
          }

        });