groovy - Alfresco Activiti - 创建同一子流程的多个实例

标签 groovy alfresco activiti bpmn alfresco-enterprise

我对一个过程有一个看似相当简单的要求,我开始怀疑它是否可能。

下图显示了我当前的流程。我正在努力实现两件事:

  1. 用户创建一个用于添加注释的初始用户任务,他们应该能够添加任意数量的注释,每个注释一个用户任务

  2. 为用户创建的每个新笔记(用户任务)生成一个新的子流程。

Example Process

上述过程存在以下问题:

  • 应该为每个任务生成一个子流程,但它们似乎会相互覆盖

  • 我不确定子流程是否需要为每个生成的新子流程提供唯一的 ID

最佳答案

事实证明,解决这个问题需要使用 groovy 编写一些脚本。

下面是更新后的流程模型图,在其中我使用脚本任务启动一个Complete Task流程的新实例,然后如果用户希望添加更多任务,独占网关可以返回用户到创建任务(用户任务)完成该过程。

在将范围传回用户任务之前,我会清除脚本任务中用户任务中保存的字段中的所有值。

Update Process

下图显示了我的完成任务流程,该流程由主流程使用脚本调用

Complete Task

在这里,我避免使用并行网关,而是创建创建任务(用户任务)的新实例和完成任务<的新实例 通过脚本进行进程(不是子进程)。

要启动完整任务流程的新实例,我们必须在流程的 runtimeService 实例下使用函数 startProcessInstanceByKeyAndTenantId() 来启动流程,尽管我可以还可以使用startProcessInstanceByIdAndTenantId():

//Import required libraries
import org.activiti.engine.RuntimeService;
import org.activiti.engine.runtime.ProcessInstance;

//instantiate RunTimeService instance
RuntimeService runtimeService = execution.getEngineServices().getRuntimeService();

//get tenant id
String tenantId = execution.getTenantId(); 

//variables Map
Map<String, Object> variables = runtimeService.getVariablesLocal(execution.getProcessInstanceId());

//start process (processId, variables, tenantId)
ProcessInstance completeTask = runtimeService.startProcessInstanceByKeyAndTenantId("CompleteTask", variables, tenantId);

//Clear variables to create a fresh task
execution.setVariable("title", "");
execution.setVariable("details", "");

使用这种方法,我可以避免从父进程创建多个子进程,而是创建与父进程分开运行的多个进程。这对我很有好处,就好像父进程完成了其他进程的继续运行一样。

关于groovy - Alfresco Activiti - 创建同一子流程的多个实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48243378/

相关文章:

design-patterns - 惯用的元编程

android - 如何在 android 中使用 groovy 制作 integrationTest 源集?

groovy - 使用 groovy 类别添加动态属性

java - 如何使自定义 Alfresco AMP 操作失败?

java - CMIS Alfresco 复制文档的所有版本

java - 在“我的个人资料”页面中添加一处特性 - Alfresco Share

java - 终止实例永远不会返回终止状态 aws sdk

java - 如何释放已领取的任务?

ruby-on-rails - 将 Activiti Explorer 与 Ruby on Rails 项目集成

java - 我怎样才能将变量从jvm传递到mule,然后通过这些变量调用web服务并返回对jvm的响应?