如何在 jbpm-WorkBench 的 BPMN Process 中设置 WorkItem 中的参数

How to set Parameter in WorkItem to be reached within BPMN Process in jbpm-WorkBench

我创建了一个带有一些参数的自定义 WorkItem,我已经在 WorkDefinitions.wid 文件中注册了这些参数。然后在业务流程中,我还为整个流程创建变量定义,并将自定义工作项的 WD.wid 中的变量定义引用到在 BP 中创建的变量定义。

WorkItem 执行代码,该代码在启动进程后从表单中获取这些参数。为此,我使用 getParameter()- 方法; 它看起来如下:

public void executeWorkItem(WorkItem workItem, WorkItemManager manager) {

String payload = workItem.getParameter("id") + ... ;
...
manager.completeWorkItem(workItem.getId(), null);
}

一切看起来和工作正常,因为 WorkItem 将成功执行并且我得到结果(在 BP 中执行 workItem 后在服务器端); 但是现在我需要在使用输入的参数执行 POST 方法后获得响应。在代码中,我创建了一个新变量,它从响应主体获取参数,当我执行纯代码(没有 BPMN - 流程)时,我可以在 IDE 的控制台中看到结果,但我还需要注册WorkItem 中的这个变量,以便将它进一步用于我的 BProcess 中的下一个任务。

所以我的问题是:是否有类似于 getParameter() - 方法,但类似于 setParameter() 的东西?我怎么能在 WorkItem 中注册它,我怎么能在 jbpm 的 BProcess 中 get/reach 那些 parameter/variable(我相信是全局变量)。

非常感谢!

我不知道您使用的是哪个版本,但是对于 jBPM 6.3,我曾经通过使用不同的执行方法定义来定义自定义 java 工作项来执行相同的操作。对我来说,它看起来像这样:

public Map<String, Object> execute(WorkItem workItem) throws Exception {
    Map<String, Object> result = new HashMap<String, Object>();
    result.put("outputparam", "hello world");
    return result;
}

使用它,我可以将 "outputparam" 引用为我的自定义服务节点的工作流过程中的数据输出分配。

查看WorkItemManager的Javadoc,查看completeWorkItem方法的参数。您可以在地图中传递结果。然后,您将获得这些值作为正在执行的任务的输出参数,并将它们映射到一些流程变量,以便下一个任务可以使用它们。