天天看點

打包Activiti的流程資源檔案(bpmn20.xml、form、png)

activiti的流程定義檔案可以直接部署bpmn20.xml、zip、bar檔案,其中後面的zip和bar類型一樣都是壓縮檔案格式,bpmn20.xml是符合bpmn2.0規範的xml定義。 今天要解決的問題就是幫助大家打包流程資源檔案,其中肯能包括:bpmn20.xml、png、form等檔案。

大多數開發人員都是用activiti designer來設計流程定義,可能業務人員使用了其他的流程設計器來描述業務,然後開發人員用activiti designer來“深加工”以便讓計算機能讀懂流程的走向及其邏輯。

如何打包是最近“activiti中文”群裡問的比較多的問題之一,因為太忙沒用時間一一說明,這也是因為目前的5.9版本設計器導緻的,主要是在5.9版本之前設計器會自動生成一個bpmn20.xml檔案,而5.9版本中不再使用之前的.activiti檔案,直接把設計與最終的流程定義檔案合并為一個bpmn檔案。具體的說明請參考《從activiti

designer5.8更新到5.9遇到的問題》。

下面我們以kft-activiti-demo項目中的請假流程為例介紹如何打包,項目結構如下圖。

打包Activiti的流程資源檔案(bpmn20.xml、form、png)

看了剛剛提到的文章應該明白leave.bpmn和在5.8版本中生成的bpmn20.xml一樣,是以可以直接把leave.bpmn複制一份改名為leave.bpmn20.xml,然後手動把leave.bpmn20.xml和leave.png用壓縮工具打包成leave.zip即可。

用ant腳本無非就是代替手動操作讓工具自動根據配置打包,我在kft-activiti-demo(master分支)項目中添加了此功能,把裡面的代碼拿出來分享給大家。

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

<code>&lt;!--?xml version="1.0" encoding="utf-8"?--&gt;</code>

<code>&lt;</code><code>project</code>

<code>name</code><code>=</code><code>"kft-activiti-demo"</code>

<code>default</code><code>=</code><code>"welcome"</code><code>&gt;</code>

<code>    </code><code>&lt;!-- properties from files --&gt;</code>

<code>    </code><code>&lt;</code><code>property</code>

<code>file</code><code>=</code><code>"${user.home}/.kafeitu/build.properties"</code><code>&gt;</code>

<code>file</code><code>=</code><code>"build.properties"</code><code>&gt;</code>

<code>    </code><code>&lt;!-- properties from key value --&gt;</code>

<code>name</code><code>=</code><code>"workflow.diagrams"</code>

<code>value</code><code>=</code><code>"src/main/resources/diagrams"</code><code>&gt;</code>

<code>name</code><code>=</code><code>"workflow.deployments"</code>

<code>value</code><code>=</code><code>"src/main/resources/deployments"</code><code>&gt;</code>

<code>    </code><code>&lt;!-- 流程定義:每個子產品的路徑 --&gt;</code>

<code>name</code><code>=</code><code>"wd.leave"</code>

<code>value</code><code>=</code><code>"${workflow.diagrams}/leave"</code><code>&gt;</code>

<code>    </code><code>&lt;!-- 顯示歡迎資訊以及操作提示 --&gt;</code>

<code>    </code><code>&lt;</code><code>target</code>

<code>name</code><code>=</code><code>"welcome"</code><code>&gt;</code>

<code>        </code><code>&lt;</code><code>echo</code><code>&gt;activiti示範程式,請輸入指令後操作!&lt;/</code><code>echo</code><code>&gt;</code>

<code>    </code><code>&lt;/</code><code>target</code><code>&gt;</code>

<code>    </code><code>&lt;!-- 請假流程定義打包 --&gt;</code>

<code>name</code><code>=</code><code>"workflow.package.leave"</code><code>&gt;</code>

<code>        </code><code>&lt;</code><code>echo</code><code>&gt;打包流程定義:請假(自定義表單)&lt;/</code><code>echo</code><code>&gt;</code>

<code>        </code><code>&lt;</code><code>copy</code>

<code>file</code><code>=</code><code>"${wd.leave}/leave.bpmn"</code>

<code>tofile</code><code>=</code><code>"${wd.leave}/leave.bpmn20.xml"</code><code>&gt;</code>

<code>        </code><code>&lt;</code><code>zip</code>

<code>destfile</code><code>=</code><code>"${workflow.deployments}/leave.zip"</code>

<code>basedir</code><code>=</code><code>"${wd.leave}"</code>

<code>update</code><code>=</code><code>"true"</code>

<code>includes</code><code>=</code><code>"*.xml,*.png"</code><code>&gt;</code>

<code>        </code><code>&lt;</code><code>delete</code>

<code>file</code><code>=</code><code>"${wd.leave}/leave.bpmn20.xml"</code><code>&gt;</code>

<code>    </code><code>&lt;/</code><code>delete</code><code>&gt;&lt;/</code><code>zip</code><code>&gt;&lt;/</code><code>copy</code><code>&gt;&lt;/</code><code>target</code><code>&gt;</code>

<code>    </code><code>&lt;!-- 流程定義打包 --&gt;</code>

<code>name</code><code>=</code><code>"workflow.package.all"</code>

<code>depends</code><code>=</code><code>"workflow.package.leave"</code><code>&gt;</code>

<code>&lt;/</code><code>property</code><code>&gt;&lt;/</code><code>property</code><code>&gt;&lt;/</code><code>property</code><code>&gt;&lt;/</code><code>property</code><code>&gt;&lt;/</code><code>property</code><code>&gt;&lt;/</code><code>project</code><code>&gt;</code>

熟悉ant的讀者很快就能看懂這些配置資訊及其目的,對于不熟悉ant的稍微介紹一下。

第4、5行處讀取一些配置資訊,目前還未用到外部配置,可以先忽略;

第7~13行處用于配置一些檔案的路徑,其中workflow.diagrams就是bpmn和png檔案所在的目錄,隻不過裡面又根據子產品細分了;

第21~26行處才是重點,首先複制bpmn檔案為bpmn20.xml,然後把bpmn20.xml和png檔案打包成zip檔案

使用方法如下:

<code>henryyan@hy-mbp  ~kad git:(master) ant workflow.package.all</code>

<code>buildfile:</code><code>/users/henryyan/work/projects/activiti/kft-activiti-demo/build</code><code>.xml</code>

<code>workflow.package.leave:</code>

<code>     </code><code>[</code><code>echo</code><code>] 打包流程定義:請假(自定義表單)</code>

<code>     </code><code>[copy] copying 1</code><code>file</code>

<code>to</code><code>/users/henryyan/work/projects/activiti/kft-activiti-demo/src/main/resources/diagrams/leave</code>

<code>      </code><code>[zip] updating zip:</code><code>/users/henryyan/work/projects/activiti/kft-activiti-demo/src/main/resources/deployments/leave</code><code>.zip</code>

<code>   </code><code>[delete] deleting:</code><code>/users/henryyan/work/projects/activiti/kft-activiti-demo/src/main/resources/diagrams/leave/leave</code><code>.bpmn20.xml</code>

<code>workflow.package.leave-dynamic-from:</code>

<code>     </code><code>[</code><code>echo</code><code>] 打包流程定義:請假(動态表單)</code>

<code>to</code><code>/users/henryyan/work/projects/activiti/kft-activiti-demo/src/main/resources/diagrams/leave-dynamic-from</code>

<code>      </code><code>[zip] updating zip:</code><code>/users/henryyan/work/projects/activiti/kft-activiti-demo/src/main/resources/deployments/leave-dynamic-from</code><code>.zip</code>

<code>   </code><code>[delete] deleting:</code><code>/users/henryyan/work/projects/activiti/kft-activiti-demo/src/main/resources/diagrams/leave-dynamic-from/leave-dynamic-from</code><code>.bpmn20.xml</code>

<code>workflow.package.all:</code>

<code>build successful</code>

<code>total</code><code>time</code><code>: 0 seconds</code>

如果有外部form檔案也可以加入到zip包中。

bar檔案就是zip格式的,僅僅是擴充名不同而已,是以打包bar檔案直接用上面的方式,隻不過把擴充名zip更好成bar就可以了。

如何打包bar我就不多說了,官網的手冊已經說的很詳細了,請移步:http://www.activiti.org/userguide/index.html#eclipsedesignerbpmnfeatures,找到activiti

designer deployment features有詳細的說明。