国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Spring Boot 整合流程引擎 Flowable,so easy

這篇具有很好參考價值的文章主要介紹了Spring Boot 整合流程引擎 Flowable,so easy。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

為啥想寫 flowable 呢?原因很簡單,因為最近在錄的 tienchin 項目視頻會用到,先寫一篇文章和大家打打預(yù)防針,后面視頻再細講。

流程引擎,也算是一個比較常見的工具了,我們在日常的很多開發(fā)中都會用到,當(dāng)然用的最多的就是 OA 系統(tǒng)了,但是在一些非 OA 系統(tǒng)中,我們也會涉及到,比如一個 CRM 中,可能會有合同管理的需求,合同的審批,也是需要流程引擎的。

所以今天我們來簡單聊聊流程引擎,順便寫一個簡單的例子,小伙伴們一起來感受下流程引擎到底是個啥。

1. 流程引擎介紹

Flowable 是一個使用 Java 編寫的輕量級業(yè)務(wù)流程引擎。Flowable 流程引擎可用于部署 BPMN2.0 流程定義(用于定義流程的行業(yè) XML 標(biāo)準(zhǔn)),創(chuàng)建這些流程定義的流程實例,進行查詢,訪問運行中或歷史的流程實例與相關(guān)數(shù)據(jù),等等。

Java 領(lǐng)域另一個流程引擎是 Activiti,不過我覺得這兩個東西,只要你會使用其中一個,另一個就不在話下。

咱就不廢話了,上代碼吧。

2. 創(chuàng)建項目

首先我們創(chuàng)建一個 Spring Boot 項目,引入 Web、和 MySQL 驅(qū)動兩個依賴,如下圖:

Spring Boot 整合流程引擎 Flowable,so easy

項目創(chuàng)建成功之后,我們引入 flowable 依賴,如下:

<dependency>
    <groupId>org.flowable</groupId>
    <artifactId>flowable-spring-boot-starter</artifactId>
    <version>6.7.2</version>
</dependency>

這個會幫我們做一些自動化配置,默認情況下,所以位于 resources/processes 的流程都會被自動部署。

接下來我們在 application.yaml 中配置一下數(shù)據(jù)庫連接信息,當(dāng)項目啟動的時候會自動初始化數(shù)據(jù)庫,將來流程引擎運行時候的數(shù)據(jù)會被自動持久化到數(shù)據(jù)庫中。

spring:
  datasource:
    username: root
    password: 123
    url: jdbc:mysql:///flowable?serverTimezone=Asia/Shanghai&useSSL=false

好啦,配置完成后,我們就可以啟動項目了。項目啟動成功之后,flowable 數(shù)據(jù)庫中就會自動創(chuàng)建如下這些表,將來流程引擎相關(guān)的數(shù)據(jù)都會自動保存到這些表中。

默認的表比較多,截圖只是其中一部分。

Spring Boot 整合流程引擎 Flowable,so easy

3. 畫流程圖

畫流程圖算是比較有挑戰(zhàn)的一個步驟了,也是流程引擎使用的關(guān)鍵。官方提供了一些流程引擎繪制工具,這個我就不說了,感興趣的小伙伴可以自行去體驗;IDEA 也自帶了一個流程可視化的工具,但是特別難用,我這里也就 不說了。

這里說一下我常用的 IDEA 插件 Flowable BPMN visualizer,如下圖:

Spring Boot 整合流程引擎 Flowable,so easy

插件怎么安裝就不用我教了吧,小伙伴們自行安裝即可。

裝好插件之后,我們在 resources 目錄下新建 processes 目錄,這個目錄下的流程文件將來會被自動部署。

接下來我們在 processes 目錄下,新建一個 BPMN 文件(插件裝好了就有這個選項了),如下:

Spring Boot 整合流程引擎 Flowable,so easy

我們來畫個請假的流程,就叫做 ask_for_leave.bpmn20.xml,注意最后面的 .bpmn20.xml 是固定后綴。

文件創(chuàng)建出來之后,右鍵單擊,選擇 View BPMN(Flowable) Diagram,就打開了可視化頁面了,我們就可以來繪制自己的流程圖了。

我的請假流程畫出來是這樣:

Spring Boot 整合流程引擎 Flowable,so easy

員工發(fā)起一個請假流程,首先是組長審核,組長審核通過了,就進入到經(jīng)理審核,經(jīng)理審核通過了,這個流程就結(jié)束了,如果組長審核未通過或者經(jīng)理審核未通過,則流程給員工發(fā)送一個請假失敗的通知,流程結(jié)束。

我們來看下這個流程對應(yīng)的 XML 文件,一些流程細節(jié)會在 XML 文件中體現(xiàn)出來,如下:

<process id="ask_for_leave" name="ask_for_leave" isExecutable="true">
  <userTask id="leaveTask" name="請假" flowable:assignee="#{leaveTask}"/>
  <userTask id="zuzhangTask" name="組長審核" flowable:assignee="#{zuzhangTask}"/>
  <userTask id="managerTask" name="經(jīng)理審核" flowable:assignee="#{managerTask}"/>
  <exclusiveGateway id="managerJudgeTask"/>
  <exclusiveGateway id="zuzhangJudeTask"/>
  <endEvent id="endLeave" name="結(jié)束"/>
  <startEvent id="startLeave" name="開始"/>
  <sequenceFlow id="flowStart" sourceRef="startLeave" targetRef="leaveTask"/>
  <sequenceFlow id="modeFlow" sourceRef="leaveTask" targetRef="zuzhangTask"/>
  <sequenceFlow id="zuzhang_go" sourceRef="zuzhangJudeTask" targetRef="managerTask" name="通過">
    <conditionExpression xsi:type="tFormalExpression"><![CDATA[${checkResult=='通過'}]]></conditionExpression>
  </sequenceFlow>
  <sequenceFlow id="zuzhang_reject" sourceRef="zuzhangJudeTask" targetRef="sendMail" name="拒絕">
    <conditionExpression xsi:type="tFormalExpression"><![CDATA[${checkResult=='拒絕'}]]></conditionExpression>
  </sequenceFlow>
  <sequenceFlow id="jugdeFlow" sourceRef="managerTask" targetRef="managerJudgeTask"/>
  <sequenceFlow id="flowEnd" name="通過" sourceRef="managerJudgeTask" targetRef="endLeave">
    <conditionExpression xsi:type="tFormalExpression"><![CDATA[${checkResult=='通過'}]]></conditionExpression>
  </sequenceFlow>
  <sequenceFlow id="rejectFlow" name="拒絕" sourceRef="managerJudgeTask" targetRef="sendMail">
    <conditionExpression xsi:type="tFormalExpression"><![CDATA[${checkResult=='拒絕'}]]></conditionExpression>
  </sequenceFlow>
  <serviceTask id="sendMail" flowable:exclusive="true" name="發(fā)送失敗提示" isForCompensation="true" flowable:class="org.javaboy.flowable.AskForLeaveFail"/>
  <sequenceFlow id="endFlow" sourceRef="sendMail" targetRef="askForLeaveFail"/>
  <endEvent id="askForLeaveFail" name="請假失敗"/>
  <sequenceFlow id="zuzhangTask_zuzhangJudeTask" sourceRef="zuzhangTask" targetRef="zuzhangJudeTask"/>
</process>

結(jié)合 XML 文件我來和大家解釋一下這里涉及到的 Flowable 中的組件,我們來看下:

  • <process> : 表示一個完整的工作流程。
  • <startEvent> : 工作流中起點位置,也就是圖中的綠色按鈕。
  • <endEvent> : 工作流中結(jié)束位置,也就是圖中的紅色按鈕。
  • <userTask> : 代表一個任務(wù)審核節(jié)點(組長、經(jīng)理等角色),這個節(jié)點上有一個 flowable:assignee 屬性,這表示這個節(jié)點該由誰來處理,將來在 Java 代碼中調(diào)用的時候,我們需要指定對應(yīng)的處理人的 ID 或者其他唯一標(biāo)記。
  • <serviceTask>:這是服務(wù)任務(wù),在具體的實現(xiàn)中,這個任務(wù)可以做任何事情。
  • <exclusiveGateway> : 邏輯判斷節(jié)點,相當(dāng)于流程圖中的菱形框。
  • <sequenceFlow> :鏈接各個節(jié)點的線條,sourceRef 屬性表示線的起始節(jié)點,targetRef 屬性表示線指向的節(jié)點,我們圖中的線條都屬于這種。

流程圖這塊松哥和大家稍微說一下,咋一看這個圖挺復(fù)雜很難畫,但是實際上只要你認認真真去捋一捋這里邊的各個屬性,基本上很快就明白到底是怎么一回事,我也相信各位小伙伴都有這樣的悟性。

4. 開發(fā)接口

接下來我們寫幾個接口,來體驗一把流程引擎。

在正式體驗之前,我們先來熟悉幾個類,這幾個類我們一會寫代碼會用到。

4.1 Java 類梳理

  • ProcessDefinition

這個最好理解,就是流程的定義,也就相當(dāng)于規(guī)范,每個 ProcessDefinition 都會有一個 id。

  • ProcessInstance

這個就是流程的一個實例。簡單來說,ProcessDefinition 相當(dāng)于是類,而 ProcessInstance 則相當(dāng)于是根據(jù)類 new 出來的對象。

  • Activity

Activity 是流程標(biāo)準(zhǔn)規(guī)范 BPMN2.0 里面的規(guī)范,流程中的每一個步驟都是一個 Activity。

  • Execution

Execution 的含義是流程的執(zhí)行線路,通過 Execution 可以獲得當(dāng)前 ProcessInstance 當(dāng)前執(zhí)行到哪個 Activity了。

  • Task

Task 就是當(dāng)前要做的工作。

實際上這里涉及到的東西比較多,不過我們今天先整一個簡單的例子,所以上面這些知識點暫時夠用了。

4.2 查看流程圖

在正式開始之前,我們先準(zhǔn)備一個接口,用來查看流程圖的實時執(zhí)行情況,這樣方便我們查看流程到底執(zhí)行到哪一步了。

具體的代碼如下:

@RestController
public class HelloController {

    @Autowired
    RuntimeService runtimeService;

    @Autowired
    TaskService taskService;

    @Autowired
    RepositoryService repositoryService;

    @Autowired
    ProcessEngine processEngine;

    @GetMapping("/pic")
    public void showPic(HttpServletResponse resp, String processId) throws Exception {
        ProcessInstance pi = runtimeService.createProcessInstanceQuery().processInstanceId(processId).singleResult();
        if (pi == null) {
            return;
        }
        List<Execution> executions = runtimeService
                .createExecutionQuery()
                .processInstanceId(processId)
                .list();

        List<String> activityIds = new ArrayList<>();
        List<String> flows = new ArrayList<>();
        for (Execution exe : executions) {
            List<String> ids = runtimeService.getActiveActivityIds(exe.getId());
            activityIds.addAll(ids);
        }

        /**
         * 生成流程圖
         */
        BpmnModel bpmnModel = repositoryService.getBpmnModel(pi.getProcessDefinitionId());
        ProcessEngineConfiguration engconf = processEngine.getProcessEngineConfiguration();
        ProcessDiagramGenerator diagramGenerator = engconf.getProcessDiagramGenerator();
        InputStream in = diagramGenerator.generateDiagram(bpmnModel, "png", activityIds, flows, engconf.getActivityFontName(), engconf.getLabelFontName(), engconf.getAnnotationFontName(), engconf.getClassLoader(), 1.0, false);
        OutputStream out = null;
        byte[] buf = new byte[1024];
        int legth = 0;
        try {
            out = resp.getOutputStream();
            while ((legth = in.read(buf)) != -1) {
                out.write(buf, 0, legth);
            }
        } finally {
            if (in != null) {
                in.close();
            }
            if (out != null) {
                out.close();
            }
        }
    }
}

這就一個工具,沒啥好說的,一會大家看完后面的代碼,再回過頭來看這個接口,很多地方就都懂了。

4.3 開啟一個流程

為了方便,接下來的代碼我們都在單元測試中完成。

首先我們來開啟一個流程,代碼如下:

String staffId = "1000";
/**
 * 開啟一個流程
 */
@Test
void askForLeave() {
    HashMap<String, Object> map = new HashMap<>();
    map.put("leaveTask", staffId);
    ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("ask_for_leave", map);
    runtimeService.setVariable(processInstance.getId(), "name", "javaboy");
    runtimeService.setVariable(processInstance.getId(), "reason", "休息一下");
    runtimeService.setVariable(processInstance.getId(), "days", 10);
    logger.info("創(chuàng)建請假流程 processId:{}", processInstance.getId());
}

首先由員工發(fā)起一個請假流程,map 中存放的 leaveTask 是我們在 XML 流程文件中提前定義好的,提前定義好當(dāng)前這個任務(wù)創(chuàng)建之后,該由誰來處理,這里我們是假設(shè)由工號為 1000 的員工來發(fā)起這樣一個請假流程。同時,我們還設(shè)置了一些額外信息。ask_for_leave 是我們在 XML 文件中定義的一個 process 的名稱。

好啦,現(xiàn)在我們執(zhí)行這個單元測試方法,執(zhí)行完成后,控制臺會打印出當(dāng)前這個流程的 id,我們拿著這個 id 去訪問 4.2 小節(jié)的接口,結(jié)果如下:

Spring Boot 整合流程引擎 Flowable,so easy

可以看到,請假用紅色的框框起來了,說明當(dāng)前流程走到了這一步。

4.4 將請求提交給組長

接下來,我們就需要將這個請假流程向后推進一步,將請假事務(wù)提交給組長,代碼如下:

String zuzhangId = "90";
/**
 * 提交給組長審批
 */
@Test
void submitToZuzhang() {
    //員工查找到自己的任務(wù),然后提交給組長審批
    List<Task> list = taskService.createTaskQuery().taskAssignee(staffId).orderByTaskId().desc().list();
    for (Task task : list) {
        logger.info("任務(wù) ID:{};任務(wù)處理人:{};任務(wù)是否掛起:{}", task.getId(), task.getAssignee(), task.isSuspended());
        Map<String, Object> map = new HashMap<>();
        //提交給組長的時候,需要指定組長的 id
        map.put("zuzhangTask", zuzhangId);
        taskService.complete(task.getId(), map);
    }
}

首先我們利用 staffId 查找到當(dāng)前員工的 id,進而找到當(dāng)前員工需要執(zhí)行的任務(wù),遍歷這個任務(wù),調(diào)用 taskService.complete 方法將任務(wù)提交給組長,注意在 map 中指定組長的 id。

提交完成后,我們再去看流程圖片,如下:

Spring Boot 整合流程引擎 Flowable,so easy

可以看到,流程圖走到組長審批了。

4.5 組長審批

組長現(xiàn)在有兩種選擇,同意或者拒絕,同意的代碼如下:

/**
 * 組長審批-批準(zhǔn)
 */
@Test
void zuZhangApprove() {
    List<Task> list = taskService.createTaskQuery().taskAssignee(zuzhangId).orderByTaskId().desc().list();
    for (Task task : list) {
        logger.info("組長 {} 在審批 {} 任務(wù)", task.getAssignee(), task.getId());
        Map<String, Object> map = new HashMap<>();
        //組長審批的時候,如果是同意,需要指定經(jīng)理的 id
        map.put("managerTask", managerId);
        map.put("checkResult", "通過");
        taskService.complete(task.getId(), map);
    }
}

通過組長的 id 查詢組長的任務(wù),同意的話,需要指定經(jīng)理,也就是這個流程下一步該由誰來處理。

拒絕的代碼如下:

/**
 * 組長審批-拒絕
 */
@Test
void zuZhangReject() {
    List<Task> list = taskService.createTaskQuery().taskAssignee(zuzhangId).orderByTaskId().desc().list();
    for (Task task : list) {
        logger.info("組長 {} 在審批 {} 任務(wù)", task.getAssignee(), task.getId());
        Map<String, Object> map = new HashMap<>();
        //組長審批的時候,如果是拒絕,就不需要指定經(jīng)理的 id
        map.put("checkResult", "拒絕");
        taskService.complete(task.getId(), map);
    }
}

拒絕的話,就沒那么多事了,直接設(shè)置 checkResult 為拒絕即可。

假設(shè)這里執(zhí)行了同意,那么流程圖如下:

Spring Boot 整合流程引擎 Flowable,so easy

4.6 經(jīng)理審批

經(jīng)理審批和組長審批差不多,只不過經(jīng)理這里是最后一步了,不需要再指定下一位處理人了,同意的代碼如下:

/**
 * 經(jīng)理審批自己的任務(wù)-批準(zhǔn)
 */
@Test
void managerApprove() {
    List<Task> list = taskService.createTaskQuery().taskAssignee(managerId).orderByTaskId().desc().list();
    for (Task task : list) {
        logger.info("經(jīng)理 {} 在審批 {} 任務(wù)", task.getAssignee(), task.getId());
        Map<String, Object> map = new HashMap<>();
        map.put("checkResult", "通過");
        taskService.complete(task.getId(), map);
    }
}

拒絕代碼如下:

/**
 * 經(jīng)理審批自己的任務(wù)-拒絕
 */
@Test
void managerReject() {
    List<Task> list = taskService.createTaskQuery().taskAssignee(managerId).orderByTaskId().desc().list();
    for (Task task : list) {
        logger.info("經(jīng)理 {} 在審批 {} 任務(wù)", task.getAssignee(), task.getId());
        Map<String, Object> map = new HashMap<>();
        map.put("checkResult", "拒絕");
        taskService.complete(task.getId(), map);
    }
}

4.7 拒絕流程

如果組長拒絕了或者經(jīng)理拒絕了,我們也有相應(yīng)的處理方案,首先在 XML 流程文件定義時,如下:

<serviceTask id="sendMail" flowable:exclusive="true" name="發(fā)送失敗提示" isForCompensation="true" flowable:class="org.javaboy.flowable.AskForLeaveFail"/>

如果請假被拒絕,會進入到這個 serviceTask,serviceTask 對應(yīng)的處理類是 org.javaboy.flowable.AskForLeaveFail,該類的代碼如下:

public class AskForLeaveFail implements JavaDelegate {
    @Override
    public void execute(DelegateExecution execution) {
        System.out.println("請假失敗。。。");
    }
}

也就是請假失敗會進入到這個方法中,現(xiàn)在我們就可以在這個方法中該干嘛干嘛了。

5. 小結(jié)

好啦,一個簡單的請假流程,希望能帶小伙伴們?nèi)腴T flowable,公眾后臺回復(fù) flowable,獲取本文案例。

好啦,后面 tienchin 項目視頻中我們再看看這個 flowable 在項目中如何使用:戳戳戳這里–>TienChin 項目配套視頻來啦。文章來源地址http://www.zghlxwxcb.cn/news/detail-468723.html

到了這里,關(guān)于Spring Boot 整合流程引擎 Flowable,so easy的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • Activiti,F(xiàn)lowable,Camunda流程引擎對比

    Activiti,F(xiàn)lowable,Camunda流程引擎對比

    ? ? ? ? 市場上比較有名的開源流程引擎有osworkflow、jbpm、activiti、flowable、camunda。其中:Jbpm4、Activiti、Flowable、camunda四個框架同宗同源,祖先都是Jbpm4,開發(fā)者只要用過其中一個框架,基本上就會用其它三個。osworkflow目前功能簡單,目前已處于不活躍狀態(tài),此處就不展開描

    2024年02月03日
    瀏覽(18)
  • 工作流程引擎之flowable(集成springboot)

    工作流程引擎之flowable(集成springboot)

    現(xiàn)狀:公司各部門業(yè)務(wù)系統(tǒng)有各自的工作流引擎,也有cross function的業(yè)務(wù)在不同系統(tǒng)或OA系統(tǒng)流轉(zhuǎn),沒有統(tǒng)一的去規(guī)劃布局統(tǒng)一的BPM解決方案,近期由于一個項目引發(fā)朝著整合統(tǒng)一的BPM方案,特了解一下市面上比較主流的開源和收費的工作流引擎。本文主要介紹開源的工作流引

    2024年02月08日
    瀏覽(16)
  • Spring Boot 整合 分布式搜索引擎 Elastic Search 實現(xiàn) 我附近的、酒店競排

    Spring Boot 整合 分布式搜索引擎 Elastic Search 實現(xiàn) 我附近的、酒店競排

    本文參考黑馬 分布式Elastic search Elasticsearch是一款非常強大的開源搜索引擎,具備非常多強大功能,可以幫助我們從海量數(shù)據(jù)中快速找到需要的內(nèi)容 在酒店列表頁的右側(cè),有一個小地圖,點擊地圖的定位按鈕,地圖會找到你所在的位置: 點擊定位后,會發(fā)送給服務(wù)端以下請求

    2024年02月06日
    瀏覽(26)
  • Spring Boot 整合 分布式搜索引擎 Elastic Search 實現(xiàn) 搜索、分頁與結(jié)果過濾

    Spring Boot 整合 分布式搜索引擎 Elastic Search 實現(xiàn) 搜索、分頁與結(jié)果過濾

    本文參考黑馬 分布式Elastic search Elasticsearch是一款非常強大的開源搜索引擎,具備非常多強大功能,可以幫助我們從海量數(shù)據(jù)中快速找到需要的內(nèi)容 實現(xiàn)黑馬旅游的酒店搜索功能,完成搜索和分頁 在項目首頁,有一個很大的搜索框、也有分頁按鈕 點擊搜索按鈕,可以

    2024年02月06日
    瀏覽(21)
  • 【springboot中使用@RequestBody MultiValueMap 總是報400,415錯誤-關(guān)于流程引擎flowable】

    在Spring boot 中使用 @RequestBody 會報錯,提示錯誤 Content type ‘a(chǎn)pplication/x-www-form-urlencoded;charset=UTF-8’ not supported,代碼如下: 這個在傳統(tǒng) spring MVC 中是有效的,但是在 Spring boot 中會報錯。 傳統(tǒng)是 Spring MVC 有效,是因為有 mvc:annotation-driven 注解,查資料,mvc:annotation-driven 注解配

    2024年02月17日
    瀏覽(22)
  • 基于jeecg-boot的flowable流程跳轉(zhuǎn)功能實現(xiàn)

    基于jeecg-boot的flowable流程跳轉(zhuǎn)功能實現(xiàn)

    更多nbcio-boot功能請看演示系統(tǒng) gitee源代碼地址 后端代碼: https://gitee.com/nbacheng/nbcio-boot 前端代碼:https://gitee.com/nbacheng/nbcio-vue.git 在線演示(包括H5) : http://122.227.135.243:9888 ? ? ? 今天我們實現(xiàn)nbcio-boot的flowable的流程跳轉(zhuǎn)功能。 一、前端實現(xiàn) 界面實現(xiàn),就是點擊跳轉(zhuǎn)出來

    2024年02月11日
    瀏覽(93)
  • 基于jeecg-boot的flowable流程加簽功能實現(xiàn)

    基于jeecg-boot的flowable流程加簽功能實現(xiàn)

    ? ? 更多nbcio-boot功能請看演示系統(tǒng) gitee源代碼地址 后端代碼: https://gitee.com/nbacheng/nbcio-boot 前端代碼:https://gitee.com/nbacheng/nbcio-vue.git 在線演示(包括H5) : http://122.227.135.243:9888 ? ? ? 今天我們實現(xiàn)nbcio-boot的flowable的流程加簽功能。 一、加簽的幾個概念 1、向前加簽 任務(wù)在

    2024年02月11日
    瀏覽(96)
  • 基于jeecg-boot的flowable流程收回功能實現(xiàn)(全網(wǎng)首創(chuàng)功能)

    基于jeecg-boot的flowable流程收回功能實現(xiàn)(全網(wǎng)首創(chuàng)功能)

    更多nbcio-boot功能請看演示系統(tǒng) gitee源代碼地址 后端代碼: https://gitee.com/nbacheng/nbcio-boot 前端代碼:https://gitee.com/nbacheng/nbcio-vue.git 在線演示(包括H5) : http://122.227.135.243:9888 ? ? ? ? ? ? ? 對于之前的flowable流程,之前有撤回,拒絕,退回等功能,但都不能滿足發(fā)起人對于

    2024年02月12日
    瀏覽(93)
  • Spring Boot 中動態(tài)創(chuàng)建 Flowable 工作流

    在 Spring Boot 中動態(tài)創(chuàng)建 Flowable 工作流可以通過以下步驟實現(xiàn): 1.?創(chuàng)建 Flowable 配置:首先,您需要在 Spring Boot 應(yīng)用程序中配置 Flowable。您可以使用 Spring Boot 的配置文件或注解來配置 Flowable。 2.?創(chuàng)建工作流定義:接下來,您需要創(chuàng)建工作流定義。您可以使用 Flowable 的 API 來

    2024年02月10日
    瀏覽(18)
  • boot-admin整合flowable官方editor-app進行BPMN2.0建模

    boot-admin整合flowable官方editor-app進行BPMN2.0建模

    正所謂百家爭鳴、見仁見智、眾說紛紜、各有千秋!在工作流bpmn2.0可視化建模工具實現(xiàn)的細分領(lǐng)域,網(wǎng)上撲面而來的是 bpmn.js 這個渲染工具包和web建模器,而筆者卻認為使用flowable官方開源 editor-app 才是王道。 Flowable 開源版本中的 web 版流程設(shè)計器editor-app,展示風(fēng)格和功能基

    2023年04月20日
    瀏覽(20)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包