日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

基于camunda如何实现会签:camunda会签流程配置与原理解析

發布時間:2023/12/14 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基于camunda如何实现会签:camunda会签流程配置与原理解析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、背景

市場上比較有名的開源流程引擎有osworkflow、jbpm、activiti、flowable、camunda。由于jbpm、activiti、flowable這幾個流程引擎出現的比較早,國內人用的比較多,大家對camunda流程引擎認識的不多,實際上camunda在功能上、穩定性、性能、輕量化方面均比jbpm、activiti、flowable優秀。中國人使用業務流程,“會簽”是一個最常用的流程操作,那么如何基于camunda實現會簽流程,會簽背后的流程引擎執行原理是什么,筆者希望通過這篇文章給正在研究camunda的同學參考,拋磚引玉。

二、什么是會簽

會簽:?在流程業務管理中,任務是通常都是由一個人去處理的,而多個人同時處理一個任務,這種任務我們稱之為會簽任務。

1、按照會簽執行的順序:

a)串行會簽:串行會簽也叫順序會簽,指按照提交流程處理人的次序user1、user2、user3依次接收待辦任務,并按順序處理流程。

b) 并行會簽:指user1、user2、user3同時接收到流程待辦任務,并行處理。

2、按照會簽通過的比例:

a)?? ?全部通過:會簽人全部審批通過表決后,會簽通過。

b)?? ?按數量通過:達到一定數量的通過表決后,會簽通過。

c)?? ?按比例通過:達到一定比例的通過表決后,會簽通過。

d)?? ?一票通過:只要有一個表決通過的,會簽通過。

e)?? ?一票否決:只要有一個表決時否定的,會簽通過。

以下介紹基于camunda流程引擎如何實現會簽,并詳細解析流程引擎運行的原理。

三、安裝camunda BPM

首先完成camunda流程引擎的部署和camunda流程設計器的部署,并新建三個用戶user1、user2、user3,為設計會簽流程準備。詳細操作見:《Camunda流程引擎快速入門——Hello World示例》,Camunda流程引擎快速入門——Hello World示例_大齡碼農有夢想的博客-CSDN博客_camunda

四、設計會簽流程圖

1、畫流程圖,設置一個會簽節點

Camunda實現會簽是基于多實例任務,將節點設置成多實例,主要通過在UserTask節點的屬性上配置。選則一個用戶任務在下面的屬性中選擇Multil instance,可以看到有兩種圖標,分別表示串行會簽和并行會簽。

2、會簽參數設置

主要參數配置說明:

  • loop cardinality:循環基數。可選項。可以直接填整數,表示會簽的人數。
  • Collection:集合。可選項。會簽人數的集合,通常為list,和loop cardinality二選一。
  • Element variable:元素變量。選擇Collection時必選,為collection集合每次遍歷的元素。
  • Completion condition:完成條件。可選。比如設置一個人完成后會簽結束,那么其他人的代辦任務都會消失。
  • 設置完成后,會簽節點的代碼片段:

    <bpmn:userTask id="Activity_1udxyrq" name="會簽" camunda:assignee="${assignee}"><bpmn:incoming>Flow_1258z36</bpmn:incoming><bpmn:outgoing>Flow_0248t03</bpmn:outgoing><bpmn:multiInstanceLoopCharacteristics camunda:collection="assigneeList" camunda:elementVariable="assignee" /> </bpmn:userTask>

    3、配置流程處理人

    需要注意的是,右側的Assignee,Candidate Users,Candidate Groups,分別表示按照負責人/候選用戶/候選組。

    采用Assignee,填寫上一步中的Element Variable字段的內容,即可獲取當前審批人,注意是動態變量,${}格式,即會簽人Collection中遍歷的每一個人賦值給該變量。

    4、配置流程監聽事件

    為了更好的實現會簽可以結合流程節點監聽功能Listener處理,監聽種類有Java class、Expression、Delegate expression、script,文本為了簡單,使用script配置會簽處理人。

    如何使用groovy script,詳細請參考camunda官方文檔:https://docs.camunda.org/manual/latest/user-guide/process-engine/scripting/

    設置完成后,executionListener的配置片段如下:

    <bpmn:extensionElements><camunda:executionListener event="start"><camunda:script scriptFormat="groovy">def userList = ['user1', 'user2', 'user3'];execution.setVariable("assigneeList", userList);</camunda:script></camunda:executionListener> </bpmn:extensionElements>

    5、完整的BPMN流程文件

    完整的BPMN流程模型文件:

    <?xml version="1.0" encoding="UTF-8"?><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:camunda="http://camunda.org/schema/1.0/bpmn" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" xmlns:modeler="http://camunda.org/schema/modeler/1.0" id="Definitions_1lsa7z1" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="4.8.1" modeler:executionPlatform="Camunda Platform" modeler:executionPlatformVersion="7.15.0"><bpmn:process id="Process_1n6xfcx" name="測試驗證流程1" isExecutable="true" camunda:versionTag="1.0"><bpmn:startEvent id="StartEvent_1"><bpmn:outgoing>Flow_153mh25</bpmn:outgoing></bpmn:startEvent><bpmn:sequenceFlow id="Flow_153mh25" sourceRef="StartEvent_1" targetRef="Activity_18krv16" /><bpmn:sequenceFlow id="Flow_1258z36" sourceRef="Activity_18krv16" targetRef="Activity_1udxyrq" /><bpmn:sequenceFlow id="Flow_0248t03" sourceRef="Activity_1udxyrq" targetRef="Activity_0neq0ra" /><bpmn:endEvent id="Event_00b1j9n"><bpmn:incoming>Flow_0ucs2b7</bpmn:incoming></bpmn:endEvent><bpmn:sequenceFlow id="Flow_0ucs2b7" sourceRef="Activity_0neq0ra" targetRef="Event_00b1j9n" /><bpmn:userTask id="Activity_18krv16" name="申請"><bpmn:extensionElements><camunda:executionListener event="start"><camunda:script scriptFormat="groovy">def userList = ['user1', 'user2', 'user3'];execution.setVariable("assigneeList", userList);</camunda:script></camunda:executionListener></bpmn:extensionElements><bpmn:incoming>Flow_153mh25</bpmn:incoming><bpmn:outgoing>Flow_1258z36</bpmn:outgoing></bpmn:userTask><bpmn:userTask id="Activity_1udxyrq" name="會簽" camunda:assignee="${assignee}"><bpmn:incoming>Flow_1258z36</bpmn:incoming><bpmn:outgoing>Flow_0248t03</bpmn:outgoing><bpmn:multiInstanceLoopCharacteristics camunda:collection="assigneeList" camunda:elementVariable="assignee" /></bpmn:userTask><bpmn:userTask id="Activity_0neq0ra" name="審批" camunda:assignee="user2"><bpmn:incoming>Flow_0248t03</bpmn:incoming><bpmn:outgoing>Flow_0ucs2b7</bpmn:outgoing></bpmn:userTask></bpmn:process><bpmndi:BPMNDiagram id="BPMNDiagram_1"><bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="Process_1n6xfcx"><bpmndi:BPMNEdge id="Flow_0ucs2b7_di" bpmnElement="Flow_0ucs2b7"><di:waypoint x="690" y="117" /><di:waypoint x="752" y="117" /></bpmndi:BPMNEdge><bpmndi:BPMNEdge id="Flow_0248t03_di" bpmnElement="Flow_0248t03"><di:waypoint x="530" y="117" /><di:waypoint x="590" y="117" /></bpmndi:BPMNEdge><bpmndi:BPMNEdge id="Flow_1258z36_di" bpmnElement="Flow_1258z36"><di:waypoint x="370" y="117" /><di:waypoint x="430" y="117" /></bpmndi:BPMNEdge><bpmndi:BPMNEdge id="Flow_153mh25_di" bpmnElement="Flow_153mh25"><di:waypoint x="215" y="117" /><di:waypoint x="270" y="117" /></bpmndi:BPMNEdge><bpmndi:BPMNShape id="_BPMNShape_StartEvent_2" bpmnElement="StartEvent_1"><dc:Bounds x="179" y="99" width="36" height="36" /></bpmndi:BPMNShape><bpmndi:BPMNShape id="Event_00b1j9n_di" bpmnElement="Event_00b1j9n"><dc:Bounds x="752" y="99" width="36" height="36" /></bpmndi:BPMNShape><bpmndi:BPMNShape id="Activity_068boyx_di" bpmnElement="Activity_18krv16"><dc:Bounds x="270" y="77" width="100" height="80" /></bpmndi:BPMNShape><bpmndi:BPMNShape id="Activity_10kl1f8_di" bpmnElement="Activity_1udxyrq"><dc:Bounds x="430" y="77" width="100" height="80" /></bpmndi:BPMNShape><bpmndi:BPMNShape id="Activity_1duyn2a_di" bpmnElement="Activity_0neq0ra"><dc:Bounds x="590" y="77" width="100" height="80" /></bpmndi:BPMNShape></bpmndi:BPMNPlane></bpmndi:BPMNDiagram></bpmn:definitions>

    6、發布流程

    填寫流程模型名稱,設置Camunda REST服務地址,發布流程。

    7、配置groovy解析包

    給camunda流程引擎設置配置groovy解析包。找到camunda安裝目錄camunda-bpm-run-7.15.0\configuration\userlib,放置一個groovy-all-2.4.13.jar,否則流程引擎運行過程會報錯,提示無法解析groovy腳本。Groovy包下載地址:https://mvnrepository.com/artifact/org.codehaus.groovy/groovy-all

    8、開啟java序列化

    給camunda流程引擎開啟java序列化,出于安全性考慮,camunda默認是關閉java序列化的,本示例涉及到會簽集合流程變量的存儲和解析,實際上是一個ArrayList,所以需要開啟java序列化。

    詳細請參考camunda官方網站介紹:https://docs.camunda.org/manual/latest/reference/deployment-descriptors/tags/process-engine/#javaSerializationFormatEnabled

    配置完成后,重啟camunda流程引擎。

    五、會簽流程運行解析

    1、登錄camunda BPM

    默認地址:http://127.0.0.1:8080/camunda/app/tasklist/default/#/login

    默認密碼:? demo / demo

    2、啟動流程

    點擊“Start process”按鈕,彈出流程模板選擇框,點擊要啟動的流程名稱。

    流程啟動后,默認在申請節點,點擊Complete按鈕,提交到下一步會簽節點。

    3、會簽審批

    (a)User1 登錄,看到流程已經提交到會簽節點了。

    (b)通過界面查看流程變量

    處于會簽節點時,該task會自動生成以下幾個流程變量:

  • ?nrOfActiviteInstances:當前活動的實例數量,即還沒有完成的實例數量
  • loopCounter?循環計數器,辦理人在列表中的索引
  • nrOfInstances:會簽中總共的實例數
  • nrOfCompletedInstances:已經完成的實例數量
  • 條件${nrOfInstances == nrOfCompletedInstances}表示所有人員審批完成后會簽結束。

    條件${ nrOfCompletedInstances == 1}表示一個人完成審批。

    (c)填寫審批意見

    ?????? 每個會簽人都可以填寫流程意見。先填寫流程意見,再提交流程,即完成會簽操作。

    (d)此時查看數據庫表

    查看act_ru_execution表,當前活動的實例有3條

    查看act_ru_task表,當前待辦任務有3條

    查看act_ru_variable表,查看當前流程變量, 可以看出此時的活動實例的總數為3,未完成的實例為3,已完成的為0。

    (e)user1提交流程,完成會簽,提交給user2。

    第一個會簽處理完成后,流程變量nrOfActiviteInstances、loopCounter?nrOfInstances、nrOfCompletedInstances的值均發生了變化。

    (f)此時查看數據庫表

    查看act_ru_execution表,當前活動的實例有2條

    查看act_ru_task表,當前待辦任務有2條,user1的待辦已經消失了。

    查看act_ru_variable表,查看當前流程變量, 可以看出此時的活動實例的總數為3,未完成的實例為2,已完成的為1。

    (g)按照如上操作,user1、user2、user3全部完成會簽,流程即流轉到了下一個節點。

    (h)通過界面查詢流程變量,跟會簽控制相關流程變量全部消失了。

    (i)查看數據庫表記錄

    查看act_ru_execution表,會簽活動實例全部消失了。

    查看act_ru_task表,會簽的待辦任務全部消失了。

    查看act_ru_variable表,查看當前流程變量, 跟會簽狀態控制相關的流程變量全部消失了。

    查看act_hi_taskinst表,該表記錄的是待辦任務歷史記錄,可以看到有3條跟會簽相關的歷史待辦任務。

    查看act_hi_varinst表,該表記錄的是流程變量歷史記錄。

    查看act_hi_comment表,該表記錄流程審批意見,可以看到user1、user2、user3三個人的審批意見均記錄到該表了。

    六、總結

    以上是基于camunda流程引擎開源版本實現的會簽功能,沒有進行任何二次開發,目標是讓讀者在不寫代碼的情況下,快速運行和驗證camunda流程引擎。在實際的業務場景中,這些是遠遠不夠的,需要對camunda進行二次封裝和擴展,包括跟企業組織用戶集成,流程處理人配置,流程審批頁面美化,還有流程退回、撤銷、取回、跳轉、加簽、轉辦、傳閱等中國特色流程功能的實現。

    camunda如何擴展開發:https://lowcode.blog.csdn.net/article/details/124587856

    免費BPM測試體驗環境:http://www.yunchengxc.com

    總結

    以上是生活随笔為你收集整理的基于camunda如何实现会签:camunda会签流程配置与原理解析的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。