<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

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

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

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

    本次用的是一個特別流程,假設C提交一個表單,這個表單需要給A和B閱讀,而A和B閱讀過后,流程結束.
    流程定義文件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>


    流程圖

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

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


    提交表單時的操作,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ù)據(jù)和流程實例ID一起保存在數(shù)據(jù)庫表p_form.


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

    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;
     }



    用戶處理任務,根據(jù)列表中選中記錄中的流程實例任務ID,調(diào)用taskService.completeTask(taskId)完成任務,
    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


    查看待辦任務
    圖4


    用戶B登錄
    圖5

    查看B的待辦任務
    圖6

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

    測試代碼:jbpmTest
     


    評論

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

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

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

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

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

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

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

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

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

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

    我想你加我QQ378578601,想向你學習JBPM

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

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

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

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

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

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

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

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

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

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

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

    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();
    這個是直接發(fā)布一個xml文件的方法。在configuration.buildProcessEngine()時,它會讀取jbpm.hibernate.cfg.xml(hibernate的一個配置文件),它會根據(jù)<property name="hibernate.hbm2ddl.auto">update</property>這個屬性設置,自動生成JBPM的所有表,具體怎樣設,你看下hibernate的手冊。
    repositoryService.createDeployment().addResourceFromClasspath("jbpm/Order.jpdl.xml").deploy()是發(fā)布流程類。
    不過在項目中一般不會只有一個xml文件,有jbpm的流程定義文件、流程圖片、自定義的配置xml等,可以打成一個rar、zip、jar等方式發(fā)布。對流程定義的xml還是調(diào)用repositoryService,其它文件要自己另外處理。

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

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

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

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

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

    2009-12-14 10:49 by 懂事
    老大你能不能弄個個B/S架構的呢,原理到時懂了,可是配置上問題又出來了,報錯

    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實現(xiàn))  回復  更多評論   

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    2010-12-13 12:43 by pandora jewelry
    在gpd目錄下有一個gpd/jbpm-gpd-site.zip文件, 這就是更新站點(archived update site)的 壓縮包 hehe
    主站蜘蛛池模板: 亚洲欧洲日产v特级毛片| 亚洲人成网7777777国产| 亚洲不卡中文字幕| 1000部啪啪未满十八勿入免费| 久久精品国产亚洲网站| a毛片免费播放全部完整| 青草青草视频2免费观看| 久久精品免费一区二区喷潮| 亚洲人成在线中文字幕| 无码国产精品一区二区免费| 亚洲精品美女在线观看| 欧洲乱码伦视频免费国产| 免费人妻无码不卡中文字幕18禁| 亚洲AV无码国产丝袜在线观看 | 永久免费毛片手机版在线看| 亚洲色一区二区三区四区| 大陆一级毛片免费视频观看| 亚洲av色香蕉一区二区三区| 久久成人免费播放网站| 亚洲av无码成人精品区| 亚洲乱码一二三四区麻豆| 成年人网站在线免费观看| 亚洲视频免费在线看| 中文成人久久久久影院免费观看| 亚洲无线码在线一区观看| 美丽姑娘免费观看在线观看中文版| 666精品国产精品亚洲| 夜夜嘿视频免费看| 国产福利免费视频 | 一级毛片免费播放男男| 日韩免费a级毛片无码a∨| 男女猛烈xx00免费视频试看| 在线v片免费观看视频| 91嫩草私人成人亚洲影院| 国产精品美女午夜爽爽爽免费| 久久人午夜亚洲精品无码区| 亚洲日韩精品无码专区网址| 97在线视频免费播放| 亚洲嫩草影院久久精品| 3344在线看片免费| 亚洲五月丁香综合视频|