activiti - 如何在 Activiti 任务中使用自定义变量

标签 activiti

问题

我有几种 Activiti 任务类型,基本类型是 ServiceTaskUserTask

一些 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/

相关文章:

java - Activiti 中用户任务的边界事件未触发

mysql - Activiti 引擎与自定义用户和组数据表集成

grails - FormService中的未知类型 'processDefinition'

java - Activiti候选小组作业实现

java - 在微服务中用Activiti生成聚合层是否明智

javascript - 从 javascript 内部抛出异常

spring-boot - 在 Spring Boot 嵌入式容器中部署第三方 war

java - 如何从java程序启动activiti工作流程

事件 6 : Parallel gateway with Async Executor is not working while joining two parallel tasks

spring - 在 Grails 中将 Activiti 连接为 Spring Bean