【问题标题】:Camunda GET opportunities of XOR Gateway using RESTCamunda 使用 REST 获得 XOR 网关的机会
【发布时间】:2020-10-19 09:30:02
【问题描述】:

我有以下情况:

我想要做的是在我的 Angular 应用程序中获得一个下拉菜单,其中列出了所有书籍的机会。所以我可以在“哈利波特”、“白鲸记”和“鲁滨逊漂流记”之间进行选择。当我选择一本书并按提交时,我会通过 REST 发送一个 POST /complete

它应该看起来像这样,其中选项应该始终与 Camunda 模型中的相同:

我的问题是:如何通过 REST 获取可以选择哪些书籍的信息?这甚至可能吗?应该这样做吗?

【问题讨论】:

  • 什么是 Camunda 模型?
  • BPMN 图
  • 有什么不清楚,书籍要阅读的数据在哪里?
  • 我想从独占网关的传出箭头接收信息。我对 Camunda 很陌生,所以我不确定这是否可能

标签: angular rest bpmn camunda


【解决方案1】:

有一个选项可能对您有所帮助。这个想法是获取流程定义的 BPMN 2.0 XML。您可以解析 xml 并获取网关或任何元素。

标准结果是一个转义的 XML 字符串,其中包含与此定义一起部署的 XML。

版本 7.0 和 7.13

Camunda 的 API 具有以下端点 /process-definition/{id}/xml。它返回流程定义的BPMN 2.0 XML。

版本 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 

【讨论】:

  • 我知道了。因此,例如,可能有一种方法可以通过正则表达式从 xml 中读取信息......仍然感觉有点“hacky”。我试图用枚举类型定义一个Form Field,其中可以选择所有可能的值C#, C, Camunda。我不知道这是否是一种“干净”的方式来做到这一点?使用/task/{id}/form-variables,我至少可以找出表单是否包含布尔值或枚举等。通过/task/{id}/rendered-form,我可以获得表单的HTML。目前我尝试在我的代码中包含 HTML,而不是像在 Camunda Tasklist 中那样包含下拉列表。我可以这样吗???
  • 当然,这是“hacky”,这只是向您展示读取该值是可能的。另一件事是你是否应该追求这一点以及你将如何保持这些价值观。什么对你来说更容易?并且需要较少的维护。您的要求和时间在这里发挥作用。
  • 但是必须有一个干净的方法来做到这一点。在 Camunda 任务列表中,表单也被可视化并且值被转发到网关。我想做到这一点,不同之处在于不是通过 Camunda Cockpit 而是在我的 Angular 应用程序中选择。在最好的情况下,以一种非 hacky 的方式;)
  • 那么,camunda sdk 可能对你有用 > github.com/camunda/camunda-bpm-examples/tree/master/sdk-js/…
  • 我没有让它在我的 Angular 7 应用程序中运行。我现在所做的是将 xml 从我的 BPMN 解析为 JSON 并提取我需要的信息。这很hacky,但我不知道还能做什么......
【解决方案2】:

我从您的问题中了解到,您想要访问网关路由值并将其转换为下拉菜单,甚至在到达那里之前。 据我所知,这是不可能的。网关只是查找执行路径的 if-else 条件。 您可以通过将其传递给流程执行、将其保存在某个脚本中或通过 rest api 获取数据来创建此下拉列表。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-29
    • 1970-01-01
    • 2015-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多