多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php框架 > 框架設計 > 【整合篇】JBPM4.4業務與流程的整合

【整合篇】JBPM4.4業務與流程的整合

來源:程序員人生   發布時間:2015-02-04 09:11:36 閱讀次數:3281次


在這次學習工作流的進程中,工作流如何與業務結合有多種方式,雖然很簡單,但是每次都要再次梳理幾分鐘,這次拿出來整理1下,將它真正成為自己的知識。

 

從啟動流程開始說:

 

申請頁面:選擇所用流程(即畫的流程圖的id

<table cellpadding="0" cellspacing="0" class="mainForm"> <tr> <td width="120px"> <div> 所用流程:<s:select name="processDefinitionKey" cssClass="SelectStyle" list="processDefinitionList" listKey="key" listValue="key"/> </div> </td> </tr> <tr> <td>申請名稱:</td> <td><input type="text" name="title" cssClass="InputStyle" /></td> </tr> <tr> <td>申請理由:</td> <td><input type="text" name="reason" cssClass="InputStyle" /></td> </tr> </table>

提交申請:獲得前臺傳來的值

/** 提交申請 */ public String submit() throws Exception { // 封裝申請信息 Application application = new Application(); title=new String(title.getBytes("iso⑻859⑴"),"utf⑻"); reason=new String(reason.getBytes("iso⑻859⑴"),"utf⑻"); application.setApplicant(getCurrentUser()); // 申請人,當前用戶 application.setTitle(title); application.setReason(reason); String processDefinitionKeyStr=new String(processDefinitionKey.getBytes("iso⑻859⑴"),"utf⑻"); application.setProcessDefinitionKey(processDefinitionKeyStr); // 調用業務方法(保存申請信息,并啟動流程開始流轉) applicationService.submit(application); return "toMyApplicationList"; // 成功后轉到"我的申請查詢" } public void submit(Application application) { // 1,設置屬性并保存application application.setApplyTime(sdf.format(new Date())); // 申請時間,當前時間 application.setStatus(Application.STATUS_RUNNING); // 2,啟動程程實例開始流轉 // >> 準備流程變量 Map<String, Object> variablesMap = new HashMap<String, Object>(); variablesMap.put("application", application); // >> 啟動流程實例,并帶上流程變量(當前的申請信息) //獲得流程定義的key String pdKey = application.getProcessDefinitionKey(); //根據流程定義的key值和相應的流程變量啟動流程 ProcessInstance pi = processEngine.getExecutionService()// .startProcessInstanceByKey(pdKey, variablesMap); application.setExecuteId(pi.getId()); getSession().save(application); // 保存 // >> 辦理完第1個任務“提交申請” Task task = processEngine.getTaskService()// .createTaskQuery()// 查詢出本流程實例中當前唯一的1個任務“提交申請” .processInstanceId(pi.getId())// .uniqueResult(); processEngine.getTaskService().completeTask(task.getId()); }

當點擊提交申請時application,我們來看看工作流的各個表的變化:

           


jbpm4_execution:




jbpm4_task:





jbpm4_variable:




那末通過查看上面表的變化,我們不難發現履行的流程是通過甚么和業務綁定的,即jbpm4_execution和jbpm4_variable的關系。


從流程的啟動開始,就與業務綁定關系,那末接下來如何利用呢?

 

下面只是簡單介紹,對1些結合業務的查詢問題會單獨再說明:

 

查看待辦任務:1般是根據用戶名來查看(當前登陸用戶)

/** 待我審批(我的任務列表) */ public String myTaskList() throws Exception { List<TaskView> taskViewList = applicationService.getMyTaskViewList(getCurrentUser()); //List<TaskView> taskViewList = applicationService.getMyTaskViewList(user); ActionContext.getContext().put("taskViewList", taskViewList); return "myTaskList"; }

審批處理:

    本環節由于單獨出來有1個審批意見表,故會將所有的審批意見添加的審批意見表中,故這個環節的內容是保存數據然后辦理任務并判斷流程是不是結束。固然我們也能夠不單獨設計審批意見表,而是將所有的審批意見存儲到流程變量中。

    辦理任務需要獲得任務id,也就是在查看任務列表中獲得taskViewList。

 

審批處理頁面,審批處理:

/** 審批處理頁面 */ public String approveUI() throws Exception { Set<String> outcomes = applicationService.getOutcomesByTaskId(taskId); ActionContext.getContext().put("outcomes", outcomes); return "approveUI"; } /** 審批處理 */ public String approve() throws Exception { // 封裝 ApproveInfo approveInfo = new ApproveInfo(); comment=new String(comment.getBytes("iso⑻859⑴"),"utf⑻"); approveInfo.setComment(comment); approveInfo.setApproval(approval); approveInfo.setApplication(applicationService.getById(applicationId)); approveInfo.setApprover(getCurrentUser()); // 審批人,當前登錄用戶 approveInfo.setApproveTime(sdf.format(new Date())); // 當前時間 if(outcome!=null){ // 調用用業務方法(保存本次審批信息,并辦理完任務,并保護申請的狀態) outcome=new String(outcome.getBytes("iso⑻859⑴"),"utf⑻"); } applicationService.approve(approveInfo, taskId, outcome); return "toMyTaskList"; // 成功后轉到待我審批頁面 } //辦理任務 public void approve(ApproveInfo approveInfo, String taskId, String outcome) { // 1,保存本次審批信息 getSession().save(approveInfo); // 2,辦理完任務 Task task = processEngine.getTaskService().getTask(taskId); // 1定要先取出Task對象,再完成任務,否則拿不到,由于履行完就變成歷史信息了。 if (outcome == null) { processEngine.getTaskService().completeTask(taskId); } else { processEngine.getTaskService().completeTask(taskId, outcome); } // >> 取出所屬的流程實例,如果取出的為null,說明流程實例履行完成了,已變成了歷史記錄 ProcessInstance pi = processEngine.getExecutionService().findProcessInstanceById(task.getExecutionId()); // 3,保護申請的狀態 Application application = approveInfo.getApplication(); if (!approveInfo.isApproval()) { // 如果本環節不同意,則流程實例直接結束,申請的狀態為:未通過 if (pi != null) { // 如果流程還未結束 processEngine.getExecutionService().endProcessInstance(task.getExecutionId(), ProcessInstance.STATE_ENDED); } application.setStatus(Application.STATUS_REJECTED); } else { // 如果本環節同意,而且本環節是最后1個環節,則流程實例正常結束,申請的狀態為:已通過 if (pi == null) { // 本環節是最后1個環節,即流程已結束了 application.setStatus(Application.STATUS_APPROVED); } } getSession().update(application); }

查看流轉記錄:即類似淘寶查看物流信息類似,完全使用業務信息

/** 查看流轉記錄 applicationId*/ public String approveHistory() throws Exception { Application application = applicationService.getById(applicationId); System.out.println(application.getTitle()); ActionContext.getContext().put("approveInfos", application.getApproveInfos()); return "approveHistory"; }

查看我的申請:完全查看自己的業務信息表便可

/** 我的申請查詢 */ public String myApplicationList() throws Exception { String strHQL="from Application where applicant="+getCurrentUser().getUserId() ; // 準備數據 List<Application> applicationList = applicationService.findByHql(strHQL); ActionContext.getContext().put("applicationList", applicationList); return "myApplicationList"; }

/** * 查看流程圖,高亮當前正在履行的節點 */ public String showProcessImageUI() throws Exception { /*boolean isEnded = "true".equals(request.getParameter("isEnded")); // 是不是已履行完 String processInstanceId = getParameter(request, "processInstanceId");*/ //未斟酌是不是完成情況 //boolean isEnded=false; //啟動的實例id //String processInstanceId="ApplyDepartment.8"; // 1,獲得當前正在履行的活動名稱 String deploymentId = null; String processDefinitionId = null; Set<String> activityNames = null; status=new String(status.getBytes("iso⑻859⑴"),"utf⑻"); if (!status.equals("審批中")) { // 已履行完的,就查詢歷史 HistoryProcessInstance hpi = processEngine.getHistoryService()// .createHistoryProcessInstanceQuery()// .processInstanceId(processInstanceId)// .uniqueResult(); processDefinitionId = hpi.getProcessDefinitionId(); activityNames = new HashSet<String>(); activityNames.add(hpi.getEndActivityName()); // 結束的活動名稱 } else { // 正在履行的,就使用ExecutionService查詢 ProcessInstance pi = processEngine.getExecutionService()// .createProcessInstanceQuery()// .processInstanceId(processInstanceId)// .uniqueResult(); processDefinitionId = pi.getProcessDefinitionId(); activityNames = new HashSet<String>(pi.findActiveActivityNames()); // 當前正在履行的活動的名稱 } ActionContext.getContext().put("processDefinitionId", processDefinitionId); // 2,找出他們的坐標 Set<ActivityCoordinates> coordList = new HashSet<ActivityCoordinates>(); for (String activityName : activityNames) { ActivityCoordinates coord = processEngine.getRepositoryService().getActivityCoordinates( processDefinitionId, activityName); coordList.add(coord); } ActionContext.getContext().put("coordList", coordList); // 3,獲得 deploymentId deploymentId = processEngine.getRepositoryService().createProcessDefinitionQuery()// .processDefinitionId(processDefinitionId)// .uniqueResult()// .getDeploymentId(); ActionContext.getContext().put("deploymentId", deploymentId); return "showProcessImageUI"; }

總結:

   其實寫這篇博客的目的是結合工作流的數據庫來分析業務與流程是如何綁定的,那末對流程中需要的1些經常使用方法的使用在這里也簡單的介紹了1番,這樣做的目的也是為后面的Activiti中的利用實例的經常使用方法介紹做個對照,其實不管是JBPM4.4還是它的升級版Activiti本質上都是1樣的。




生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 男女视频免费看 | 波多野结衣xxxx性精品 | 97精品伊人久久久大香线蕉 | 视频网站免费观看 | 国产精品18久久久久网站 | 亚洲精品乱码久久久久久蜜桃 | 亚洲天堂中文 | 欧美午夜三级 | 色久综合大榴莲 | 久久精品国产2020 | 国产精品一区二区三 | 亚洲精品午夜久久aaa级久久久 | 欧美成人h版整片合集 | 性欧美video| chinese农村videoxxxx实拍 | 欧美人与物3dvideos | 国产成人a一在线观看 | 亚洲好视频| 自拍偷拍欧美亚洲 | hd欧美xxx欧美极品hd | 日本一区二区精品88 | 多人伦交性欧美精品欧 | 手机在线精品视频每日更新 | 日本欧美午夜 | 一级在线免费视频 | 国产在线视频一区二区三区 | 国产日韩欧美亚洲 | 欧美人与动性视频在线观 | 亚洲国产欧美在线人网站 | 亚洲精品一区二区三区中文字幕 | 欧美一级永久免费毛片在线 | 麻豆福利在线观看 | 欧美性受xxxx喷水性欧洲 | 国产亚洲综合激情校园小说 | 欧美精品免费一区欧美久久优播 | 国产中文字幕在线观看 | 337p日本欧洲亚洲大胆色噜噜 | 淫片在线观看 | 国产午夜精品久久理论片小说 | 精品国产看高清国产毛片 | 久久久久久久亚洲精品一区 |