<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 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

    JBPM4.2小例子(swing實現)

    Posted on 2009-12-09 00:51 penngo 閱讀(5214) 評論(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_  用戶登錄密碼

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


    提交表單時的操作,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"保存表單數據成功:");
      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"請先發布流程.");
     }

     
    else{
         
    return processInstance.getId();
     }

     
    return "";
    }



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


    在用戶處理任務時,先根據用戶的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;
     }



    用戶處理任務,根據列表中選中記錄中的流程實例任務ID,調用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"審核已經通過!");
       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);
    }



    數據庫中登錄用戶:
    帳號:A  密碼:123
    帳號:B  密碼:123
    帳號:D  密碼:123

    用戶D登錄
    圖1


    圖2

    用戶A登錄
    圖3


    查看待辦任務
    圖4


    用戶B登錄
    圖5

    查看B的待辦任務
    圖6

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

    測試代碼:jbpmTest
     


    評論

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

    2009-12-10 10:51 by 99書城網
    是大方家點擊放大

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    2009-12-11 16:22 by 愛 女優
    學習了!!!

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

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

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

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

    2009-12-14 16:14 by pengo
    因為調用代碼
    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實現)  回復  更多評論   

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    2010-12-13 12:43 by pandora jewelry
    在gpd目錄下有一個gpd/jbpm-gpd-site.zip文件, 這就是更新站點(archived update site)的 壓縮包 hehe
    主站蜘蛛池模板: 黄色免费网址大全| 亚洲国产午夜中文字幕精品黄网站| 国产av无码专区亚洲av毛片搜| 亚洲av日韩av激情亚洲| 四虎免费永久在线播放| 美女网站免费福利视频| 免费观看91视频| 欧洲乱码伦视频免费国产| 亚洲中文字幕乱码一区| 亚洲色偷偷av男人的天堂| 亚洲免费观看视频| 亚洲а∨天堂久久精品| 日韩a级毛片免费观看| 国产成在线观看免费视频| 久9这里精品免费视频| 亚洲精品黄色视频在线观看免费资源| 亚洲av片在线观看| 日本亚洲免费无线码| 亚洲伊人精品综合在合线| 久久亚洲国产精品成人AV秋霞| 亚洲国产精品成人精品无码区| 亚洲天堂免费在线视频| yy6080久久亚洲精品| 日本免费一区尤物| 国外成人免费高清激情视频| 97热久久免费频精品99| 1000部拍拍拍18勿入免费视频下载| 国产日韩AV免费无码一区二区 | 黄色网址免费在线观看| 污污免费在线观看| 老司机福利在线免费观看| 狠狠综合亚洲综合亚洲色| 久久亚洲色WWW成人欧美| 亚洲成在人线在线播放无码| 亚洲国产成人AV在线播放| 亚洲精品久久无码| 国产成人亚洲综合a∨| 美女裸体无遮挡免费视频网站| 亚洲精品无码专区在线播放| 亚洲人成电影网站色www| 亚洲AV日韩AV无码污污网站|