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。
我什至可以看到在 IntermediateCatchSignalEventActivityBehavior
和 EventValidator
中都考虑了 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);
}
};
}
});
我正在尝试使用带条件表达式的中间捕获事件创建一个进程。我可以看到 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。
我什至可以看到在 IntermediateCatchSignalEventActivityBehavior
和 EventValidator
中都考虑了 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);
}
};
}
});