版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、高級(jí)軟件人才實(shí)作培訓(xùn)專家高級(jí)軟件人才實(shí)作培訓(xùn)專家! !北京傳智播客教育 JBPM4.4工作流講師講師: : 劉洋劉洋QQQQ:506069708506069708TELTEL: 高級(jí)軟件人才實(shí)作培訓(xùn)專家高級(jí)軟件人才實(shí)作培訓(xùn)專家! !北京傳智播客教育 JBPM入門入門高級(jí)軟件人才實(shí)作培訓(xùn)專家高級(jí)軟件人才實(shí)作培訓(xùn)專家! !北京傳智播客教育 JBPM入門l工作流(Workflow),就是“業(yè)務(wù)過(guò)程的部分或整體在計(jì)算機(jī)應(yīng)用環(huán)境下的自動(dòng)化”,它主要解決的是“使在多個(gè)參與者之間按照某種預(yù)定義的規(guī)則傳遞文檔、信息或任務(wù)的過(guò)程自動(dòng)進(jìn)行,從而實(shí)現(xiàn)某個(gè)預(yù)期的業(yè)務(wù)目標(biāo),或者促使此目標(biāo)的實(shí)現(xiàn)”。l通俗的說(shuō),流程就是多
2、個(gè)人在一起合作完成某件事情的步驟,把步驟變成計(jì)算機(jī)能理解的形式就是工作流。高級(jí)軟件人才實(shí)作培訓(xùn)專家高級(jí)軟件人才實(shí)作培訓(xùn)專家! !北京傳智播客教育 JBPM入門l工作流管理系統(tǒng)(WfMS,Workflow Management System)的主要功能是通過(guò)計(jì)算機(jī)技術(shù)的支持去定義、執(zhí)行和管理工作流,協(xié)調(diào)工作流執(zhí)行過(guò)程中工作之間以及群體成員之間的信息交互。應(yīng)能提供以下三個(gè)方面的功能支持:l1、定義工作流:包括具體的活動(dòng)、規(guī)則等l2、運(yùn)行控制功能:在運(yùn)行環(huán)境中管理工作流過(guò)程,對(duì)工作流過(guò)程中的活動(dòng)進(jìn)行調(diào)度l3、運(yùn)行交互功能:指在工作流運(yùn)行中,WfMS與用戶(活動(dòng)的參與者)及外部應(yīng)用程序工具交互的功能。
3、工作流主要實(shí)現(xiàn)功能工作流主要實(shí)現(xiàn)功能一、定義工作流二、執(zhí)行工作流 Swing/AWT +Applet、javascript、flex順序、分支、聚合、并發(fā)高級(jí)軟件人才實(shí)作培訓(xùn)專家高級(jí)軟件人才實(shí)作培訓(xùn)專家! !北京傳智播客教育 JBPM入門l采用工作流管理系統(tǒng)的優(yōu)點(diǎn)采用工作流管理系統(tǒng)的優(yōu)點(diǎn)l1、提高系統(tǒng)的柔性,適應(yīng)業(yè)務(wù)流程的變化、提高系統(tǒng)的柔性,適應(yīng)業(yè)務(wù)流程的變化l2、實(shí)現(xiàn)更好的業(yè)務(wù)過(guò)程控制,提高顧客服務(wù)質(zhì)量、實(shí)現(xiàn)更好的業(yè)務(wù)過(guò)程控制,提高顧客服務(wù)質(zhì)量l3、降低系統(tǒng)開發(fā)和維護(hù)成本、降低系統(tǒng)開發(fā)和維護(hù)成本l工作流框架有:工作流框架有:Jbpm、OSWorkflow、ActiveBPEL、YAWL等。
4、等。工作流系統(tǒng)的優(yōu)點(diǎn):工作流系統(tǒng)的優(yōu)點(diǎn):高級(jí)軟件人才實(shí)作培訓(xùn)專家高級(jí)軟件人才實(shí)作培訓(xùn)專家! !北京傳智播客教育 JBPM入門ljBPM 即java Business Process Management,是基于java的業(yè)務(wù)流程管理系統(tǒng)。jBPM是市面上相當(dāng)流行的一款開源工作流引擎,引擎底層基于Active Diagram模型。jBPM4.4使用了hibernate(3.3.1版),因此可以很好的支持主流數(shù)據(jù)庫(kù)。jBPM4.4共有18張表,用于存儲(chǔ)業(yè)務(wù)流程數(shù)據(jù)。ljBPM官方主頁(yè): 開源工作流開源工作流JBPM4.4介紹:介紹:高級(jí)軟件人才實(shí)作培訓(xùn)專家高級(jí)軟件人才實(shí)作培訓(xùn)專家! !北京傳智播客
5、教育 JBPM入門JBPM4.4操作流程操作流程高級(jí)軟件人才實(shí)作培訓(xùn)專家高級(jí)軟件人才實(shí)作培訓(xùn)專家! !北京傳智播客教育 準(zhǔn)備準(zhǔn)備JBPM環(huán)境環(huán)境高級(jí)軟件人才實(shí)作培訓(xùn)專家高級(jí)軟件人才實(shí)作培訓(xùn)專家! !北京傳智播客教育 準(zhǔn)備JBPM環(huán)境lJBPM所需環(huán)境l1、jBPM requires a JDK (standard java) version 5 or higher. l2、To execute the ant scripts, youll need apache ant version 1.7.0 or higher: l下載相關(guān)資源l1、jBPM下載地址: l2、Eclipse下載地址( E
6、clipse IDE for Java EE Developers (163 MB),Version:3.5 ): chnology/epp/downloads/release/galileo高級(jí)軟件人才實(shí)作培訓(xùn)專家高級(jí)軟件人才實(shí)作培訓(xùn)專家! !北京傳智播客教育 準(zhǔn)備JBPM環(huán)境l安裝流程設(shè)計(jì)器(GPD,Eclipse插件 )lGPD(Graphical Process Designer)是一個(gè)Eclipse插件。l路徑為:JBPM_HOME/ install/src/gpd/jbpm-gpd-site.zip 。l安裝方法說(shuō)明(jBPM4.4User Guide, 2.11.2. Insta
7、ll the GPD plugin into eclipse):lHelp - Install New Software. lClick Add. lIn dialog Add Site dialog, click Archive. lNavigate to install/src/gpd/jbpm-gpd-site.zip and click Open lClicking OK in the Add Site dialog will bring you back to the dialog Install lSelect the jPDL 4 GPD Update Site that has
8、 appeared lClick Next. and then Finish lApprove the license lRestart eclipse when that is asked高級(jí)軟件人才實(shí)作培訓(xùn)專家高級(jí)軟件人才實(shí)作培訓(xùn)專家! !北京傳智播客教育 準(zhǔn)備JBPM環(huán)境 查看是否成功安裝了插件:WindowPreference中是否有Jboss jBPM項(xiàng) 高級(jí)軟件人才實(shí)作培訓(xùn)專家高級(jí)軟件人才實(shí)作培訓(xùn)專家! !北京傳智播客教育 準(zhǔn)備JBPM環(huán)境l在Eclipse中添加jPDL4.4 Schema校驗(yàn) l流程定義文件的xsd文件的路徑為:JBPM_HOME/src/jpdl-4.4.xs
9、d。l添加到Eclipse中的方法為(jBPM4.4 User Guide, 2.11.5. Adding jPDL 4 schema to the catalog):lClick Window - Preferences lSelect XML - XML Catalog lClick Add. lThe Add XML Catalog Entry dialog opens lClick the button with the map-icon next to location and select File System. lIn the dialog that opens, select
10、 file jpdl-4.4.xsd in the src directory of the jBPM installation root. lClick Open and close all the dialogs高級(jí)軟件人才實(shí)作培訓(xùn)專家高級(jí)軟件人才實(shí)作培訓(xùn)專家! !北京傳智播客教育 準(zhǔn)備JBPM環(huán)境 高級(jí)軟件人才實(shí)作培訓(xùn)專家高級(jí)軟件人才實(shí)作培訓(xùn)專家! !北京傳智播客教育 準(zhǔn)備JBPM環(huán)境l準(zhǔn)備JPBM的開發(fā)環(huán)境l1、$JBPM_HOME/jbpm.jar(核心包)l2、JBPM_HOME/lib/*.jar,不添加以下jar包:servlet-api.jar, junit.jar。其中ju
11、nit.jar一定不要添加,因?yàn)槭?.8.2版本,與我們使用的junit4有沖突。l3、由于slf4j-jdk14.jar、slf4j-log4j12.jar都具有處理日志的功能,會(huì)避免出現(xiàn)沖突,所以可去掉slf4j-jdk14.jar。l其中的版本要一致才能夠建立數(shù)據(jù)庫(kù)表格。l4、所使用的數(shù)據(jù)庫(kù)對(duì)應(yīng)的驅(qū)動(dòng)的jar包(第2步所添加的jar包中已包含mysql的jdbc驅(qū)動(dòng)jar包)。高級(jí)軟件人才實(shí)作培訓(xùn)專家高級(jí)軟件人才實(shí)作培訓(xùn)專家! !北京傳智播客教育 準(zhǔn)備JBPM環(huán)境l添加并定制配置文件l1、配置文件可以從JBPM_HOME/examples/src/中拷貝:jbpm.cfg.xml、log
12、perties(拷貝hibernate包下/project/etc/perties即可)、jbpm.hibernate.cfg.xml。l2、修改perties中的日志輸出級(jí)別為Error: l log4j.rootLogger=ERROR, stdoutl3、修改jbpm.hibernate.cfg.xml中的數(shù)據(jù)庫(kù)連接信息。如果使用MySql,使用的方言一定要是org.hibernate.dialect.MySQL5InnoDBDialect。l4、數(shù)據(jù)庫(kù)連接編碼一定要是UTF-8。否則可能會(huì)在部署含有中文字符的流程定義時(shí)會(huì)拋異常,說(shuō)
13、sql語(yǔ)法錯(cuò)誤。l5、連接數(shù)據(jù)庫(kù)的時(shí)候,建議使用l jdbc:mysql:/localhost:3306/itcastjbpm?useUnicode=true&characterEncoding=utf8可防止存儲(chǔ)到數(shù)據(jù)庫(kù)的值是亂碼l注意:如使用MySQLDialect,就會(huì)在流程實(shí)例結(jié)束時(shí)拋異常:com.mysql.jdbc.exceptions.MySQLIntegrityConstraintViolationException: Cannot delete or update a parent row: a foreign key constraint fails (jb
14、pm44_20101028/jbpm4_execution, CONSTRAINT FK_EXEC_INSTANCE FOREIGN KEY (INSTANCE_) REFERENCES jbpm4_execution (DBID_)。高級(jí)軟件人才實(shí)作培訓(xùn)專家高級(jí)軟件人才實(shí)作培訓(xùn)專家! !北京傳智播客教育 準(zhǔn)備JBPM環(huán)境l初始化數(shù)據(jù)庫(kù)l方法一:執(zhí)行sql腳本文件$JBPM4.4_HOME/install/src/db/create/jbpm.*.create.sqll嚴(yán)格按照其中的建表格式建表l方法二:使用Hibernate的自動(dòng)建表,在jbpm.hibernate.cfg.xml中配置:h
15、ibernate.hbm2ddl.auto=update。l可以初始化程序創(chuàng)建表,例如:lpublic void testCreateSchema() / hbm2ddl.auto=updatelnew org.hibernate.cfg.Configuration().configure(jbpm.hibernate.cfg.xml).buildSessionFactory();l高級(jí)軟件人才實(shí)作培訓(xùn)專家高級(jí)軟件人才實(shí)作培訓(xùn)專家! !北京傳智播客教育 第一章:第一章:JPBM程序程序HelloWorld高級(jí)軟件人才實(shí)作培訓(xùn)專家高級(jí)軟件人才實(shí)作培訓(xùn)專家! !北京傳智播客教育 JPBM程序Hel
16、loWorld流程圖流程圖高級(jí)軟件人才實(shí)作培訓(xùn)專家高級(jí)軟件人才實(shí)作培訓(xùn)專家! !北京傳智播客教育 JPBM程序HelloWorld建表并創(chuàng)建流程引擎對(duì)象(核心對(duì)象)建表并創(chuàng)建流程引擎對(duì)象(核心對(duì)象)/ 建表Testpublic void testCreateSchema() / hbm2ddl.auto=updatenew org.hibernate.cfg.Configuration().configure(jbpm.hibernate.cfg.xml).buildSessionFactory();private ProcessEngine processEngine = new Confi
17、guration().setResource(jbpm.cfg.xml).buildProcessEngine();流程引擎(工作流核心對(duì)象)高級(jí)軟件人才實(shí)作培訓(xùn)專家高級(jí)軟件人才實(shí)作培訓(xùn)專家! !北京傳智播客教育 JPBM程序HelloWorld部署流程定義部署流程定義/ 1,部署流程定義Testpublic void testDeployProcessDefinition() throws Exception processEngine.getRepositoryService()/.createDeployment()/.addResourceFromClasspath(helloworl
18、d/helloworld.jpdl.xml)/.addResourceFromClasspath(helloworld/helloworld.png)/.deploy();高級(jí)軟件人才實(shí)作培訓(xùn)專家高級(jí)軟件人才實(shí)作培訓(xùn)專家! !北京傳智播客教育 JPBM程序HelloWorld啟動(dòng)流程實(shí)例啟動(dòng)流程實(shí)例/ 2,啟動(dòng)流程實(shí)例Testpublic void testStartProcessInstance() throws Exception ProcessInstance pi = processEngine.getExecutionService().startProcessInstanceByK
19、ey(helloworld);System.out.println(流程實(shí)例啟動(dòng)成功!id=+pi.getId() +name=+pi.getName() +key=+pi.getKey()+getProcessDefinitionId=+pi.getProcessDefinitionId();高級(jí)軟件人才實(shí)作培訓(xùn)專家高級(jí)軟件人才實(shí)作培訓(xùn)專家! !北京傳智播客教育 JPBM程序HelloWorld查詢我的任務(wù)列表(未辦理)查詢我的任務(wù)列表(未辦理)/ 3,查詢我的未辦理的任務(wù)列表Testpublic void testFindMyTaskList() throws Exception / 查詢
20、/ String userId = 員工;/ String userId = 部門經(jīng)理;String userId = 總經(jīng)理;List taskList = processEngine.getTaskService().findPersonalTasks(userId);/ 顯示System.out.println(= 【 + userId + 】的任務(wù)列表 =);for (Task task : taskList) System.out.println(id= + task.getId() + , name= + task.getName() + , assignee= + task.ge
21、tAssignee();高級(jí)軟件人才實(shí)作培訓(xùn)專家高級(jí)軟件人才實(shí)作培訓(xùn)專家! !北京傳智播客教育 JPBM程序HelloWorld辦理任務(wù)辦理任務(wù)/ 4,辦理任務(wù)Testpublic void testCompleteTask() throws Exception String taskId = 50001;processEngine.getTaskService().completeTask(taskId);高級(jí)軟件人才實(shí)作培訓(xùn)專家高級(jí)軟件人才實(shí)作培訓(xùn)專家! !北京傳智播客教育 第二章:流程定義管理第二章:流程定義管理CRUD高級(jí)軟件人才實(shí)作培訓(xùn)專家高級(jí)軟件人才實(shí)作培訓(xùn)專家! !北京傳智播客教
22、育 流程定義管理CRUD流程圖流程圖高級(jí)軟件人才實(shí)作培訓(xùn)專家高級(jí)軟件人才實(shí)作培訓(xùn)專家! !北京傳智播客教育 流程定義管理CRUD創(chuàng)建流程引擎的創(chuàng)建流程引擎的3種方式種方式第一種:使用默認(rèn)的配置文件(第一種:使用默認(rèn)的配置文件(jbpm.cfg.xml)生成)生成Configuration并構(gòu)建并構(gòu)建ProcessEngine:ProcessEngine processEngine = new Configuration().buildProcessEngine();第二種:使用指定的配置文件第二種:使用指定的配置文件(要放到要放到classPath下下):ProcessEngine proce
23、ssEngine = new Configuration() .setResource(my-own-configuration-file.xml) .buildProcessEngine();第三種:使用如下代碼獲取使用默認(rèn)配置文件的、單例的第三種:使用如下代碼獲取使用默認(rèn)配置文件的、單例的ProcessEngine對(duì)象:對(duì)象:ProcessEngine processEngine = Configuration.getProcessEngine();高級(jí)軟件人才實(shí)作培訓(xùn)專家高級(jí)軟件人才實(shí)作培訓(xùn)專家! !北京傳智播客教育 流程定義管理CRUD部署流程定義部署流程定義/ 部署Testpubli
24、c void testDeploy() throws Exception String deploymentId = processEngine.getRepositoryService()/.createDeployment()/.addResourceFromClasspath(helloworld/helloworld.jpdl.xml)/.addResourceFromClasspath(helloworld/helloworld.png)/.deploy();System.out.println(deploymentId= + deploymentId);/ 部署Testpublic
25、 void testDeploy_zip() throws Exception InputStream in = getClass().getClassLoader().getResourceAsStream(helloworld/helloworld.zip);ZipInputStream zipInputStream = new ZipInputStream(in);String deploymentId = processEngine.getRepositoryService()/.createDeployment()/.addResourcesFromZipInputStream(zi
26、pInputStream)/.deploy();System.out.println(deploymentId= + deploymentId);高級(jí)軟件人才實(shí)作培訓(xùn)專家高級(jí)軟件人才實(shí)作培訓(xùn)專家! !北京傳智播客教育 流程定義管理CRUD查詢流程定義查詢流程定義/ 查詢所有Testpublic void testFindAll() throws Exception / 查詢List list = processEngine.getRepositoryService()/.createProcessDefinitionQuery()/ 過(guò)濾條件/ .processDefinitionId(hel
27、loworld-1)/.processDefinitionKey(helloworld)/ 排序/ .orderAsc(ProcessDefinitionQuery.PROPERTY_ID)/ .orderDesc(ProcessDefinitionQuery.PROPERTY_VERSION)/ 執(zhí)行查詢/ .uniqueResult();/ .count();/ .page(firstResult, maxResults)/.list();/ 顯示for (ProcessDefinition pd : list) System.out.println(id= + pd.getId()/ 格
28、式:key-version+ , name= + pd.getName()/ .jpdl.xml根元素的name屬性的值+ , key= + pd.getKey()/ .jpdl.xml根元素的key屬性的值,如果不寫,默認(rèn)為name屬性的值+ , version= + pd.getVersion()/ 默認(rèn)自動(dòng)維護(hù),第1個(gè)是1,以后相同key的都會(huì)自動(dòng)加1+ , deploymentId= + pd.getDeploymentId(); / 所屬的某個(gè)Deployment的對(duì)象高級(jí)軟件人才實(shí)作培訓(xùn)專家高級(jí)軟件人才實(shí)作培訓(xùn)專家! !北京傳智播客教育 流程定義管理CRUD刪除流程定義(使用部署流
29、程定義刪除流程定義(使用部署流程定義ID)/ 刪除(使用流程定義ID)Testpublic void testDeleteById() throws Exception String deploymentId = 90001;/ 刪除某部署對(duì)象(也可以稱之為刪除流程流程定義),如果有關(guān)聯(lián)的執(zhí)行信息,就報(bào)錯(cuò)/ processEngine.getRepositoryService().deleteDeployment(deploymentId);/ 刪除某部署對(duì)象(也可以稱之為刪除流程流程定義),如果有關(guān)聯(lián)的執(zhí)行信息,就級(jí)聯(lián)刪除processEngine.getRepositoryService(
30、).deleteDeploymentCascade(deploymentId);高級(jí)軟件人才實(shí)作培訓(xùn)專家高級(jí)軟件人才實(shí)作培訓(xùn)專家! !北京傳智播客教育 流程定義管理CRUD查看流程定義的流程圖查看流程定義的流程圖/ 查看流程圖(xxx.png)Testpublic void testShowProcessImage() throws Exception / 獲取文件內(nèi)容String deploymentId = 1;String resourceName = helloworld/helloworld.png;InputStream in = processEngine.getReposito
31、ryService()/.getResourceAsStream(deploymentId, resourceName);/ 保存到c:/FileOutputStream out = new FileOutputStream(c:/process.png);for (int b = -1; (b = in.read() != -1;) out.write(b);in.close();out.close();高級(jí)軟件人才實(shí)作培訓(xùn)專家高級(jí)軟件人才實(shí)作培訓(xùn)專家! !北京傳智播客教育 流程定義管理CRUD查詢所有最新版本的流程定義查詢所有最新版本的流程定義Testpublic void testFin
32、dAllLatestVersions() throws Exception / 查詢,把最大的版本都排到后面List list = processEngine.getRepositoryService()/.createProcessDefinitionQuery()/.orderAsc(ProcessDefinitionQuery.PROPERTY_VERSION)/.list();/ 過(guò)濾出最新的版本Map map = new LinkedHashMap();for (ProcessDefinition pd : list) map.put(pd.getKey(), pd);/ 顯示for
33、 (ProcessDefinition pd : map.values() System.out.println(id= + pd.getId()/ 格式:key-version+ , name= + pd.getName()/ .jpdl.xml根元素的name屬性的值+ , key= + pd.getKey()/ .jpdl.xml根元素的key屬性的值,如果不寫,默認(rèn)為name屬性的值+ , version= + pd.getVersion()/ 默認(rèn)自動(dòng)維護(hù),第1個(gè)是1,以后相同key的都會(huì)自動(dòng)加1+ , deploymentId + pd.getDeploymentId(); / 所
34、屬的某個(gè)Deployment的對(duì)象高級(jí)軟件人才實(shí)作培訓(xùn)專家高級(jí)軟件人才實(shí)作培訓(xùn)專家! !北京傳智播客教育 流程定義管理CRUD刪除流程定義(刪除刪除流程定義(刪除key相同的所有不同版本的流程定義)相同的所有不同版本的流程定義)/ 刪除(使用流程定義的key)Testpublic void testDeleteByKey() throws Exception / 1,查詢指定key的所有版本的流程定義List list = processEngine.getRepositoryService()/.createProcessDefinitionQuery()/.processDefinitio
35、nKey(helloworld)/.list();/ 2,循環(huán)刪除for (ProcessDefinition pd : list) processEngine.getRepositoryService()/.deleteDeploymentCascade(pd.getDeploymentId();高級(jí)軟件人才實(shí)作培訓(xùn)專家高級(jí)軟件人才實(shí)作培訓(xùn)專家! !北京傳智播客教育 流程定義管理CRUD流程定義中涉及到的流程定義中涉及到的JBPM表表Deployment 部署對(duì)象1、一次部署的多個(gè)文件的信息。對(duì)于不需要的流程可以刪除和修改。2、對(duì)應(yīng)的表: jbpm4_deployment jbpm4_dep
36、loyprop jpbm4_lobProcessDefinition 流程定義 解析.jpdl.xml后得到的流程定義規(guī)則的信息。高級(jí)軟件人才實(shí)作培訓(xùn)專家高級(jí)軟件人才實(shí)作培訓(xùn)專家! !北京傳智播客教育 第三章:流程實(shí)例、任務(wù)的執(zhí)行第三章:流程實(shí)例、任務(wù)的執(zhí)行高級(jí)軟件人才實(shí)作培訓(xùn)專家高級(jí)軟件人才實(shí)作培訓(xùn)專家! !北京傳智播客教育 流程實(shí)例的執(zhí)行流程圖流程圖高級(jí)軟件人才實(shí)作培訓(xùn)專家高級(jí)軟件人才實(shí)作培訓(xùn)專家! !北京傳智播客教育 流程實(shí)例的執(zhí)行部署流程定義:部署流程定義:/部署流程定義Testpublic void testDeployment()InputStream in = this.getC
37、lass().getClassLoader().getResourceAsStream(test/test.zip);ZipInputStream zip = new ZipInputStream(in);String processDeploymentId = processEngine.getRepositoryService()/.createDeployment()/.addResourcesFromZipInputStream(zip)/.deploy();System.out.println(processDeploymentId);高級(jí)軟件人才實(shí)作培訓(xùn)專家高級(jí)軟件人才實(shí)作培訓(xùn)專家
38、! !北京傳智播客教育 流程實(shí)例的執(zhí)行啟動(dòng)流程實(shí)例:?jiǎn)?dòng)流程實(shí)例:/ 啟動(dòng)流程實(shí)例Testpublic void testStartProcessInstance() throws Exception ProcessInstance pi = processEngine.getExecutionService().startProcessInstanceByKey(test);System.out.println(流程實(shí)例啟動(dòng)成功,processInstanceId= + pi.getId();高級(jí)軟件人才實(shí)作培訓(xùn)專家高級(jí)軟件人才實(shí)作培訓(xùn)專家! !北京傳智播客教育 流程實(shí)例的執(zhí)行查看我的任務(wù)列
39、表:查看我的任務(wù)列表:Testpublic void testFindMyTaskList() throws Exception / 查詢String userId = 部門經(jīng)理;/ List list = processEngine.getTaskService().findPersonalTasks(userId);List list = processEngine.getTaskService()/.createTaskQuery()/.assignee(userId)/ 要是指定的辦理人/ .count()/ .page(firstResult, maxResults).list();
40、/ 顯示for (Task task : list) System.out.println(id= + task.getId()/+ , name= + task.getName()/ 任務(wù)的名稱+ , assignee= + task.getAssignee()/ 任務(wù)的辦理人+ , createTime= + task.getCreateTime()/ 任務(wù)的創(chuàng)建時(shí)間+ , executionId= + task.getExecutionId(); / 所屬的執(zhí)行對(duì)象的id高級(jí)軟件人才實(shí)作培訓(xùn)專家高級(jí)軟件人才實(shí)作培訓(xùn)專家! !北京傳智播客教育 流程實(shí)例的執(zhí)行辦理任務(wù):辦理任務(wù):/ 辦理任務(wù)
41、Testpublic void testCompleteTask() throws Exception String taskId = 20002;processEngine.getTaskService().completeTask(taskId);高級(jí)軟件人才實(shí)作培訓(xùn)專家高級(jí)軟件人才實(shí)作培訓(xùn)專家! !北京傳智播客教育 流程實(shí)例的執(zhí)行流程向后執(zhí)行一步:(當(dāng)該流程不做處理的時(shí)候使用)流程向后執(zhí)行一步:(當(dāng)該流程不做處理的時(shí)候使用)/ 讓流程向后執(zhí)行一步Testpublic void testSignalExecution() throws Exception /String execution
42、Id = helloworld.20001;/String signalName = to 審批 總經(jīng)理;String executionId = helloworld.20001;processEngine.getExecutionService().signalExecutionById(executionId,to 審批 總經(jīng)理);高級(jí)軟件人才實(shí)作培訓(xùn)專家高級(jí)軟件人才實(shí)作培訓(xùn)專家! !北京傳智播客教育 流程實(shí)例的執(zhí)行流程實(shí)例涉及的概念,及涉及到數(shù)據(jù)庫(kù)表流程實(shí)例涉及的概念,及涉及到數(shù)據(jù)庫(kù)表Execution 執(zhí)行對(duì)象執(zhí)行對(duì)象 按流程定義執(zhí)行一次的過(guò)程信息按流程定義執(zhí)行一次的過(guò)程信息. 對(duì)應(yīng)
43、的表:對(duì)應(yīng)的表: jbpm4_execution 正在執(zhí)行的信息正在執(zhí)行的信息 jbpm4_hist_procinst 已經(jīng)執(zhí)行完的歷史信息已經(jīng)執(zhí)行完的歷史信息ProcessInstance 流程實(shí)例流程實(shí)例 特指流程從開始到結(jié)束的那個(gè)最大的執(zhí)行分支。特指流程從開始到結(jié)束的那個(gè)最大的執(zhí)行分支。Task 任務(wù)任務(wù) 執(zhí)行到某任務(wù)環(huán)節(jié)時(shí)生成的任務(wù)信息。執(zhí)行到某任務(wù)環(huán)節(jié)時(shí)生成的任務(wù)信息。 對(duì)應(yīng)的表:對(duì)應(yīng)的表: jbpm4_task 正在執(zhí)行的任務(wù)信息正在執(zhí)行的任務(wù)信息 jbpm4_hist_task 已經(jīng)執(zhí)行完的歷史任務(wù)信息已經(jīng)執(zhí)行完的歷史任務(wù)信息高級(jí)軟件人才實(shí)作培訓(xùn)專家高級(jí)軟件人才實(shí)作培訓(xùn)專家! !
44、北京傳智播客教育 第四章:流程變量第四章:流程變量高級(jí)軟件人才實(shí)作培訓(xùn)專家高級(jí)軟件人才實(shí)作培訓(xùn)專家! !北京傳智播客教育 流程變量流程圖流程圖高級(jí)軟件人才實(shí)作培訓(xùn)專家高級(jí)軟件人才實(shí)作培訓(xùn)專家! !北京傳智播客教育 流程變量設(shè)置流程變量:設(shè)置流程變量:/ 設(shè)置流程變量Testpublic void testSetVariable() throws Exception String executionId = test.80001; String name = 請(qǐng)假天數(shù); Object value = new Integer(5); processEngine.getExecutionServic
45、e().setVariable(executionId, name, value);/Form form = new Form(1L, 張三請(qǐng)假11天);/processEngine.getExecutionService().setVariable(executionId, form, form);注意:Object對(duì)象需要實(shí)現(xiàn):implements java.io.Serializable高級(jí)軟件人才實(shí)作培訓(xùn)專家高級(jí)軟件人才實(shí)作培訓(xùn)專家! !北京傳智播客教育 流程變量獲取流程變量:獲取流程變量:/ 獲取流程變量Testpublic void testGetVariable() throws
46、 Exception String executionId = test.80001; String name = 請(qǐng)假天數(shù); Object value = processEngine.getExecutionService().getVariable(executionId, name); System.out.println(name + = + value);/Form form = (Form) processEngine.getExecutionService().getVariable(executionId, form);/System.out.println(id= + for
47、m.getId() + , title= + form.getTitle();高級(jí)軟件人才實(shí)作培訓(xùn)專家高級(jí)軟件人才實(shí)作培訓(xùn)專家! !北京傳智播客教育 流程變量流程變量設(shè)置和獲取實(shí)例場(chǎng)景:流程變量設(shè)置和獲取實(shí)例場(chǎng)景:/ ExecutionService executionService = processEngine.getExecutionService();/ TaskService taskService = processEngine.getTaskService();/ / =/ / 設(shè)置變量的方法/ / 通過(guò)Execution設(shè)置一個(gè)變量/ executionService.setV
48、ariable(executionId, name, value);/ / 通過(guò)Execution設(shè)置多個(gè)變量/ executionService.setVariables(executionId, variablesMap);/ / 通過(guò)Task設(shè)置多個(gè)變量/ taskService.setVariables(taskId, variablesMap);/ / 在啟動(dòng)流程實(shí)例時(shí),同時(shí)也設(shè)置一些流程變量/ executionService.startProcessInstanceByKey(processDefinitionKey, variablesMap);/ / 在完成任務(wù)時(shí),同時(shí)也設(shè)置
49、一些流程變量/ taskSpleteTask(taskId, variablesMap);/ / =/ / 獲取變量的方法/ / 通過(guò)Execution獲取一個(gè)變量/ executionService.getVariable(executionId, variableName);/ / 通過(guò)Execution獲取所有變量的名稱集合/ executionService.getVariableNames(executionId);/ / 通過(guò)Execution獲取所有變量的信息/ executionService.getVariables(executionId, variableNames);高
50、級(jí)軟件人才實(shí)作培訓(xùn)專家高級(jí)軟件人才實(shí)作培訓(xùn)專家! !北京傳智播客教育 流程變量流程變量涉及的概念,及涉及到數(shù)據(jù)庫(kù)表流程變量涉及的概念,及涉及到數(shù)據(jù)庫(kù)表流程變量流程變量 在流程執(zhí)行或者任務(wù)執(zhí)行的過(guò)程中,用于設(shè)置和獲取變量,使用流程變量在流程傳遞的過(guò)程中傳在流程執(zhí)行或者任務(wù)執(zhí)行的過(guò)程中,用于設(shè)置和獲取變量,使用流程變量在流程傳遞的過(guò)程中傳遞業(yè)務(wù)參數(shù)。遞業(yè)務(wù)參數(shù)。對(duì)應(yīng)的表:對(duì)應(yīng)的表: jbpm4_variable高級(jí)軟件人才實(shí)作培訓(xùn)專家高級(jí)軟件人才實(shí)作培訓(xùn)專家! !北京傳智播客教育 第五章:連線第五章:連線高級(jí)軟件人才實(shí)作培訓(xùn)專家高級(jí)軟件人才實(shí)作培訓(xùn)專家! !北京傳智播客教育 連線流程圖:流程圖:高
51、級(jí)軟件人才實(shí)作培訓(xùn)專家高級(jí)軟件人才實(shí)作培訓(xùn)專家! !北京傳智播客教育 連線對(duì)于不需要查看流程圖,只需裝載流程的配置文件時(shí):對(duì)于不需要查看流程圖,只需裝載流程的配置文件時(shí):public static void main(String args) throws UnsupportedEncodingException URL url = ProcessTest.class.getResource(test.jpdl.xml);System.out.println(url.getPath();System.out.println(URLDecoder.decode(url.getPath(), UT
52、F-8);高級(jí)軟件人才實(shí)作培訓(xùn)專家高級(jí)軟件人才實(shí)作培訓(xùn)專家! !北京傳智播客教育 連線部署流程定義和啟動(dòng)流程實(shí)例:部署流程定義和啟動(dòng)流程實(shí)例:/ 1,部署流程定義URL url = getClass().getResource(test.jpdl.xml);processEngine.getRepositoryService()/.createDeployment()/.addResourceFromUrl(url)/.deploy();System.out.println(流程定義部署成功!);/ 2,啟動(dòng)流程實(shí)例ProcessInstance pi = processEngine.getE
53、xecutionService().startProcessInstanceByKey(test);System.out.println(流程實(shí)例啟動(dòng)成功!processInstanceId = + pi.getId();高級(jí)軟件人才實(shí)作培訓(xùn)專家高級(jí)軟件人才實(shí)作培訓(xùn)專家! !北京傳智播客教育 連線查詢?nèi)蝿?wù):查詢?nèi)蝿?wù):/ 3,查看當(dāng)前任務(wù)Task task = processEngine.getTaskService()/.createTaskQuery()/ 查詢本流程實(shí)例中目前僅有的一個(gè)任務(wù).processInstanceId(pi.getId()/.uniqueResult();Syste
54、m.out.println(taskid=+task.getId();System.out.println(taskname=+task.getName();System.out.println(taskactivityName=+task.getActivityName();/ processEngine.getTaskService().completeTask(task.getId();高級(jí)軟件人才實(shí)作培訓(xùn)專家高級(jí)軟件人才實(shí)作培訓(xùn)專家! !北京傳智播客教育 連線執(zhí)行完第一個(gè)任務(wù),并使用指定的連線離開:執(zhí)行完第一個(gè)任務(wù),并使用指定的連線離開:Testpublic void testComp
55、leteTask()/ 4,執(zhí)行完第1個(gè)任務(wù),并使用指定的Transition離開String taskId = 200001;String transitionName1 = to end1;String transitionName2 = to 審批 總經(jīng)理;/ 辦理完任務(wù),使用指定名稱的Transition離開/ processEngine.getTaskService().completeTask(task.getId(), transitionName2);/processEngine.getTaskService().completeTask(taskId, transitionN
56、ame2);processEngine.getTaskService().completeTask(taskId);System.out.println(任務(wù)執(zhí)行完畢!);高級(jí)軟件人才實(shí)作培訓(xùn)專家高級(jí)軟件人才實(shí)作培訓(xùn)專家! !北京傳智播客教育 連線連線特點(diǎn):連線特點(diǎn):1、一個(gè)活動(dòng)中可以指定一個(gè)或多個(gè)Transition(就是連線)(Start中只能有一個(gè),End中沒有)。 * 開始活動(dòng)中只能有一個(gè)Transition。 * 結(jié)束活動(dòng)中沒有Transition。 * 其他活動(dòng)中有1條或多條Transition2、如果只有一個(gè),則可以不指定名稱(名稱是null); 如果有多個(gè),則要分別指定唯一的名
57、稱。高級(jí)軟件人才實(shí)作培訓(xùn)專家高級(jí)軟件人才實(shí)作培訓(xùn)專家! !北京傳智播客教育 第六章:活動(dòng)第六章:活動(dòng)高級(jí)軟件人才實(shí)作培訓(xùn)專家高級(jí)軟件人才實(shí)作培訓(xùn)專家! !北京傳智播客教育 活動(dòng)1:開始活動(dòng)(start) 代表流程的開始邊界,一個(gè)流程有且只能有一個(gè)Start活動(dòng)。開始活動(dòng)只能指定一個(gè)Transition。在流程實(shí)例啟動(dòng)后,會(huì)自動(dòng)的使用這個(gè)唯一的Transition離開開始活動(dòng),到一下個(gè)活動(dòng)。2:結(jié)束活動(dòng)(end;end-error;end-cancel) 代表流程的結(jié)束邊界,可以有多個(gè),也可以沒有。如果有多個(gè),則到達(dá)任一個(gè)結(jié)束活動(dòng),整個(gè)流程就都結(jié)束了;如果沒有,則到達(dá)最后那個(gè)沒有Transiti
58、on的活動(dòng),流程就結(jié)束了。3:狀態(tài)活動(dòng)(state) 功能:等待。4:任務(wù)活動(dòng)(task) (1):分配任務(wù): (2):assignment=#String型的變量,使用變量指定任務(wù)的辦理人 (3):AssignmentHandler,需要在元素中寫子元素。指定的類要實(shí)現(xiàn)AssignmentHandler接口 (4)在其中可以使用Assignable.setAssignee(String),分配個(gè)人任務(wù)。 高級(jí)軟件人才實(shí)作培訓(xùn)專家高級(jí)軟件人才實(shí)作培訓(xùn)專家! !北京傳智播客教育 活動(dòng)(decision)流程圖(判斷流程圖(判斷decision):):高級(jí)軟件人才實(shí)作培訓(xùn)專家高級(jí)軟件人才實(shí)作培訓(xùn)專
59、家! !北京傳智播客教育 活動(dòng)(decision)判斷(判斷(decision)活動(dòng):)活動(dòng):URL url = this.getClass().getResource(test.jpdl.xml);String deploymentID = processEngine.getRepositoryService()/.createDeployment()/.addResourceFromUrl(url)/.deploy();System.out.println(部署流程定義成功!deploymentID+deploymentID);/Integer value = 300;Integer va
60、lue = 3000;Map variables = new HashMap();variables.put(報(bào)銷金額, value);ProcessInstance pi = processEngine.getExecutionService().startProcessInstanceByKey(test,variables);System.out.println(啟動(dòng)流程實(shí)例成功!id=+pi.getId();Task task = processEngine.getTaskService()/.createTaskQuery()/.processInstanceId(pi.getId()/.u
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 物流課程設(shè)計(jì)實(shí)驗(yàn)
- 種蘑菇課程設(shè)計(jì)
- 中華人民共和國(guó)民法典知識(shí)競(jìng)賽題庫(kù)及答案
- 2024幼兒園安全教育工作總結(jié)結(jié)尾(31篇)
- 2024年自來(lái)水公司年終工作總結(jié)(35篇)
- 液體混合裝置plc課程設(shè)計(jì)
- 玉雕課程設(shè)計(jì)
- 食品行業(yè)客服工作總結(jié)
- 客房清潔員的工作總結(jié)
- 中醫(yī)科醫(yī)師工作總結(jié)
- 深部真菌病課件
- 用戶界面測(cè)試
- 人工氣道濕化的護(hù)理培訓(xùn)課件
- 電網(wǎng)適用的法律法規(guī)標(biāo)準(zhǔn)規(guī)范清單
- 讀書分享-給教師的一百條建議
- GB/T 4269.3-2000農(nóng)林拖拉機(jī)和機(jī)械、草坪和園藝動(dòng)力機(jī)械操作者操縱機(jī)構(gòu)和其他顯示裝置用符號(hào)第3部分:草坪和園藝動(dòng)力機(jī)械用符號(hào)
- GB/T 11618.1-2008銅管接頭第1部分:釬焊式管件
- 開工復(fù)工第一課
- 安徽省淮南市鳳臺(tái)縣基層診所醫(yī)療機(jī)構(gòu)衛(wèi)生院社區(qū)衛(wèi)生服務(wù)中心村衛(wèi)生室地址信息
- 旅游服務(wù)禮儀說(shuō)課市公開課金獎(jiǎng)市賽課一等獎(jiǎng)?wù)n件
- 【線性代數(shù)自考練習(xí)題】滇西應(yīng)用技術(shù)大學(xué)專升本真題匯總(附答案解析)
評(píng)論
0/150
提交評(píng)論