Camunda跳转到下一个用户任务。

3

我正在尝试串联任务,我可以通过在TaskListener创建脚本中运行以下代码来获取下一个用户任务的任务ID:

var system = java.lang.System;
system.out.println(task.id);

返回正确的 ID。

然后,我想要在浏览器中更新 URL 为 "ip:port/camunda/app/tasklist/default/#/?task=" + task.id

但因为 TaskListener Create 脚本不是在浏览器内部运行的(实际原因不确定),所以我没有可用的 'window.location'。

有没有简单的解决方案?

2个回答

2

对于任何感兴趣的人,我们找到了一个解决方案。

我们使用 REST api 的 GET 任务命令,代码如下:

camForm.on('submit-success', function() {
inject(['$rootScope', function($rootScope) {
  var user = $rootScope.authentication.name;
  setTimeout(function(){  
    $.get("/engine-rest/task?sortBy=created&sortOrder=desc&assignee=" + user, function(data) {
      window.location.replace("http://is-company.intelligentsystems.lan:8080/camunda/app/tasklist/default/#/?task="+ data[0].id);
   });
  }, 300);
}]);
});

当你按下任务的开始/完成按钮并且处理成功(submit-success)时,此代码将被调用,然后它会查找当前用户,并搜索分配给该用户的最新任务,并使用window.location.replace在url中设置它。
我们遇到了一个问题,即当立即运行代码时任务尚未完全创建,但在获取任务ID之前添加一个小延迟300(可以更小,但安全第一)就解决了这个问题。

1
任何您添加到流程模型的脚本都是在服务器端执行的(包括任务监听器),除非它属于任务表单。 task 对象是 Java 类 org.camunda.bpm.engine.delegate.DelegateTask 的实例。您可以通过编写 task.complete() 来跳过当前任务。
链接:

我意识到(发布后)脚本是在服务器端运行的,但是将任务设置为完成并不能解决我的问题。我正在尝试在不需要多次点击之间尽可能无缝地从一个用户任务转到另一个用户任务(用户任务会自动分配给启动流程的用户)。 - NoShadowKick

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接