日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

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

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

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


在這次學習工作流的進程中,工作流如何與業務結合有多種方式,雖然很簡單,但是每次都要再次梳理幾分鐘,這次拿出來整理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樣的。




生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 日韩精品久久久久久 | 国产二区在线播放 | 色婷婷色综合 | 在线视频亚洲 | 日韩少妇精品av一区二区 | 国产成人av一区二区三区 | 黄色精品一区 | 国产二区免费视频 | 国产精品久久久久久久久潘金莲 | 日本免费大全免费网站视频 | 免费a在线观看 | 久久久久国产精品午夜一区 | 成人一区二区三区 | 久久精品久久久 | 交视频在线观看国产 | 久www| 蜜桃91| 在线播放日韩 | av影视大全 | 亚洲午夜久久久久 | 精品久久久久久久久久 | 国产一级免费视频 | 欧美日韩一区二区在线观看 | 亚洲性无码av在线 | 99久久99视频 | 日本久久综合 | 精品国产乱码久久久久久88av | 成人国产一区 | 欧美人交a欧美精品 | 麻豆一区二区在线观看 | 中文有码在线视频 | www.999热| 久久久精品美女 | 九九九久久国产免费 | 国产精品视频免费观看 | 国产精品a久久久久 | 国产精品免费电影 | 加勒比在线免费视频 | 国产一区二区三区在线 | 亚洲在线观看视频 | 久久精品一区二区三区不卡牛牛 |