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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

Activiti6.0(十二)子流程

發布時間:2023/12/18 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Activiti6.0(十二)子流程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

一、概述

二、子流程

1、嵌入子流程

2、調用子流程

3、事件子流程

三、總結


一、概述

子流程是包含其他的活動、網關、事件等的活動,其本身構成一個流程,并作為更大流程的一部分,子流程完全在父流程中定義(這就是為什么經常被稱作嵌入式子流程),子流程也是實際業務場景中比較常見的一個需求。

Activiti提供了三種子流程的實現,分別是?嵌入子流程、調用子流程、事件子流程,下面分別介紹。

二、子流程

1、嵌入子流程

對應Activiti-app中的

所謂嵌入子流程,即子流程元素<subProcess>內嵌在主流程元素<process>之內,只能在該主流程中使用,外部流程無法調用。這種子流程一般作為局部通用邏輯處理或為特定業務需求服務,會使得主流程看起來比較直觀。流程圖看如下:

xml為:

<?xml version="1.0" encoding="UTF-8"?> <definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:activiti="http://activiti.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.activiti.org/processdef"><process id="mainProcess" name="主流程" isExecutable="true"><startEvent id="startEvent1"></startEvent><userTask id="sid-4C9AE06D-43FA-4325-80D5-038F495B46EE" name="子流程前" activiti:assignee="test"><extensionElements><modeler:activiti-idm-assignee xmlns:modeler="http://activiti.com/modeler"><![CDATA[true]]></modeler:activiti-idm-assignee><modeler:assignee-info-firstname xmlns:modeler="http://activiti.com/modeler"><![CDATA[test]]></modeler:assignee-info-firstname><modeler:initiator-can-complete xmlns:modeler="http://activiti.com/modeler"><![CDATA[false]]></modeler:initiator-can-complete></extensionElements></userTask><subProcess id="sid-48411614-B7F9-40F3-8154-4EC64E8E4365" name="子流程調用"><startEvent id="sid-5BC16FA2-D258-46C8-91E3-D4E615343637"></startEvent><userTask id="sid-05726644-A733-4206-BBB7-4D79B3589ED2" name="子流程環節" activiti:assignee="test"><extensionElements><modeler:activiti-idm-assignee xmlns:modeler="http://activiti.com/modeler"><![CDATA[true]]></modeler:activiti-idm-assignee><modeler:assignee-info-firstname xmlns:modeler="http://activiti.com/modeler"><![CDATA[test]]></modeler:assignee-info-firstname><modeler:initiator-can-complete xmlns:modeler="http://activiti.com/modeler"><![CDATA[false]]></modeler:initiator-can-complete></extensionElements></userTask><endEvent id="sid-FB91A674-6633-445D-B4D7-02D8E8BA3992"></endEvent><sequenceFlow id="sid-CC480E20-B61F-4B32-8A16-FC7B724AE4A9" sourceRef="sid-5BC16FA2-D258-46C8-91E3-D4E615343637" targetRef="sid-05726644-A733-4206-BBB7-4D79B3589ED2"></sequenceFlow><sequenceFlow id="sid-D330D43B-09C9-4812-9A80-CAE62F365356" sourceRef="sid-05726644-A733-4206-BBB7-4D79B3589ED2" targetRef="sid-FB91A674-6633-445D-B4D7-02D8E8BA3992"></sequenceFlow></subProcess><sequenceFlow id="sid-A3FBD323-DB9C-48DA-86B4-7723033E3DB3" sourceRef="startEvent1" targetRef="sid-4C9AE06D-43FA-4325-80D5-038F495B46EE"></sequenceFlow><sequenceFlow id="sid-C669A38C-6A62-4F59-8BFF-40D83FA002C2" sourceRef="sid-4C9AE06D-43FA-4325-80D5-038F495B46EE" targetRef="sid-48411614-B7F9-40F3-8154-4EC64E8E4365"></sequenceFlow><userTask id="sid-99E4B39D-36AF-4AE6-B50A-0ECB1CECB67C" name="子流程后" activiti:assignee="$INITIATOR"><extensionElements><modeler:activiti-idm-initiator xmlns:modeler="http://activiti.com/modeler"><![CDATA[true]]></modeler:activiti-idm-initiator></extensionElements></userTask><endEvent id="sid-B84A10E5-94AB-4A2F-81C7-708C62421D8D"></endEvent><sequenceFlow id="sid-65ED0CA3-AB95-4788-9D33-26DC86A36BE3" sourceRef="sid-48411614-B7F9-40F3-8154-4EC64E8E4365" targetRef="sid-99E4B39D-36AF-4AE6-B50A-0ECB1CECB67C"></sequenceFlow><sequenceFlow id="sid-27DD695B-3F82-4F7D-8860-979461364E7A" sourceRef="sid-99E4B39D-36AF-4AE6-B50A-0ECB1CECB67C" targetRef="sid-B84A10E5-94AB-4A2F-81C7-708C62421D8D"></sequenceFlow></process> </definitions>

可以看到<subProcess>元素與主流程其他元素同級,作為主流程的專屬屬性,其本質上只有一個流程,因此使用主流程的key也能查詢出子流程的任務等信息,主子流程的變量信息也是共享的。

2、調用子流程

對應Activiti-app中的

所謂調用子流程,即需要預先定義一個流程實現,然后在主流程中引用該流程的id,完成內嵌,該方式比較靈活且易復用,因此也是子流程使用中最常用的方式,這種子流程是使用<callActivity>標簽進行調用,簡單的流程圖如下:

其主要配置包括?子流程環節所引用的流程進出子流程的變量傳遞:

引用元素可以是外部流程的某個id,也可以是個變量,進行動態傳遞

上面的 In 是指主流程在進入子流程時的變量傳遞配置,Source代表主流程傳遞的變量名稱,Target代表子流程接收的變量名稱,還有一個 Out 配置與之同理。

最后保存后的xml如下:

<?xml version="1.0" encoding="UTF-8"?> <definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:activiti="http://activiti.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.activiti.org/processdef"><process id="callActivity" name="調用子流程" isExecutable="true"><startEvent id="startEvent1"></startEvent><userTask id="sid-D0BEEE15-A6E8-4077-ACA7-D8C284546BCF" name="子流程前" activiti:assignee="test"><extensionElements><modeler:activiti-idm-assignee xmlns:modeler="http://activiti.com/modeler"><![CDATA[true]]></modeler:activiti-idm-assignee><modeler:assignee-info-firstname xmlns:modeler="http://activiti.com/modeler"><![CDATA[test]]></modeler:assignee-info-firstname><modeler:initiator-can-complete xmlns:modeler="http://activiti.com/modeler"><![CDATA[false]]></modeler:initiator-can-complete></extensionElements></userTask><callActivity id="sid-735E518C-DD33-4BD3-A6FA-7A8FEB3A90EF" name="子流程調用" calledElement="simpleModel" activiti:inheritVariables="false"><extensionElements><activiti:in source="mainVariable" target="subVariable"></activiti:in><activiti:out source="sub" target="main"></activiti:out></extensionElements></callActivity><endEvent id="sid-333CC74E-46FF-4AB9-8A08-884AD012C90E"></endEvent><sequenceFlow id="sid-E4EE4AE4-E56F-49F3-8AF7-864A76688581" sourceRef="startEvent1" targetRef="sid-D0BEEE15-A6E8-4077-ACA7-D8C284546BCF"></sequenceFlow><sequenceFlow id="sid-99564510-9859-4C04-BBC6-8E1F284AC242" sourceRef="sid-D0BEEE15-A6E8-4077-ACA7-D8C284546BCF" targetRef="sid-735E518C-DD33-4BD3-A6FA-7A8FEB3A90EF"></sequenceFlow><sequenceFlow id="sid-254EBB4A-B061-49AC-9DD7-82B6B24751B5" sourceRef="sid-735E518C-DD33-4BD3-A6FA-7A8FEB3A90EF" targetRef="sid-333CC74E-46FF-4AB9-8A08-884AD012C90E"></sequenceFlow></process> </definitions>

可以看到調用子流程主要的xml標簽為:<callActivity/>以及它的屬性calledElement、<activiti:in/>、<activiti:out/>。

由于主子流程是不同的實例,因此在查詢子任務時需要使用子流程的key來進行查詢。

注意:流程流轉到子流程時,子流程的業務鍵即 Business_key 是為空的,如果需要與主流程保持一致則需要使用到任務監聽器,通過變量的形式,先在監聽器中先獲取主流程的業務鍵然后以此更新子流程的業務鍵。

3、事件子流程

對應Activiti-app中的

事件子流程是指通過事件觸發的子流程,可以存在于流程級別或子流程級別,用于觸發事件子流程的事件,使用啟動事件進行配置,因此在事件子流程中不允許使用空啟動事件,同時其不允許有任何入口和出口順序流。

在事件子流程的宿主范圍(流程實例或子流程)創建時,創建對啟動事件的訂閱,當該范圍銷毀時,刪除訂閱。

三、總結

嵌入子流程:主子流程本質是同一個流程實例,共享數據

調用子流程:主子流程是不同的實例,但是可以通過監聽器方式使得其擁有唯一業務標識,無法通過主流程的key查詢子流程的任務,可以通過業務鍵查詢

在實際使用時,Activiti提供的子流程會不滿足有些實際業務需求,比如掛起與恢復等等,可使用人工任務進行替代實現。

總結

以上是生活随笔為你收集整理的Activiti6.0(十二)子流程的全部內容,希望文章能夠幫你解決所遇到的問題。

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