【问题标题】:Generate BPMN using Java Library使用 Java 库生成 BPMN
【发布时间】:2022-11-25 10:04:44
【问题描述】:

尝试生成 BPMN 图,甚至是带有开始事件、结束事件和一些用户任务的基本图。是否有任何可用的 Java 库或 API 可以帮助我实现这一目标。 找了很多地方都没找到合适的。 任何帮助,将不胜感激

【问题讨论】:

    标签: java bpmn business-process-management kie


    【解决方案1】:

    我假设您想要一些带有呈现所述 BPMN 图的 UI 的东西,并且可能允许它由用户创建。 BPMN.io 提供 BPMN.js (git hub link)。您可以在线使用他们的建模器来查看其工作原理。我没有查看将其集成到解决方案中的许可,因此不确定它是否适合您的用例。

    我还会查看一些开源软件包。 Camunda 曾经有一个开源社区版本,我认为它具有建模功能,但几年来我没有检查过它的当前状态。

    【讨论】:

    • 我想要一个提供方法和 API 的依赖项,我可以在我的代码中使用这些方法和 API 来生成 bpmn 文件
    • 也许更多的上下文有助于提出答案。 BPMN 文件中的细节来源是什么?我链接的代码将从它生成的输出中生成一个 BPMN 图。它只是 JS 代码,因此您可以创建它期望的输入并让它输出图表。最后 BPMN 只是 XML,所以困难的部分是将您拥有的任何内容映射到 BPMN 兼容格式。
    【解决方案2】:

    如果您需要 Java 库,可以使用 Camunda model builder API

     public static void main(String[] args) {
    
            BpmnModelInstance modelInst;
            try {
            // File file = new File(ModelModifier.class.getClassLoader().getResource("process1.bpmn").toURI());
                File file = new File("./src/main/resources/process1.bpmn");
            //  modelInst = Bpmn.readModelFromFile(file);
                modelInst = Bpmn.createProcess()
                        .name("Twitter QA")
                        .executable()
                        .startEvent()
                        .userTask().id("ApproveTweet").name("Approve Tweet")
                        .exclusiveGateway().id("isApproved").name("Approved?")
                        .condition("approved", "#{approved}")
                        .serviceTask().id("sendTweet").name("Send tweet")
                        .endEvent().name("Tweet sent")
                        .moveToLastGateway()
                        // done();
                        // Gateway gateway = modelInst.getModelElementById("isApproved");
                        // gateway.builder()
                        .condition("Not approved", "#{!approved}")
                        .serviceTask().name("Send Rejection")
                        .endEvent().name("Tweet rejected").done();
    
                log.info("Flow Elements - Name : Id : Type Name");
                modelInst.getModelElementsByType(UserTask.class).forEach(e -> log.info("{} : {} : {}", e.getName(), e.getId(), e.getElementType().getTypeName()));
    
                Bpmn.writeModelToFile(file, modelInst);
    //        file.createNewFile("/tmp/testDiagram2.bpmn")
    
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    

    这是一个包含几个示例的项目:https://github.com/rob2universe/bpmn-creator

    如果您对 js 也很满意,那么来自 bpmn.io 的 bpmn.js 会更可取

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-25
      • 2021-02-19
      • 2014-10-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多