继上篇博客:【整合篇】JBPM4.4业务与流程的整合
对于无论是Activtit还是jbpm来说,业务与流程的整合均类似,启动流程是绑定业务,流程与业务的整合放到动态代理中
/**
* 启动修改课程流程Leave leave,
*
* @param leave
*/
@RequestMapping(value = "start", method = RequestMethod.POST)
public String startWorkflow(Leave leave,RedirectAttributes redirectAttributes, HttpSession session) {
try {
User user = UserUtil.getUserFromSession(session);
// 用户未登录不能操作,实际应用使用权限框架实现,例如Spring Security、Shiro等
if (user == null || StringUtils.isBlank(user.getId())) {
return "redirect:/login?timeout=true";
}
leave.setUserId(user.getId());
Map<String, Object> variables = new HashMap<String, Object>();
variables.put("leave", leave);
//保存业务实体
leave.setTestId(new Date().toString());
leaveBean.saveBeforeEntity(leave);
Leave Leavetest=null;
Leavetest=leaveBean.queryByTestid(leave.getTestId());
leave=Leavetest;
logger.debug("save entity: {}", leave);
//不再获取id,改为获取类 .getClass().getSimpleName().toString();
//String businessKey = "leave";
String businessKey = leave.getId().toString();
ProcessInstance processInstance = null;
/*添加的代码--begin--Proxy*/
// 调用业务,保存申请信息
startNode.common(businessKey, variables,runtimeService,identityService);
LogHandler1 logHandler = startNode.new LogHandler1();
//放到代理中设置值了
//stuCourseApply.setExecuteId(pi.getId());
LeaveBean leaveBeanProxy=(LeaveBean)logHandler.newProxyInstanceStart(leaveBean);
leaveBeanProxy.updeatChangeApply(leave);
/*添加的代码--end--Proxy*/
/*放到代理中--begin--Proxy*/
/* try {
// 用来设置启动流程的人员ID,引擎会自动把用户ID保存到activiti:initiator中
identityService.setAuthenticatedUserId(leave.getUserId());
processInstance = runtimeService.startProcessInstanceByKey("easyChangeCourse", businessKey, variables);
String processInstanceId = processInstance.getId();
leave.setProcessInstanceId(processInstanceId);
logger.debug("start process of {key={}, bkey={}, pid={}, variables={}}", new Object[]{"easyChangeCourse", processInstanceId, variables});
} finally {
identityService.setAuthenticatedUserId(null);
}*/
/*放到代理中--end--Proxy*/
//+ processInstance.getId()
redirectAttributes.addFlashAttribute("message", "流程已启动" );
} catch (ActivitiException e) {
if (e.getMessage().indexOf("no processes deployed