Java 配置中的JBPM服务任务分配输入

Java 配置中的JBPM服务任务分配输入,java,jboss,jbpm,business-process-management,drools-guvnor,Java,Jboss,Jbpm,Business Process Management,Drools Guvnor,我有一个JBPM进程,其中我添加了服务任务Rest。在分配输入中,我希望通过配置文件而不是直接在源字段中设置url 我正在研究3天,但仍然找不到它 是否有任何选项可以这样设置url值: Config config = new Config(); /** Output Variables in a HashMap ***/ Map<String, Object> resultMap = new HashMap<String, Object&g

我有一个JBPM进程,其中我添加了服务任务Rest。在分配输入中,我希望通过配置文件而不是直接在源字段中设置url

我正在研究3天,但仍然找不到它

是否有任何选项可以这样设置url值:

    Config config = new Config();
    

    /** Output Variables in a HashMap ***/
    Map<String, Object> resultMap = new HashMap<String, Object>();
    resultMap.put("Result", msg); // ("name of variable", value)
    resultMap.put("url", "http://" + config.getProperty("ip") + config.getProperty("port") + "/update");
    manager.completeWorkItem(workItem.getId(), resultMap);
http://{ip地址}/{port}/update

正如您在上面的示例中所看到的,应该从配置文件或属性文件中读取ip地址和端口

下一部分只是检查一切是否正常

我能否达到这样的效果:

    Config config = new Config();
    

    /** Output Variables in a HashMap ***/
    Map<String, Object> resultMap = new HashMap<String, Object>();
    resultMap.put("Result", msg); // ("name of variable", value)
    resultMap.put("url", "http://" + config.getProperty("ip") + config.getProperty("port") + "/update");
    manager.completeWorkItem(workItem.getId(), resultMap);
Config=new Config();
/**HashMap中的输出变量***/
Map resultMap=new HashMap();
resultMap.put(“Result”,msg);//(“变量名称”,值)
resultMap.put(“url”、“http://”+config.getProperty(“ip”)+config.getProperty(“端口”)+“/update”);
manager.completeWorkItem(workItem.getId(),resultMap);
新编辑

也许我写的有点混乱,但像这样,整个url需要在配置中,我想要的只是从配置中读取ip和端口,然后像这样手动写入源代码:http://(由我手动写入)+ip:port(由配置读取)/更新(由我手动写入)。正如我在上面写的,我只需要配置中的ip和端口值。这就是为什么我将它们写为上面的{ipVar}:{portVar}

新编辑: 谢谢你的详细回答。也许我写得很混乱,所以我会解释这张图片:

你们看,我的观点是只从配置中获取ip和端口,以及用户想要写的任何东西,因为可能还有其他端点

例如: http://{ip}:{port}/create/user/bashir 或 https://{ip}:8080/asd/update


我想从配置中获取ip和端口作为变量,并在需要分配时使用它,例如URL。

您有两种解决方案:

  • 第一个:要创建您自己的Rest任务,我们称之为WorkItem,它包括开发您自己的任务,您可以在其中以您想要的方式使用RESTAPI。看看如何创建WorkItem
  • 第二个:您需要创建一个WorkItem(自定义任务),在服务任务Rest之前调用它,它将只从配置文件导入数据,并将导入的值分配到全局变量中。然后,在服务任务Rest中,必须在源字段中输入每个输入的变量名称
我希望我的回答是清楚和有帮助的。我总是这样做的

编辑:您必须按如下方式更改代码

Config config = new Config();


/** Output Variables in a HashMap ***/
Map<String, Object> resultMap = new HashMap<String, Object>();
resultMap.put("Result", msg); // ("name of variable", value)
resultMap.put("url", "http://" + config.getProperty("ip") +":"+ config.getProperty("port"));
manager.completeWorkItem(workItem.getId(), resultMap);
然后,转到变量定义,定义一个名为urlfinalURL的字符串类型变量,如下所示(法语)

稍后,您将绘制任务并按如下方式放置输出:

现在,配置文件中的url被分配给变量url,现在需要将url与端点连接起来(ip:port/update)。为此,您需要添加一个脚本任务,在其中添加以下代码行:

kcontext.setVariable("finalURL",url+"/update"); //this will assign the url + "/update" to the variable finalURL
最后一步,在您共享的屏幕截图中,对于url,您可以从组合框中选择名为finalURL的变量,如下所示

Config config = new Config();


/** Output Variables in a HashMap ***/
Map<String, Object> resultMap = new HashMap<String, Object>();
resultMap.put("Result", msg); // ("name of variable", value)
resultMap.put("url", "http://" + config.getProperty("ip") +":"+ config.getProperty("port"));
manager.completeWorkItem(workItem.getId(), resultMap);

你好,巴希尔,谢谢你的快速回答。如果我更改配置文件,我是否需要重新构建并上传jar?这是第一个解决方案。关于第二个解决方案:我仍然需要用java等创建jbpm项目?如果更改配置,则不必重新上传新的jar(这两种解决方案都是如此),只有在更改代码中的某些内容时才能这样做。对于第二个问题,是的,您必须用java创建一个workitem(就像第一个解决方案一样),然后上载jar,这将是您的工作流中的一个任务,它只从配置文件导入数据,并将它们分配到将在默认服务任务Rest中使用的变量中(在源字段中使用变量,就像在屏幕截图中一样)。总而言之,在这两种解决方案中,你都需要创建工作项,区别只是在逻辑上。我认为第一种解决方案不适合我的最终结果,因为我没有全局变量。我想这样做:当我在作业中写入:http://{ipVar}:{portVar}/update时,我认为第二种解决方案对我来说会有效。因为我需要使用全局变量在服务任务Rest输入分配中使用它,并在url的源字段中写入:http://{ipVar}:{portVar}/update