提问人:CrazyEight 提问时间:6/29/2020 更新时间:7/5/2020 访问量:839
使用 REST 的 XOR 网关的 Camunda GET 机会
Camunda GET opportunities of XOR Gateway using REST
问:
我想做的是在我的 Angular 应用程序中获取一个下拉菜单,其中列出了所有书籍的机会。所以我可以在《哈利波特》、《白鲸》和《鲁滨逊漂流记》之间进行选择。当我选择一本书并按提交时,我通过 REST 发送了 POST。/complete
它应该看起来像这样,其中选项应该始终与 Camunda 模型中的选项相同:
我的问题是:我怎样才能获得可以通过REST选择哪些书籍的信息?这甚至可能吗,这是应该做的吗?
答:
0赞
rahulP
7/3/2020
#1
我从您的问题中了解到,您想要访问网关路由值并在到达那里之前将其转换为下拉菜单。 据我所知,这是不可能的。网关只是查找执行路由的 if-else 条件。 您可以通过将此下拉列表传递给进程执行、将其保留在某个脚本中或通过 REST API 获取数据来创建此下拉列表。
0赞
abestrad
7/5/2020
#2
有一个选项可能会对您有所帮助。这个想法是获取流程定义的 BPMN 2.0 XML。您可以解析 xml 并获取网关或任何元素。
标准结果是一个转义的 XML 字符串,其中包含部署此定义时使用的 XML。
版本 7.0 和 7.13
Camunda 的 API 具有以下端点。它返回流程定义的 XML。/process-definition/{id}/xml
BPMN 2.0
版本 7.13
添加了其他端点,
返回不属于任何租户的最新版本的进程定义的 XML
获取/process-definition/key/{key}/xml
返回租户的最新版本的进程定义的 XML
获取/process-definition/key/{key}/tenant-id/{tenant-id}/xml
结果
请求
http://localhost:5115/engine-rest/process-definition/Process_16yhb92:1:1605d9ef-be29-11ea-a3af-0242ac160003/xml
图
您的 XML 应如下所示:
"bpmn20Xml": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<bpmn:definitions xmlns:bpmn=\"http://www.omg.org/spec/BPMN/20100524/MODEL\" xmlns:bpmndi=\"http://www.omg.org/spec/BPMN/20100524/DI\" xmlns:dc=\"http://www.omg.org/spec/DD/20100524/DC\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:di=\"http://www.omg.org/spec/DD/20100524/DI\" id=\"Definitions_0tnus7x\" targetNamespace=\"http://bpmn.io/schema/bpmn\" exporter=\"Camunda Modeler\" exporterVersion=\"3.5.0\">\n <bpmn:process id=\"Process_16yhb92\" isExecutable=\"true\">\n <bpmn:startEvent id=\"StartEvent_1\">\n <bpmn:outgoing>SequenceFlow_05h0ut0</bpmn:outgoing>\n </bpmn:startEvent>\n **<bpmn:exclusiveGateway id=\"ExclusiveGateway_1\">\n**
...
...
sourceRef=\"Task_1mivaws\" targetRef=\"ExclusiveGateway_1\" />\n
评论
0赞
CrazyEight
7/6/2020
我抓住你了。因此,可能有一种方法可以通过正则表达式从 xml 中读出信息,例如......还是感觉有点“骇人听闻”。我试图定义一个类型枚举,其中可以选择所有可能的值。我不知道这是否是一种“干净”的方法?有了我,我至少可以找出表单是否包含布尔值或枚举等。通过我可以获取表单的 HTML。目前,我尝试将 HTML 包含在我的代码中,而不是像在 Camunda Tasklist 中那样的下拉列表。我可以这样做吗???Form Field
C#, C, Camunda
/task/{id}/form-variables
/task/{id}/rendered-form
0赞
abestrad
7/6/2020
当然,这是“hacky”,这只是向您展示读取该值是可能的。另一件事是你是否应该追求这一点,以及你将如何保持这些价值观。什么对你来说更容易?并且需要较少的维护。您的要求和时间在这里起着重要作用。
0赞
CrazyEight
7/6/2020
但必须有一种干净的方法来做到这一点。在 Camunda Tasklist 中,表单也会被可视化,并且值会转发到网关。我想做到这一点,不同的是不是通过 Camunda Cockpit 选择,而是在我的 Angular 应用程序中选择。在最好的情况下,以一种非黑客的方式;)
0赞
abestrad
7/6/2020
然后,camunda sdk 对您有用>github.com/camunda/camunda-bpm-examples/tree/master/sdk-js/...... <
0赞
CrazyEight
7/9/2020
我没有在我的 Angular 7 应用程序中运行它。我现在所做的是将 xml 从我的 BPMN 解析为 JSON 并提取我需要的信息。这很骇人听闻,但我不知道还能做什么......
评论