JBPM handler
1、 AssignmentHandler用于设置任务的接受者:
/** * 按照角色查询得到角色下面的所有用户,然后将任务实例分配给这些用户 * @author Lee * */ public class RoleAssignmentHandler implements AssignmentHandler { //这个值将会由JBPM自动注入,因此在定义AssignmentHandler的时候,需要定义它 private String roleName; public void assign(Assignable assignable, ExecutionContext exeContext) throws Exception { if (roleName == null) { throw new RuntimeException("你必须设角色置名称!"); } Session session = executionContext.getJbpmContext().getSession(); String hql = "select dm.empId from DepartmentMember dm where dm.positionId=(select sys.encode from Syscode sys where sys.codeValue=?)"; List usernames = session.createQuery(hql).setParameter(0, roleName).list(); if (usernames.isEmpty()) { throw new RuntimeException("角色【" + roleName + "】下无任何用户,无法完成任务!"); } String[] pooledActors = (String[]) usernames .toArray(new String[usernames.size()]); assignable.setPooledActors(pooledActors); System.out.println(usernames.get(0)); }
2、DecisionHandler 在decision节点,决定流向的逻辑
public class FlowDecisionHandler implements DecisionHandler { @Override public String decide(ExecutionContext executionContext) throws Exception { // TODO Auto-generated method stub BeanFactory factory = BeanFactoryHelper.getFactory(); DepartmentService departmentService = (DepartmentService)factory.getBean("departmentService"); DeptMemberService deptMemberService = (DeptMemberService)factory.getBean("deptMemberService"); SyscodeService syscodeService = (SyscodeService)factory.getBean("syscodeService"); String empId =(String)executionContext.getContextInstance().getVariable("empId"); String position = "";//职位 String department= "";//部门 position = syscodeService.queryByEncode(deptMemberService.findDeptMemberByEmpId(empId).getPositionId()).getCodeValue(); department = departmentService.queryByDeptId(deptMemberService.findDeptMemberByEmpId(empId).getDeptId()).getDeptName(); if(position.equals("普通员工")) { return "提交给部门经理审批"; } if(position.equals("部门经理") && department.equals("综合部")) { return "提交给总经理审批"; } if(position.equals("部门经理") && (!department.equals("综合部"))) { return "提交给技术总监审批"; } if(position.equals("技术总监")) { return "提交给总经理审批"; } return null; } }
PS:其中BeanFactory factory = BeanFactoryHelper.getFactory();是为了能在jbpm的handler中能够使用由spring管理的bean对象
public class BeanFactoryHelper implements BeanFactoryAware{ private static BeanFactory factory; public static BeanFactory getFactory(){ return factory; } @Override public void setBeanFactory(BeanFactory f) throws BeansException { // TODO Auto-generated method stub factory = f; } }
作者:Alexia(minmin)
如果您认为阅读这篇博客让您有些收获,不妨点击一下右下角的【推荐】
如果您希望与我交流互动,欢迎微博互粉
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?