淺談Activiti Modeler 的擴展


  • 為什么要擴展
        最近項目打算用activiti工作流中activiti modeler來做模塊的可視化訂閱,但是原生的activiti任務節點,有一些不符合業務需要,比如
    • 配置項多,屬性暴露。比如service task,配置時就要暴露其Java Degelete方法類,這樣以后實施人員去配置的時候,第一他每次去配個service task都要去配置,第二他不會知道這個任務要配什么委托類,所以這對職責單一的一個service task來說,比如就需要一個解析xml的任務,那么我除了id ,name,其他都是不需要的,內部封裝屬性,不暴露出去。
    • 圖標單一,一眼看不出任務職責。
    • 子流程內容跟父流程內容在一個面板,流程定制面視覺效果不好,而且固定子流程不能得到復用。
            對以上一些不足,其實對activiti來說,他要考慮的當然是多開放配置,更容易兼容場景,或許有些人會認為這都不是事,做這種擴展沒有必要,大題小作。仁者見仁智者見智吧,我認為這種擴展,
            對使用會更便捷,用戶友好性也更好,具有一定的業務特色,也不改變原生activiti任務的職能,何樂不為。
 
  • 如何擴展
         首先考慮一下可行性,這種擴展以什么為切入點。擴展任務節點,那就得發現service task這個任務的特性,它不想user task,script task的只能那么單一,它可以指定委托處理類,來達到執行目的。
          因此,在任務定制這方面,完全可以由service task進行屬性擴展和封閉。具體擴展細節,如下考慮   
 
    • UI上擴展屬性
      • 擴展stencilset.json文件。propertyPackages對象中增加自定義的package(基本類型直接使用,復雜類型需要擴展),另外stenclis對象的節點中增加package引用
      • 針對復雜類型自定義package的擴展。properties.js中增加復雜類型配置(復雜類型的展現及賦值采用angularjs1.2實現)
    •  bpmn中擴展屬性
      • 自定義XSD
      • 在extensionElements元素中實現擴展
      • 通過repositoryService獲取bpmnModel,進而獲取指定元素的擴展
    • 解析UI上的擴展到bpmn 
      • UI的圖形及屬性信息會解析成JSON,包含自定義擴展
      • 從JSON中提取擴展轉換成bpmn中的元素。通過BpmnJsonConverter把Json數據轉換為BpmnModel,把Json中的擴展轉換成BpmnModel對應元素的extensionElements屬性,通過BpmnXmlConverter把BpmnModel轉換為bpmn文件 
           那么還有一個難題,就是子流程的獨立展示改造,在這方面的可行性分析和設計,是這么思考的。  
      
    • 子流程怎么存儲?
      • 把子流程作為獨立的模型進行編輯和保存,這樣可以使用現有的建模工具及持久化方式
    • 部署時怎么組裝子流程?
      • 由於定制化的模型數據不符合標准,需要在部署前轉換為標准的bpmn
      • 將子流程的標識用真正的子流程定義替換掉
      • 子流程的標識通過子流程模型ID進行關聯
      • 從流程定義查看流程圖時,坐標會有問題,子流程替換后,坐標需要調整(難點)
    • 展現設計
      • 在建模的頁面中添加子流程的下拉框(所有后代子流程,流程樹)
      • 擴展一個子流程標識節點,該節點可以設置關聯的子流程
      • 雙擊子流程標識節點可以進入以該子流程為根的建模頁面
    • 后端設計
      • 根據父流程查詢所有后代子流程
      • 部署時數據的轉換,子流程數據的替換(重點) 
  •  編后語
       在子流程這方面需要考慮的還很多,比如后續的流程跟蹤該如何處理,以及上述部署組裝bpmn文件的坐標問題等。這要繼續看下activiti源碼(ps:activiti 源碼寫的很漂亮,very  good,建議去看,
        然后一起探討),后續會更新一些現有的實現。
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM