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.多练习多思考,理解最重要。