溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

flowable工作流引擎遷移API實(shí)例分析

發(fā)布時(shí)間:2022-01-15 17:33:49 來(lái)源:億速云 閱讀:460 作者:柒染 欄目:大數(shù)據(jù)

小編今天帶大家了解flowable工作流引擎遷移API實(shí)例分析,文中知識(shí)點(diǎn)介紹的非常詳細(xì)。覺(jué)得有幫助的朋友可以跟著小編一起瀏覽文章的內(nèi)容,希望能夠幫助更多想解決這個(gè)問(wèn)題的朋友找到問(wèn)題的答案,下面跟著小編一起深入學(xué)習(xí)“flowable工作流引擎遷移API實(shí)例分析”的知識(shí)吧。

流程遷移API說(shuō)明

流程遷移API服務(wù)類可以通過(guò)流程引擎類進(jìn)行獲取,如下所示:

 processMigrationService = processEngine.getProcessMigrationService();

注意:只有Flowable6.5以及以上的版本才可以使用該功能。
通過(guò)processMigrationService可以使用如下的API:

 ProcessInstanceMigrationBuilder createProcessInstanceMigrationBuilder();

    ProcessInstanceMigrationBuilder createProcessInstanceMigrationBuilderFromProcessInstanceMigrationDocument(ProcessInstanceMigrationDocument document);

    ProcessInstanceMigrationValidationResult validateMigrationForProcessInstance(String processInstanceId, ProcessInstanceMigrationDocument processInstanceMigrationDocument);

    ProcessInstanceMigrationValidationResult validateMigrationForProcessInstancesOfProcessDefinition(String processDefinitionId, ProcessInstanceMigrationDocument processInstanceMigrationDocument);

    ProcessInstanceMigrationValidationResult validateMigrationForProcessInstancesOfProcessDefinition(String processDefinitionKey, int processDefinitionVersion, String processDefinitionTenantId, ProcessInstanceMigrationDocument processInstanceMigrationDocument);

    void migrateProcessInstance(String processInstanceId, ProcessInstanceMigrationDocument processInstanceMigrationDocument);

    void migrateProcessInstancesOfProcessDefinition(String processDefinitionId, ProcessInstanceMigrationDocument processInstanceMigrationDocument);

    void migrateProcessInstancesOfProcessDefinition(String processDefinitionKey, int processDefinitionVersion, String processDefinitionTenantId, ProcessInstanceMigrationDocument processInstanceMigrationDocument);

    Batch batchMigrateProcessInstancesOfProcessDefinition(String processDefinitionId, ProcessInstanceMigrationDocument processInstanceMigrationDocument);

    Batch batchMigrateProcessInstancesOfProcessDefinition(String processDefinitionKey, int processDefinitionVersion, String processDefinitionTenantId, ProcessInstanceMigrationDocument processInstanceMigrationDocument);

    ProcessInstanceBatchMigrationResult getResultsOfBatchProcessInstanceMigration(String migrationBatchId);

上述的一系列API可以歸納為如下幾種:

  • 創(chuàng)建遷移計(jì)劃(ProcessInstanceMigrationBuilder),該實(shí)例對(duì)象中可以設(shè)置一系列的遷移邏輯,比如將那個(gè)版本下面的實(shí)例遷移到特定版本的模板中

  • validateXX驗(yàn)證是否可以執(zhí)行遷移邏輯。

  • migrateProcessInstance開(kāi)頭的方法,同步執(zhí)行遷移計(jì)劃,調(diào)用該API之后,引擎立即開(kāi)始執(zhí)行遷移工作。

  • batchMigrateXX開(kāi)頭的,批處理遷移實(shí)例。當(dāng)需要遷移非常多實(shí)例的時(shí)候,可以使用批處理進(jìn)行操作。該操作需要開(kāi)啟定時(shí)器,否則不生效。

  • getResultsOfBatchProcessInstanceMigration:獲取批處理的執(zhí)行結(jié)果。

流程遷移API使用

接下來(lái),以兩個(gè)版本的流程為例對(duì)流程實(shí)例遷移功能展開(kāi)說(shuō)明:
版本1的流程圖:

<process id="a2" name="2" isExecutable="true">
    <documentation>2</documentation>
    <startEvent id="startEvent1" flowable:formFieldValidation="true"></startEvent>
    <userTask id="sid-A8596132-C632-4DB0-81D6-5603D6516F3C" name="1" flowable:formFieldValidation="true"></userTask>
    <sequenceFlow id="sid-980E4499-6E2A-480E-B7F9-E8FD07914D49" sourceRef="startEvent1" targetRef="sid-A8596132-C632-4DB0-81D6-5603D6516F3C"></sequenceFlow>
    <endEvent id="sid-9203A5B1-FED5-429A-8039-0089AE3132A8"></endEvent>

版本2的流程:

 <startEvent id="startEvent1" flowable:formFieldValidation="true"></startEvent>
    <userTask id="sid-A8596132-C632-4DB0-81D6-5603D6516F3C" name="1" flowable:formFieldValidation="true"></userTask>
    <sequenceFlow id="sid-980E4499-6E2A-480E-B7F9-E8FD07914D49" sourceRef="startEvent1" targetRef="sid-A8596132-C632-4DB0-81D6-5603D6516F3C"></sequenceFlow>
    <userTask id="sid-84BBB613-FB20-430B-B4C1-E60F4DA02CFB" name="2" flowable:formFieldValidation="true"></userTask>
    <sequenceFlow id="sid-89B1A448-65D7-4222-B666-541DAB61BC01" sourceRef="sid-A8596132-C632-4DB0-81D6-5603D6516F3C" targetRef="sid-84BBB613-FB20-430B-B4C1-E60F4DA02CFB"></sequenceFlow>
    <endEvent id="sid-3101266D-CB58-4A8B-A3B1-B880F3C1D936"></endEvent>

版本2的流程比版本1的流程多了一個(gè)任務(wù)節(jié)點(diǎn),其他的元素均一樣。

演示視頻可以參考視頻:

部署版本1流程

操作如下:

 /**
     * 1
     */
    @Test
    public  void  deploy(){
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        System.out.println(processEngine);
        RepositoryService repositoryService = processEngine.getRepositoryService();
       //taskWithEventProcess.bpmn20.xml
        repositoryService
            .createDeployment()
            .addClasspathResource("processMigrationService/2.1.bpmn20.xml")
            .deploy();
       runtimeService.startProcessInstanceByKey("a2");

    }

上述代碼中部署流程之后,立即啟動(dòng)了新的實(shí)例。目前實(shí)例位于1節(jié)點(diǎn)。

實(shí)例遷移

接下來(lái)開(kāi)始部署2流程,并實(shí)現(xiàn)將1節(jié)點(diǎn)遷移到版本為2的2節(jié)點(diǎn)中。代碼如下:

 @Test
    public  void  batchMigrateProcessInstancesOfProcessDefinition2(){
        String processDefinitionKey="a2";
        int processDefinitionVersion=1;
        String processDefinitionTenantId="";
        ProcessInstanceMigrationDocumentImpl
            processInstanceMigrationDocument =new ProcessInstanceMigrationDocumentImpl();
        processInstanceMigrationDocument.setMigrateToProcessDefinition(processDefinitionKey,2);
        List<ActivityMigrationMapping> activityMigrationMappings = new ArrayList<ActivityMigrationMapping>();
        ActivityMigrationMapping.OneToOneMapping mappingFor = ActivityMigrationMapping.createMappingFor("sid-A8596132-C632-4DB0-81D6-5603D6516F3C", "sid-84BBB613-FB20-430B-B4C1-E60F4DA02CFB");
        activityMigrationMappings.add(mappingFor);
        processInstanceMigrationDocument.setActivityMigrationMappings(activityMigrationMappings);
        processMigrationService
            .migrateProcessInstance("12505",processInstanceMigrationDocument);

    }

流程遷移Flowable VS Camunda工作流

  1. Flowable 流程實(shí)例遷移功能相比與Camunda而言,功能更加的薄弱和單一??赡苡行┕δ芨虡I(yè)版有關(guān)系,因此開(kāi)源出來(lái)的功能比較單一。沒(méi)有Camunda那么強(qiáng)大。

  2. Flowable 流程實(shí)例遷移功能對(duì)于查詢做的還不夠完善,沒(méi)有大量的查詢邏輯,不方便用戶根據(jù)特定場(chǎng)景進(jìn)行操作。

  3. 對(duì)于批處理模塊,沒(méi)有Camunda強(qiáng)大,因次Flowable開(kāi)源版本僅支持實(shí)例的批量遷移,而不支持其他的批處理操作。

  4. Flowable開(kāi)源版本批量遷移實(shí)例之后,原有的歷史數(shù)據(jù)會(huì)被刪除掉,Camunda不會(huì)刪除歷史數(shù)據(jù)。因此在Flowable中使用該功能的時(shí)候一定要小心,防止歷史數(shù)據(jù)被清除掉。整個(gè)完整實(shí)例樹痕跡不會(huì)保留。

  5. Flowable開(kāi)源版本可以進(jìn)行任意數(shù)據(jù)的遷移,Camunda會(huì)對(duì)遷移的源節(jié)點(diǎn)和目標(biāo)節(jié)點(diǎn)進(jìn)行對(duì)比,如果不在一個(gè)區(qū)間就不讓遷移。Flowable控制的不嚴(yán)格。

  6. Camunda支持在遷移的過(guò)程中去設(shè)置異步或者同步執(zhí)行,F(xiàn)lowable不支持。

  7. Camunda支持在遷移的過(guò)程中去設(shè)置是否刪除原有實(shí)例數(shù)據(jù)信息,F(xiàn)lowable不支持。

  8. Camunda支持在遷移的過(guò)程中去設(shè)置是否可以觸發(fā)節(jié)點(diǎn)監(jiān)聽(tīng)器邏輯,F(xiàn)lowable不支持。

  9. 均支持開(kāi)發(fā)人員設(shè)置批量處理任務(wù)的閾值和速率。

感謝大家的閱讀,以上就是“flowable工作流引擎遷移API實(shí)例分析”的全部?jī)?nèi)容了,學(xué)會(huì)的朋友趕緊操作起來(lái)吧。相信億速云小編一定會(huì)給大家?guī)?lái)更優(yōu)質(zhì)的文章。謝謝大家對(duì)億速云網(wǎng)站的支持!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI