1.流程定義
流程定義描述的是系統中有哪些種類的流程、每種流程包括哪幾個步驟(即環節),每個步驟有哪些後續步驟。
流程定義的內容存儲在數據庫表中,需要使用數據庫sql腳本完成流程定義的工作。數據庫表爲WF_ACTION_DEF(聯合主鍵爲流程定義(process_def_id)+ 環節定義(action_def_id))
2.流程權限菜單
3.流程環節配置 表:WF_ACTION_DEF
4.流程環節表 表:WF_WORK_ITEM
5.ER圖
6.開啓流程 在流程的開始頁面中調用Service開啓流程,返回業務流水號
public String startWf(IDTO dto) throws AppException{
//組裝參數
// Map<String,Object> paramsMap = dto.getData();
StartWfParams startWfParams = new StartWfParams();
startWfParams.setWfDefName("單位新登記"); //流程名稱
startWfParams.setKeyData("新增單位登記記錄"); //業務關鍵信息
startWfParams.setOperId(dto.getUserInfo().getOperID()); //操作員ID
startWfParams.setBae006(dto.getUserInfo().getBAE001()); //經辦機構
startWfParams.setDoCusService(true); //是否執行業務service
//開啓流程,並返回流水號
String ywlsh = cn.sinobest.framework.util.WfUtil.startWf(startWfParams);
System.out.println("這是新建的業務流水號:"+ywlsh);
return ywlsh;
}
7.生成環節 開啓流程時框架會生成相應的環節,環節有對應的業務流水號,狀態等信息
8.控制流程提交
/* 新增單位信息提交後進入到審覈環節;
* 審覈環節審覈通過則開始"結束審覈環節";
* 審覈環節審覈不通過則回退到"單位信息在環節";
* @param dto
* @return 成功或失敗
* @throws Exception
*/
public void commitWf(IDTO dto) throws Exception{
Map<String,Object> paramsMap = dto.getData();
//得到前臺傳入的當前環節標誌
String action_id = paramsMap.get("action_id").toString();
System.out.println("action_id:"+action_id);
IWorkflowCascade wfService = (IWorkflowCascade)Util.getBean("workflowCascadeService");
SubmitWfParams wfParams = new SubmitWfParams();
//業務流水號(WF_WORK_ITEM.BAE007)
wfParams.setPid(paramsMap.get("ywlsh").toString());
Map<String,Object> p = new HashMap<String, Object>();
p.put("bae007", paramsMap.get("ywlsh").toString());
p.put("action_id",action_id);
Map<String,Object> params=commDAO.selectOne(DWGL + "ACTION_Q", p);
String work_id=params.get("WORK_ITEM_ID").toString();
//提交審覈環節或回退到登記環節
if(action_id.equals("dwxdj_sh")){
//得到當前審覈結果
String shjgStr = paramsMap.get("shjg").toString();
if(shjgStr.equals("1")){
wfParams.setSubmitType(SubmitType.NEXT); //標識爲提交下一環節,流程繼續執行
}else{
wfParams.setSubmitType(SubmitType.BACK); //標識爲回退上一環節,流程回退到上一環節
}
//提交當前的登記環節,進入審覈環節
wfParams.setWid(work_id); //環節號(WF_WORK_ITEM.WORK_ITEM_ID)
wfParams.setAccepter("998"); //接收人
wfParams.setJbr("998"); //經辦人
wfParams.setKeyData("提交單位信息審覈"); //關鍵信息
wfParams.setBae006(dto.getUserInfo().getBAE001()); //經辦機構
wfParams.setComment("提交單位信息進入審覈環節"); //流程備註
dto.setValue(IWorkflow.SUBMIT_PARAMS, wfParams);
wfService.submitWf(dto);
return ;
}
}
執行一個流程時,當環節運行到結束環節,該流程的狀態會被置爲“結束”,表明整個流程已經結束。
9.小結:
9.1.編碼之前弄清楚整個業務邏輯的流程到底是怎樣的,這樣編碼的時候會事半功倍。
9.2.其實流程也不是很複雜,不要在心理上就抗拒它。
9.3.多練習多思考,理解最重要。