问题
我有几种 Activiti 任务类型,基本类型是 ServiceTask
和 UserTask
。
一些 ServiceTask
类型是 Java 实现,每个类型都不同。然后还有其他的。
我想在我的代码中区分它们。
问题
是否可以在任务中存储一些自定义属性/属性,如果可以,如何存储?
示例:
实现简单日志记录功能的 ServiceTask
应该有一个属性“TYPE”,其值为“LOGGING”,稍后我可以查询该属性。
我尝试使用FieldExtension
,但是当我运行工作流程时,Activiti 抛出错误:
org.activiti.engine.ActivitiIllegalArgumentException: Field definition uses unexisting field 'TYPE'
CustomProperty
也会发生同样的情况。
当然,我可以通过在 Java 类中声明该字段来解决这个问题,但我需要一个也适用于非 Java 服务任务和用户任务的解决方案。或者如果可能的话对于所有流程元素来说更好。
非常感谢!
最佳答案
您可以在 XML/Designer 中定义字段:
<serviceTask id="javaService"
name="Java service invocation"
activiti:class="org.activiti.examples.bpmn.servicetask.ToUppercase">
<extensionElements>
<activiti:field name="text" stringValue="Hello World" />
</extensionElements>
</serviceTask>
如果你想在Java代码中访问该字段,你可以这样做:
public class ToUppercase implements JavaDelegate {
Expression text;
public void execute(DelegateExecution execution) throws Exception {
String value = (String) text.getValue(execution);
value = value.toUpperCase();
execution.setVariable("upperedText", value);
}
}
如果你想访问 UserTask 中的变量,你必须实现 TaskListener 而不是 JavaDelegate。
关于activiti - 如何在 Activiti 任务中使用自定义变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36224405/