天天看點

整合Acitiviti線上流程設計器(Activiti-Modeler 5.19)

一直以來都是從事大量的工作流相關的項目,用過很多商用的工作流産品,包括國内與國外的,盡管商用的工作産品在ui操作上比較人性化,但個人使用者覺得,這東西隻需要一些初級使用者,對于我們一直在為一些進階的客戶提供一些專業的資料整合、流程梳理、系統間的資料穿透時,這些系統因為不開源,給項目的實施帶來巨大的風險,在一些項目栽過跟頭後,我更偏向于使用開源的平台了。但開源平台最大的難點是在于你是否有足夠的技術人員來學習及掌握它,否則,它也一樣面臨項目實施失敗的風險。後來在一些項目上使用jbpm4,activiti5,發現activiti5的流程功能真的很強大,幾乎是無所不能。套用一句廣告語,老闆再也不擔心我的流程實作了。在實施國外的項目時,流程的設計幾乎是交給開發人員來處理的,是以用activiti的合适的。但在國内,我們的客戶則提出更高的要求,要求普通的人員也可以參與流程的設計要求。activiti後續的版本也在完善這些功能,特别是activiti-5.18版本,activiti-modeler的模組化工具幾乎進行了重寫,看來activiti的開源團隊也慢慢意識了這點,加大了人力在這方面的投入,以目前的使用,可以達到商用級别,通過功能的擴充,可以很好實作線上流程模組化。

為了平台未來的延伸擴充,我建議直接使用該團隊的activiti-modeler,原因很簡單,可以有效跟着團隊進行産品的更新,當然我們也需要擴充自己的特色功能,這塊我在後面不斷把文章寫出來,以供大家學習。

在此,先展示一下我在jsaas平台上初步整合activiti-modeler的效果:

整合Acitiviti線上流程設計器(Activiti-Modeler 5.19)

說實話,雖然這設計器還有一些小小的缺陷,但仍然阻止不了我愛它,因為全新自己開發這東西,那是比較要命的,呵呵,苦逼的程式員呀。于是我多麼希望在我的activiti的流程應用裡,直接就帶這麼一款應用。

現實提美好的, 整合是苦逼的,于是就有本文的出現。

在我的部落格前一篇中,已經有說明如何利用activiti-modeler的源碼跑起來,加至eclipse下運作起來,在本文中即是以該文為基礎,進行本文的說明及整合。

activiti-modeler 5.18用了新的web架構,其是基于spring-mvc 4.0以上的架構,同時用了vaadin的ria的ui,特别是後者,這架構帶有太多的jar包,雖然它也是結合了spring來使用,要整合這玩意,幾乎就得把這東西加入我們的項目中,同時還需要整合它的使用者管理,這是要命的。我們的出發點,僅是用它的前端畫圖處理功能,後端的流程邏輯處理即由我們來實作。

于是我研究了一下activiti-webapp-explorer2項目,發現要實作我以上的目标,原來很簡單。以下假定我的環境要求,以下為我的原項目的環境,是基于spring 3的,我的平台可直接轉為spring4.0,特别是spring-mvc的環境也轉成4.0

3.1. 把前端的設計器檔案從activiti-webapp-explorer2拷至我平台上建立的目錄process-editor,如下圖所示:

整合Acitiviti線上流程設計器(Activiti-Modeler 5.19)

同時把resources下的stencilset.json檔案拷至我的項目中的resources目錄下。

3.2.在spring項目中加入activiti 5.18的依賴引用,注意,不能直接從explorer項目中直接取,那樣會帶有很多無用的jar包,以下為精簡後的pom引用。

如不采用common-dbcp的資料源時,以上配置排除該包的引用,

batik的包主要是用來解析html中的svg的内容,包比較多,但都不大。

3.3.配置如下的spring-activiti.xml檔案,其格式如下所示(可從activiti-webapp-explorer2下的resources的activiti-custom-context.xml檔案拷出來),把以下的一些用到explorer表單的配置資訊删除。因為我們不采用其表單的配置資訊。

整合Acitiviti線上流程設計器(Activiti-Modeler 5.19)

注意點:

1. 擴充實作自身的idgenerator

目的是為了産生唯一的資料主鍵,方法很多,請自行實作,不擴充也可以。

2. 配置對應的資料連接配接資訊及資料源、事務等

3.4 .在spring的配置檔案中引入spring-activiti.xml,啟動應用程式即可,可看到其已經把資料庫表建立出來。

3.5. 處理activiti-moderler的背景處理的配置。即建立模型設計、儲存、更新等内容,它需要與後端進行互動處理。我們看了activiti-webapp-explorer2的web.xml就清楚其背景互動的處理模式。

簡要說明:explorer2這個項目在啟動後,就會spring mvc4進行包掃描,把(請參考org.activiti.explorer.servlet.dispatcherservletconfiguration),org.activiti.rest.editor、org.activiti.rest.diagram包下的controller掃描至響應映射中來,為的就是實作編輯器及設計模型的流程展示時,相應有對應的controller服務。

是以,我們比較好的辦法就是重寫這些controller即可,這些controller的實作也很簡單,在這裡,我最簡單的做法就是把這些類直接拷到我的項目中,重命名了包名。(當然也可以直接把以上兩包通過pom依賴加進來),本人不想自己的項目帶有太多的依賴包,是以不直接引用了。

拷完後,我這裡的包如下所示:

整合Acitiviti線上流程設計器(Activiti-Modeler 5.19)

在springmvc中加載這些包,注意,springmvc需要為4.0以上的,這樣才能比較好支援restcontroller的注解方式,否則,請用舊的方式來支援這種rest url通路。

在web.xml中配置攔截這些通路路徑

3.6. 修改process-editor下的一些配置檔案,以支援我們的線上流程設計

a)去掉activiti afresco的logo标題欄,并且把樣式上的空白欄去掉

修改modeler.html中的以下内容,注意不要把該文本删除,建議加style=”display:none”,删除後其會造成底層下的一些内容有40個像數的東西顯示不出來。

b)在editor-app/css/style-common.css中,把以下樣式的padding-top部分改為0px;

c)在modeler.html中加上closewindow的函數

目的是為了儲存模型時,可以關閉目前的彈出的mini視窗,修改儲存後彈出的視窗的儲存及關閉動作,如下所示: