環境:Eclipse 3.5 + java 6 + MySQL 5.5 + jBPM 4.4
1、建立 Java Project;
2、拷貝 XML配置文件放進工程目錄;
3、
建立 JPDL文件,畫流程圖;
4、編寫測試類;
完成的項目目錄:


jBPM 流程圖:


helloword.jpdl.xml:
<?xml version="1.0" encoding="UTF-8"?> <process name="helloword" xmlns="http://jbpm.org/4.4/jpdl"> <start g="132,24,48,48" name="start1"> <transition g="-52,-22" name="to task1" to="提交申請"/> </start> <end g="132,456,48,48" name="end1"/> <task g="108,108,92,52" name="提交申請" assignee="員工"> <transition g="-49,-13" name="to task2" to="部門經理審批"/> </task> <task g="108,228,92,52" name="部門經理審批" assignee="部門經理"> <transition g="-48,-12" name="to task3" to="總經理審批"/> </task> <task g="108,348,92,52" name="總經理審批" assignee="總經理"> <transition g="-48,-11" name="to end1" to="end1"/> </task> </process>
測試類:Helloword.java
package com.guilin.jbpm; import java.util.List; import org.jbpm.api.Configuration; import org.jbpm.api.ProcessEngine; import org.jbpm.api.task.Task; import org.junit.Test; public class Helloword { private ProcessEngine processEngine = new Configuration().setResource("jbpm.cfg.xml").buildProcessEngine(); // 部署流程定義 @Test public void deployProcessDefinition() { processEngine.getRepositoryService().createDeployment() .addResourceFromClasspath("com/guilin/jbpm/helloword.jpdl.xml") .addResourceFromClasspath("com/guilin/jbpm/helloword.png") .deploy(); System.out.println("部署流程完畢!"); } // 啟動流程實例 @Test public void startProcessInstance() { processEngine.getExecutionService().startProcessInstanceByKey("helloword"); System.out.println("啟動流程實例成功!"); } // 查詢我的任務列表 @Test public void findMyTaskList() { String[] userIds = { "員工", "部門經理", "總經理" }; for (int i = 0; i < userIds.length; i++) { // 查詢任務 List<Task> tasks = processEngine.getTaskService() .findPersonalTasks(userIds[i]); // 顯示任務信息 for (Task task : tasks) { System.out.println("-------------------------------------------------"); System.out.println("任務ID=" + task.getId() + ", 任務名稱=" + task.getName() + ", 任務辦理人=" + task.getAssignee() + ", 任務創建時間=" + task.getCreateTime()); } } } // 辦理任務 @Test public void completeTask() { // 任務 ID String taskId = "60001"; processEngine.getTaskService().completeTask(taskId); System.out.println(taskId + "任務完成!"); } }
測試過程:
灰色部分為控制台輸出:
- 執行
部署流程:deployProcessDefinition
部署流程完畢!
-
啟動第一個流程實例: startProcessInstance啟動流程實例成功!
-
查詢任務列表: findMyTaskList-------------------------------------------------任務ID=10002, 任務名稱=提交申請, 任務辦理人=員工, 任務創建時間=2013-07-16 11:20:18.0
-
再啟動第二個流程實例: startProcessInstance
-
查詢任務列表: findMyTaskList任務ID=10002, 任務名稱=提交申請, 任務辦理人=員工, 任務創建時間=2013-07-16 11:22:11.0任務ID=20002, 任務名稱=提交申請, 任務辦理人=員工, 任務創建時間=2013-07-16 11:20:18.0任務ID=30002, 任務名稱=提交申請, 任務辦理人=員工, 任務創建時間=2013-07-16 11:22:19.0--------------------------------------------------------------------------------------------------
-
辦理任務: completeTask; taskId 改為:1000210002任務完成!
-
查詢任務列表: findMyTaskList任務ID=20002, 任務名稱=提交申請, 任務辦理人=員工, 任務創建時間=2013-07-16 11:22:11.0任務ID=30002, 任務名稱=提交申請, 任務辦理人=員工, 任務創建時間=2013-07-16 11:22:19.0-------------------------------------------------任務ID=40001, 任務名稱=部門經理審批, 任務辦理人=部門經理, 任務創建時間=2013-07-16 11:24:45.0--------------------------------------------------------------------------------------------------
-
辦理任務: completeTask; taskId 改為:4000140001任務完成!
-
查詢任務列表: findMyTaskList任務ID=20002, 任務名稱=提交申請, 任務辦理人=員工, 任務創建時間=2013-07-16 11:22:11.0任務ID=30002, 任務名稱=提交申請, 任務辦理人=員工, 任務創建時間=2013-07-16 11:22:19.0--------------------------------------------------------------------------------------------------任務ID=50001, 任務名稱=總經理審批, 任務辦理人=總經理, 任務創建時間=2013-07-16 11:28:52.0-------------------------------------------------
-
辦理任務: completeTask; taskId 改為:5000150001任務完成!
-
查詢任務列表: findMyTaskList任務ID=20002, 任務名稱=提交申請, 任務辦理人=員工, 任務創建時間=2013-07-16 11:22:11.0任務ID=30002, 任務名稱=提交申請, 任務辦理人=員工, 任務創建時間=2013-07-16 11:22:19.0---------------------------------------------------------------------------------------------------------------------------------------------------
到此,第一個流程實例完成。