posts - 59, comments - 244, trackbacks - 0, articles - 0
            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

          JBPM4.2小例子(swing實(shí)現(xiàn))

          Posted on 2009-12-09 00:51 penngo 閱讀(5216) 評論(36)  編輯  收藏 所屬分類: JBPM

          本次用的是一個(gè)特別流程,假設(shè)C提交一個(gè)表單,這個(gè)表單需要給A和B閱讀,而A和B閱讀過后,流程結(jié)束.
          流程定義文件swing.jpdl.xml

          <?xml version="1.0" encoding="UTF-8"?>

          <process name="swing" xmlns="http://jbpm.org/4.0/jpdl">
             
          <start g="94,64,48,48" name="start1">
                
          <transition g="-52,-22" name="A" to="A"/>
             
          </start>
             
          <task assignee="A" g="73,195,92,52" name="A">
                
          <transition g="-52,-22" name="B" to="B"/>
             
          </task>
             
          <task assignee="B" g="266,192,92,52" name="B">
                
          <transition g="-40,-21" name="end" to="end1"/>
             
          </task>
             
          <end g="290,327,48,48" name="end1"/>
          </process>


          流程圖

          增加兩個(gè)表:
          用戶表p_user:
          USER_      用戶登錄ID
          PASSWORD_  用戶登錄密碼

          表單數(shù)據(jù)表p_form:
          ID_             表單編號
          TITLE_          表單標(biāo)題
          CONTENT_        表單內(nèi)容
          PROCESS_ID      流程實(shí)例ID
          p_form除了記錄表單數(shù)據(jù),還記錄啟動流程實(shí)例的ID,這個(gè)表負(fù)責(zé)把表單和流程關(guān)聯(lián)起來.


          提交表單時(shí)的操作,FormPanel.java部分代碼:

          okBtn = new JButton("提交表單");
          okBtn.addActionListener(
          new ActionListener(){
          public void actionPerformed(ActionEvent e){
           String t 
          = title.getText().trim();
           String c 
          = content.getText().trim();
           String processId 
          = startProcessInstance();
              
           DataBase db 
          = new DataBase();
           
          if(db.saveForm(t, c, processId)){
            JOptionPane.showMessageDialog(
          null"保存表單數(shù)據(jù)成功:");
            title.setText(
          "");
            content.setText(
          "");
           }

          }

          }
          );



          private String startProcessInstance(){
           Configuration configuration 
          = new Configuration();
           ProcessEngine processEngine 
          = configuration.buildProcessEngine();
           RepositoryService repositoryService 
          = processEngine.getRepositoryService();
           ExecutionService executionService 
          = processEngine.getExecutionService();
           ProcessInstance processInstance 
          = executionService.startProcessInstanceByKey("swing");
           
          if(processInstance == null){
               JOptionPane.showMessageDialog(
          null"請先發(fā)布流程.");
           }

           
          else{
               
          return processInstance.getId();
           }

           
          return "";
          }



          代碼很簡單,行獲取表單的數(shù)據(jù),再啟動流程實(shí)例,并把表單數(shù)據(jù)和流程實(shí)例ID一起保存在數(shù)據(jù)庫表p_form.


          在用戶處理任務(wù)時(shí),先根據(jù)用戶的ID查找到該用戶的待處理任務(wù),并把它添加到任務(wù)列表中,

          DefaultListModel v = new DefaultListModel();
          List list 
          = getTaskList(Login.userName);
          if(list.size() > 0){
           
          for(int s = 0; s < list.size(); s++){
            Task t 
          = (Task)list.get(s);
            String executionId 
          = t.getExecutionId();
            DataBase db 
          = new DataBase();
            TaskPojo tp 
          = db.findForm(executionId);
            tp.setTaskId(t.getId());
            
          if(tp != null){
             v.addElement(tp);
            }

           }

          }

          jList 
          = new JList(v);
          .
           
          private List getTaskList(String userId){
            
          if(configuration == null){
             configuration 
          = new Configuration();
            }

               ProcessEngine processEngine 
          = configuration.buildProcessEngine();
               RepositoryService repositoryService 
          = processEngine.getRepositoryService();
               ExecutionService executionService 
          = processEngine.getExecutionService();
               TaskService taskService 
          = processEngine.getTaskService();
               HistoryService historyService 
          = processEngine.getHistoryService();
               ManagementService managementService 
          = processEngine.getManagementService();
               List
          <Task> taskList = taskService.findPersonalTasks(userId);
               
          return taskList;
           }



          用戶處理任務(wù),根據(jù)列表中選中記錄中的流程實(shí)例任務(wù)ID,調(diào)用taskService.completeTask(taskId)完成任務(wù),
          okBtn 
          = new JButton("審閱通過");
          okBtn.addActionListener( 
          new ActionListener(){
           
          public void actionPerformed(ActionEvent e){
            Object o 
          = jList.getSelectedValue();
            
          if(o instanceof TaskPojo){
             TaskPojo tp 
          = (TaskPojo)o;
             completeTask(tp.getTaskId());
             JOptionPane.showMessageDialog(
          null"審核已經(jīng)通過!");
             DefaultListModel dl 
          = (DefaultListModel)jList.getModel();
             dl.remove(jList.getSelectedIndex());
             buttomPanel.setVisible(
          false);
            }

           }

          }
          );
          ..
          private void completeTask(String taskId){
           
          if(configuration == null){
            configuration 
          = new Configuration();
           }

           ProcessEngine processEngine 
          = configuration.buildProcessEngine();
           TaskService taskService 
          = processEngine.getTaskService();
           taskService.completeTask(taskId);
          }



          數(shù)據(jù)庫中登錄用戶:
          帳號:A  密碼:123
          帳號:B  密碼:123
          帳號:D  密碼:123

          用戶D登錄
          圖1


          圖2

          用戶A登錄
          圖3


          查看待辦任務(wù)
          圖4


          用戶B登錄
          圖5

          查看B的待辦任務(wù)
          圖6

          本人的開發(fā)環(huán)境
          eclipse3.5
          JBPM4.2
          mysql-essential-5.1.40-win32
          JDK1.6
          要運(yùn)行這個(gè)例子,需要修改jbpm.hibernate.cfg.xml,DataBase.java數(shù)據(jù)庫的連接信息

          測試代碼:jbpmTest
           


          評論

          # re: JBPM4.2小例子(swing實(shí)現(xiàn))  回復(fù)  更多評論   

          2009-12-10 10:51 by 99書城網(wǎng)
          是大方家點(diǎn)擊放大

          # re: JBPM4.2小例子(swing實(shí)現(xiàn))  回復(fù)  更多評論   

          2009-12-10 16:00 by 懂事
          你把代碼再多給你點(diǎn)啊,太難理清楚了
          謝謝
          可以的話加我的QQ378578601很希望你能指教一下

          # re: JBPM4.2小例子(swing實(shí)現(xiàn))  回復(fù)  更多評論   

          2009-12-10 16:02 by 懂事
          記得兄弟等你的佳音,很期待你的回復(fù)。記得加QQ378578601

          # re: JBPM4.2小例子(swing實(shí)現(xiàn))  回復(fù)  更多評論   

          2009-12-10 22:58 by pengo
          @懂事
          看不明白你的意思,代碼全在附件里,你可以下來看下.不過只有一個(gè)提交表單數(shù)據(jù)和查看待辦任務(wù)的功能.表單提交后,A是第一個(gè)任務(wù)處理人,A處理完,任務(wù)會交給B處理.

          # re: JBPM4.2小例子(swing實(shí)現(xiàn))  回復(fù)  更多評論   

          2009-12-11 11:53 by 懂事
          你的項(xiàng)目是不是在窗體加載的時(shí)候部署項(xiàng)目嗎?在你的附件Man.java中有個(gè)public void deploy()方法,但是看你注釋了,其它地方也沒調(diào)用。那你的流程是怎么部署的呢?兄弟我一直等你佳音,希望你馬上能看到。

          我想你加我QQ378578601,想向你學(xué)習(xí)JBPM

          # re: JBPM4.2小例子(swing實(shí)現(xiàn))  回復(fù)  更多評論   

          2009-12-11 13:01 by pengo
          @懂事
          這個(gè)只是我在學(xué)習(xí)jbpm4.2寫的小例子,不是用在項(xiàng)目里面的,jbpm4比jbpm3改了比較多內(nèi)容,我也是在學(xué)習(xí)。jbpm4.2發(fā)布了也沒多久,應(yīng)該未有公司正式用在項(xiàng)目上。
          另外有一個(gè)項(xiàng)目用jbpm3, BS做的,tomcat每次啟動時(shí),會先檢查相應(yīng)的表是否存在,如果不存在,則在數(shù)據(jù)庫中建立相應(yīng)的表。如果里面有流程包,也會在tomcat啟動時(shí)一起發(fā)布。
          少上QQ,還是不加了。

          # re: JBPM4.2小例子(swing實(shí)現(xiàn))  回復(fù)  更多評論   

          2009-12-11 13:14 by 懂事
          在你的附件Man.java中有個(gè)public void deploy()方法是用的嗎?如果有用你卻注釋了,沒用用你怎么部署項(xiàng)目呢?

          # re: JBPM4.2小例子(swing實(shí)現(xiàn))  回復(fù)  更多評論   

          2009-12-11 13:21 by 懂事
          老大你能給個(gè)方向嗎?在線等你回音。。。

          # re: JBPM4.2小例子(swing實(shí)現(xiàn))  回復(fù)  更多評論   

          2009-12-11 13:37 by pengo
          有用的,在第一次運(yùn)行時(shí)就調(diào)用它發(fā)布流程,只不過是我的例子里代碼沒寫得完整,我不想它每次運(yùn)行main時(shí)都把流程發(fā)布一次(發(fā)布要費(fèi)時(shí)間),所以發(fā)布完就把它注釋掉了。

          # re: JBPM4.2小例子(swing實(shí)現(xiàn))  回復(fù)  更多評論   

          2009-12-11 14:21 by 懂事
          那你是怎么調(diào)用的呢?我沒看出來啊.能說得具體點(diǎn)嗎?

          # re: JBPM4.2小例子(swing實(shí)現(xiàn))  回復(fù)  更多評論   

          2009-12-11 15:22 by pengo
          deploy()方法里面有發(fā)布流程的,發(fā)布流程只要
          Configuration configuration = new Configuration();
          ProcessEngine processEngine = configuration.buildProcessEngine();
          RepositoryService repositoryService = processEngine.getRepositoryService();
          String deploymentId = repositoryService.createDeployment().addResourceFromClasspath("jbpm/Order.jpdl.xml").deploy();
          這個(gè)是直接發(fā)布一個(gè)xml文件的方法。在configuration.buildProcessEngine()時(shí),它會讀取jbpm.hibernate.cfg.xml(hibernate的一個(gè)配置文件),它會根據(jù)<property name="hibernate.hbm2ddl.auto">update</property>這個(gè)屬性設(shè)置,自動生成JBPM的所有表,具體怎樣設(shè),你看下hibernate的手冊。
          repositoryService.createDeployment().addResourceFromClasspath("jbpm/Order.jpdl.xml").deploy()是發(fā)布流程類。
          不過在項(xiàng)目中一般不會只有一個(gè)xml文件,有jbpm的流程定義文件、流程圖片、自定義的配置xml等,可以打成一個(gè)rar、zip、jar等方式發(fā)布。對流程定義的xml還是調(diào)用repositoryService,其它文件要自己另外處理。

          # re: JBPM4.2小例子(swing實(shí)現(xiàn))  回復(fù)  更多評論   

          2009-12-11 16:22 by 愛 女優(yōu)
          學(xué)習(xí)了!!!

          # re: JBPM4.2小例子(swing實(shí)現(xiàn))  回復(fù)  更多評論   

          2009-12-12 13:33 by 99書城
          水力發(fā)電使開發(fā)獨(dú)守空房

          # re: JBPM4.2小例子(swing實(shí)現(xiàn))  回復(fù)  更多評論   

          2009-12-14 10:49 by 懂事
          老大你能不能弄個(gè)個(gè)B/S架構(gòu)的呢,原理到時(shí)懂了,可是配置上問題又出來了,報(bào)錯

          Exception in thread "main" org.jbpm.api.JbpmException:
          error: couldn't parse xml document : org.jbpm.api.JbpmException: resource jbpm.cfg.xml does not exist
          error: parsing exception: null : java.lang.NullPointerException
          at org.jbpm.pvm.internal.xml.ProblemList.getJbpmException(ProblemList.java:175)
          at org.jbpm.pvm.internal.xml.ProblemList.getJbpmException(ProblemList.java:141)
          at org.jbpm.pvm.internal.xml.Parse.checkErrors(Parse.java:190)

          配置又怎么弄呢?

          # re: JBPM4.2小例子(swing實(shí)現(xiàn))  回復(fù)  更多評論   

          2009-12-14 16:14 by pengo
          因?yàn)檎{(diào)用代碼
          Configuration configuration = new Configuration();
          ProcessEngine processEngine = configuration.buildProcessEngine();
          new Configuration()默認(rèn)情況下是要讀取src/jbpm.cfg.xml的配置文件,如果這個(gè)文件不在src下(如src/jbpm/jbpm.cfg.xml),需要使用configuration.setResource()指定配置文件。
          BS的要遲點(diǎn)才有空寫。

          # re: JBPM4.2小例子(swing實(shí)現(xiàn))  回復(fù)  更多評論   

          2009-12-15 15:56 by 懂事
          老大我根據(jù)用戶名怎么查詢不出來待處理的任務(wù)呢

          # re: JBPM4.2小例子(swing實(shí)現(xiàn))  回復(fù)  更多評論   

          2009-12-16 09:50 by 懂事
          哥哥終于查出來了哈,太謝謝你了。

          # re: JBPM4.2小例子(swing實(shí)現(xiàn))  回復(fù)  更多評論   

          2009-12-16 15:11 by 懂事
          老大想請問你一個(gè)問題了,現(xiàn)在我想再審核的時(shí)候加以個(gè)審核內(nèi)容,A添加的審核內(nèi)容B能看到,B也能再添加審核內(nèi)容。給個(gè)方向行嗎?頭都大了沒方向,擺脫了。謝謝,在線等你。。。

          # re: JBPM4.2小例子(swing實(shí)現(xiàn))  回復(fù)  更多評論   

          2009-12-16 21:40 by wozuiaideliufang
          哥哥我是樓上的那個(gè)人,就是這幾天問你問題的,你在嗎?我真的很希望你能指點(diǎn)一下,是渴望啊。

          # re: JBPM4.2小例子(swing實(shí)現(xiàn))  回復(fù)  更多評論   

          2009-12-17 15:43 by 懂事
          老大你能告訴我,JBPM的XML的節(jié)點(diǎn)怎么取值和賦值嗎?

          # re: JBPM4.2小例子(swing實(shí)現(xiàn))  回復(fù)  更多評論   

          2009-12-18 09:38 by pengo
          @懂事
          前幾天很忙,沒有上來看評論。

          1.現(xiàn)在我想再審核的時(shí)候加以個(gè)審核內(nèi)容,A添加的審核內(nèi)容B能看到,B也能再添加審核內(nèi)容。
          我知道的有兩個(gè)方法:新建個(gè)數(shù)據(jù)表記錄審核內(nèi)容,審核內(nèi)容表(表單ID,流程ID,任務(wù)ID,審核內(nèi)容......),你自己考慮下表的字段。另外我看了jbpm4.2的用戶手冊,里面有任務(wù)變量TaskService.getVariables()和TaskService.setVariables()這個(gè)也能實(shí)現(xiàn)你需求。

          2.老大你能告訴我,JBPM的XML的節(jié)點(diǎn)怎么取值和賦值嗎?
          不明白你的問題。

          # re: JBPM4.2小例子(swing實(shí)現(xiàn))  回復(fù)  更多評論   

          2009-12-18 16:56 by 懂事
          你說說我要學(xué) JBPM,你有哪些建議呢?這樣自己網(wǎng)上學(xué),不系統(tǒng)樣。很迷糊。

          # re: JBPM4.2小例子(swing實(shí)現(xiàn))  回復(fù)  更多評論   

          2009-12-18 17:06 by 懂事
          我想買本書看看,你能介紹一下嗎?

          # re: JBPM4.2小例子(swing實(shí)現(xiàn))  回復(fù)  更多評論   

          2009-12-19 10:39 by pengo
          @懂事
          我想買本書看看,你能介紹一下嗎?

          現(xiàn)在很少JBPM的書,我知道的只有一本《深入淺出jBPM》,不過我也沒看過,好像是介紹JBPM3的內(nèi)容。我現(xiàn)在學(xué)習(xí)JBPM4.2,主要是看它的用戶手冊(jbpm-4.2/doc/userguide,網(wǎng)上有它的中文翻譯版) 和jbpm-4.2/doc下的開發(fā)文檔、API文檔、jpdl的Schema文檔。

          # re: JBPM4.2小例子(swing實(shí)現(xiàn))  回復(fù)  更多評論   

          2009-12-20 21:31 by 懂事
          好的我看看,謝謝哈

          # re: JBPM4.2小例子(swing實(shí)現(xiàn))  回復(fù)  更多評論   

          2009-12-21 09:58 by 懂事
          想問你個(gè)問題,是急救,就是我的參數(shù)表第一次提交時(shí)3個(gè)字段,第二審核多了個(gè)經(jīng)理審核意見。要在同一個(gè)流程里在變量表里多添加一個(gè)審核意見的字段怎么辦呢?

          # re: JBPM4.2小例子(swing實(shí)現(xiàn))  回復(fù)  更多評論   

          2009-12-21 13:10 by pengo
          @懂事
          看不明白你說的“在同一個(gè)流程里在變量表里多添加一個(gè)審核意見的字段”。我不知你是怎樣保存審核意見。
          你看下TaskService和ExecutionService的setVariables()方法有沒用不。

          # re: JBPM4.2小例子(swing實(shí)現(xiàn))  回復(fù)  更多評論   

          2009-12-21 14:28 by 懂事
          你方便嗎?能給我個(gè)電話嗎?發(fā)郵箱378578601@qq.com
          真的很想和你交流下

          # re: JBPM4.2小例子(swing實(shí)現(xiàn))  回復(fù)  更多評論   

          2009-12-21 14:29 by 懂事
          很期望能請教你幾個(gè)問題。一兩句也說不清楚。

          # re: JBPM4.2小例子(swing實(shí)現(xiàn))  回復(fù)  更多評論   

          2009-12-22 09:06 by pengo
          呵呵,有問題的話,可以直接在留言簿給我留言。如果是懂的問題,我都會回答你的。

          # re: JBPM4.2小例子(swing實(shí)現(xiàn))  回復(fù)  更多評論   

          2009-12-25 17:16 by 懂事
          想請教你一個(gè)問題,怎么在網(wǎng)頁中顯示JBPM圖片呢?如果我不想壓縮ZIP包可以實(shí)現(xiàn)在網(wǎng)頁中顯示JBPM圖片嗎?

          # re: JBPM4.2小例子(swing實(shí)現(xiàn))  回復(fù)  更多評論   

          2009-12-29 10:33 by 懂事
          老大你怎么不回答我的問題了呢?

          # re: JBPM4.2小例子(swing實(shí)現(xiàn))  回復(fù)  更多評論   

          2009-12-31 10:36 by pengo
          怎么在網(wǎng)頁中顯示JBPM圖片呢?如果我不想壓縮ZIP包可以實(shí)現(xiàn)在網(wǎng)頁中顯示JBPM圖片嗎?

          顯示圖片可以直接用<img src=""/>這個(gè)html控件。一般在流程運(yùn)行過程中顯示流程圖,節(jié)點(diǎn)上有會加個(gè)紅色小框,紅色框可以直接用div模擬。

          # re: JBPM4.2小例子(swing實(shí)現(xiàn))  回復(fù)  更多評論   

          2010-01-07 09:36 by 懂事
          老哥你會JAVA中的 COMPASSS搜索引擎框架嗎?

          # re: JBPM4.2小例子(swing實(shí)現(xiàn))  回復(fù)  更多評論   

          2010-01-07 09:56 by pengo
          呵呵,不懂,目前java方面只做過工作流方面的相關(guān)內(nèi)容。

          # re: JBPM4.2小例子(swing實(shí)現(xiàn))  回復(fù)  更多評論   

          2010-12-13 12:43 by pandora jewelry
          在gpd目錄下有一個(gè)gpd/jbpm-gpd-site.zip文件, 這就是更新站點(diǎn)(archived update site)的 壓縮包 hehe
          主站蜘蛛池模板: 济南市| 库车县| 苏尼特左旗| 许昌市| 凤台县| 仪陇县| 和政县| 鄂托克旗| 杨浦区| 阜阳市| 呼和浩特市| 临颍县| 定兴县| 观塘区| 雷波县| 婺源县| 右玉县| 资兴市| 肇州县| 西盟| 资溪县| 秀山| 拜泉县| 共和县| 彰化市| 永春县| 拉萨市| 呼伦贝尔市| 高雄市| 漯河市| 宣恩县| 大渡口区| 苍溪县| 永福县| 潜江市| 旌德县| 上蔡县| 淳安县| 涿鹿县| 县级市| 惠来县|