BOS項目筆記 第11天
今天內容安排:
1、流程實例管理(查詢、查看運行狀態)
2、將bos系統中的用戶和角色同步到activiti的用戶和組表
3、設計物流配送流程
4、啟動物流配送流程
5、組任務操作(查詢、拾取)
6、個人任務操作(查詢、辦理)
1. 流程實例管理
1.1 查詢流程實例列表
第一步:創建一個流程實例管理Action,提供list方法,查詢流程實例列表數據
第二步:配置struts.xml
第三步:提供processinstance.jsp頁面,展示列表數據
<s:iterator value="list"> <tr> <td>${id }</td> <td>${processDefinitionId }</td> <td>${activityId }</td> <td> <div id="div${id }"></div> <script type="text/javascript"> //根據流程實例id查詢流程變量 $.post("${pageContext.request.contextPath}/processInstanceAction_findData.action",{"id":'${id}'},function(data){ $("#div${id}").html(data); }); </script> <script type="text/javascript"> function showPng(id){ window.showModalDialog("${pageContext.request.contextPath}/processInstanceAction_showPng.action?id="+id); } </script> </td> <td> <a onclick="showPng('${id}');" href="#">查看流程圖</a> </td> </tr> </s:iterator> |
第四步:在Action中提供findData的方法,根據流程實例id查詢對應的流程變量數據
1.2 查詢流程實例運行狀態
第一步:為“查看流程圖”按鈕綁定事件
<script type="text/javascript"> function showPng(id){ //彈出模式對話框 window.showModalDialog("${pageContext.request.contextPath}/processInstanceAction_showPng.action?id="+id); } </script> <a class="easyui-linkbutton" data-options="iconCls:'icon-search'" onclick="showPng('${id}');" href="#">查看流程圖</a> |
第二步:在Action中提供showPng方法,根據流程實例id查詢坐標、部署id、圖片名稱
/** * 根據流程實例id查詢坐標、部署id、圖片名稱 */ public String showPng(){ //1、根據流程實例id查詢流程實例對象 ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId(id).singleResult(); //2、根據流程實例對象查詢流程定義id String processDefinitionId = processInstance.getProcessDefinitionId(); //3、根據流程定義id查詢流程定義對象 ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().processDefinitionId(processDefinitionId).singleResult(); //4、根據流程定義對象查詢部署id deploymentId = processDefinition.getDeploymentId(); imageName = processDefinition.getDiagramResourceName();
//查詢坐標 //1、獲得當前流程實例執行到哪個節點 String activityId = processInstance.getActivityId();//usertask1 //2、加載bpmn(xml)文件,獲得一個流程定義對象 ProcessDefinitionEntity pd = (ProcessDefinitionEntity) repositoryService.getProcessDefinition(processDefinitionId);//查詢act_ge_bytearray //3、根據activitiId獲取含有坐標信息的對象 ActivityImpl findActivity = pd.findActivity(activityId); int x = findActivity.getX(); int y = findActivity.getY(); int width = findActivity.getWidth(); int height = findActivity.getHeight();
ActionContext.getContext().getValueStack().set("x", x); ActionContext.getContext().getValueStack().set("y", y); ActionContext.getContext().getValueStack().set("width", width); ActionContext.getContext().getValueStack().set("height", height);
return "showPng"; } |
第三步:配置struts.xml,跳轉到image.jsp頁面
第四步:提供image.jsp頁面
<!-- 1.獲取到規則流程圖 --> <img style="position: absolute;top: 0px;left: 0px;" src="processInstanceAction_viewImage?deploymentId=${deploymentId }&imageName=${imageName}">
<!-- 2.根據當前活動的坐標,動態繪制DIV --> <div style="position: absolute;border:1px solid red;top:${y-1}px;left:${x-1}px;width:${width}px;height:${height}px;"> </div> |
第五步:在Action中提供viewImage方法,根據部署id和圖片名稱獲得對應的輸入流
第六步:配置struts.xml
2. 將bos系統中用戶和角色同步到activiti
2.1 將角色同步到act_id_group表
修改RoleServiceImpl中的save方法
2.2 將用戶同步到act_id_user表
修改UserServiceImpl的save方法
3. 設計物流配送流程
l 流程定義的id:
l 使用排他網關:
l 使用組任務:
l 任務的id(對應Action中的方法名):
4. 啟動物流配送流程
l 修改工作單類
l 修改工作單hbm映射文件
4.1 查詢工作單列表數據
第一步:在工作單管理Action中提供list方法,查詢start為0的工作單
Service代碼:
第二步:配置struts.xml
第三步:提供startransfer.sjp頁面,展示工作單列表數據
4.2 根據key啟動流程實例
第一步:修改列表頁面中啟動按鈕綁定事件
第二步:在工作單Action中提供start方法,啟動物流配送流程對應的流程實例
第三步:在工作單Service中提供start方法
5. 組任務操作
5.1 查詢組任務
第一步:創建一個TaskAction,提供查詢組任務的方法findGroupTask
第二步:配置struts.xml
第三步:提供grouptask.jsp頁面,展示任務列表數據
<table class="easyui-datagrid" fit="true" nowrap="false"> <thead> <tr> <th data-options="field:'id',width:120">任務編號</th> <th data-options="field:'name',width:120">任務名稱</th> <th data-options="field:'data',width:520">業務數據</th> <th data-options="field:'pick',width:120">拾取任務</th> </tr> </thead> <script type="text/javascript"> function showData(taskId){ //查詢流程變量數據 $.post("${pageContext.request.contextPath}/taskAction_showData.action",{"taskId":taskId},function(data){ $("#div"+taskId).html(data); }); }
function toggleData(taskId){ $("#div"+taskId).toggle(); } </script> <tbody>
<s:iterator value="list" var="task"> <tr> <td><s:property value="id"/> </td> <td><s:property value="name"/></td> <td> <a onclick="toggleData('${id}')" class="easyui-linkbutton">查看業務數據</a> <div style="display: none" id="div${id }"> <script type="text/javascript"> showData('${id}'); </script> </div> </td> <td> <s:a action="taskAction_takeTask" namespace="/" cssClass="easyui-linkbutton">拾取 <s:param name="taskId" value="id"></s:param> </s:a> </td> </tr> </s:iterator> </tbody> </table> |
5.2 拾取組任務
第一步:修改jsp頁面中拾取按鈕事件
第二步:在TaskAction中提供拾取任務的方法
第三步:配置struts.xml
6. 個人任務操作
6.1 查詢個人任務
第一步:在TaskAction中提供findPersonalTask,查詢當前登錄人的個人任務
第二步:配置struts.xml
第三步:提供personaltask.jsp頁面,展示個人任務列表數據
<table class="easyui-datagrid" fit="true" nowrap="false"> <thead> <tr> <th data-options="field:'id',width:120">任務編號</th> <th data-options="field:'name',width:120">任務名稱</th> <th data-options="field:'data',width:520">業務數據</th> <th data-options="field:'pick',width:120">辦理任務</th> </tr> </thead> <script type="text/javascript"> function showData(taskId){ $.post("${pageContext.request.contextPath}/taskAction_showData.action",{"taskId":taskId},function(data){ $("#div"+taskId).html(data); }); }
function toggleData(taskId){ $("#div"+taskId).toggle(); } </script> <tbody> <s:iterator value="list" var="task"> <tr> <td><s:property value="id"/> </td> <td><s:property value="name"/></td> <td> <a onclick="toggleData('${id}')" class="easyui-linkbutton">查看業務數據</a> <div style="display: none" id="div${id }"> <script type="text/javascript"> showData('${id}'); </script> </div> </td> <td> <s:a action="taskAction_%{taskDefinitionKey}" namespace="/" cssClass="easyui-linkbutton"> 辦理任務 <s:param name="taskId" value="id"></s:param> </s:a> </td> </tr> </s:iterator> </tbody> </table> |
6.2 辦理個人任務
6.2.1 辦理審核工作單任務
第一步:修改personaltask.jsp頁面中辦理任務按鈕的事件
第二步:在TaskAction中提供checkWorkOrderManage方法,處理審核工作單任務
/** * 辦理審核工作單任務 */ public String checkWorkOrderManage() { // 根據任務id查詢任務對象 Task task = taskService.createTaskQuery().taskId(taskId).singleResult(); // 根據任務對象查詢流程實例id String processInstanceId = task.getProcessInstanceId(); // 根據流程實例id查詢流程實例對象 ProcessInstance processInstance = runtimeService .createProcessInstanceQuery() .processInstanceId(processInstanceId).singleResult(); String workordermanageId = processInstance.getBusinessKey(); Workordermanage workordermanage = workordermanageService.findById(workordermanageId); if(check == null){ //跳轉到審核頁面 // 跳轉到一個審核工作單頁面,展示當前對應的工作單信息 ActionContext.getContext().getValueStack().set("map", workordermanage); return "check"; }else{ workordermanageService.checkWorkordermanage(taskId,check,workordermanageId); return "topersonaltasklist"; } } |
第三步:如果是跳轉頁面,配置struts.xml
第四步:提供check.jsp頁面,展示審核工作單表單頁面
第五步:在工作單Service中提供方法,處理審核工作單任務
6.2.2 辦理其他任務