获取当前活动完成后生成的工作项列表
-
获取当前活动完成后生成的工作项列表
场景描述
流程流转到某一个活动,当活动结束时可能需要获取后续产生的工作项列表来进行相关的业务处理。
BPS提供以下API:
- 根据活动实例ID查询活动结束后产生的后续工作项,对应API:queryNextWorkItemsByActivityInstID或queryNextWorkItemsByActivityInstID4SDO;
- 根据工作项ID查询活动结束后产生的后续工作项,对应API:queryNextWorkItemsByWorkItemID或queryNextWorkItemsByWorkItemID4SDO;
- 根据流程实例ID查询活动结束后产生的后续工作项,对应API:queryNextWorkItemsByProcessInstID或queryNextWorkItemsByProcessInstID4SDO。
案例简介
本案例结合一个发文流程来演示通过工作项ID查询活动结束后产生的后续工作项,使用queryNextWorkItemsByWorkItemID方法。
流程图如下:
拟稿人完成拟稿后分别送交部门经理和总经理审批,在拟稿活动结束后就会产生多个工作项。
部署/运行
- 将本场景的应用发布到服务器上,并将流程提交到流程引擎。这里采用分布式调用方式,修改应用下的uddi-address.xml文件为当前环境的正确配置。
- 通过https://localhost:8080/default/链接以tiger用户登录工作流客户端,点击[启动流程]菜单,如下图所示:
- 启动名称为”next(com.primeton.example.workflow.nextworks.common.next)”的流程。
- 在浏览器中输入https://localhost:8080/bps_example_nextWorks/login.jsp进入应用登录页面,如下图:
- 输入”tiger”登录,在代办任务里可以看到当前工作项,如下图所示:
- 在上图中工作项名称为”拟稿”的数据上点击链接”执行”,如下图:
输入数据,点击<提交>按钮,提交结束后进入获取到的后续工作项列表页面,如下图:
环境准备
本案例使用BPS自带的默认组织结构模型,如下图:
流程开发
操作步骤如下:
- 绘制业务流程:
- “拟稿”环节参与者设为流程启动者,基本属性设置如下:
-
“部门经理”环节参与者设为流程启动者,基本属性设置如下:
- “总经理”、”人力部”设置与”部门经理”相同。
- 用户登录
- 创建登录页面login.jsp,框架页面index.jsp、top.jsp、main.jsp。
实现登录控制,关键代码如下:
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response){
//获取登录页面输入的用户名
String userId = request.getParameter(“userId”);
//获取BPS默认的组织机构实现类
IWFOMService ommodel = null;
try {
ommodel = BPSServiceClientFactory.getDefaultClient().getOMService();
//ommodel = BPSServiceClientFactory.getClient(“ServerA”).getOMService();
} catch (WFServiceException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//判断登录用户是否存在于组织机构中
WFParticipant participant = ommodel.findParticipantByID(“person”, userId);
if(participant == null){
request.setAttribute(“loginTip”, new String(“用户不存在”));
//回到登录页面,提示错误信息
return mapping.findForward(“loginerr”);
}else{
//获取登录用户名对应的用户名称
String userName = participant.getName();
HttpSession session = request.getSession(true);
//封装成User,存放在session中,方便在filter进行判断
User user = new User();
user.setUserId(userId);
user.setUserName(userName);
session.setAttribute(“WFClientUserName”, user);
//将登录用户放入BPS Process Server中,以便在web应用中使用BPS提供的页面标签等功能
//BPSServiceClientFactory.getLoginManager().login(request, userId, userName);
BPSServiceClientFactory.getLoginManager().setCurrentUser(userId, userName);
//登录成功,进入示例主界面
return mapping.findForward(“loginsuc”);
}
}
3.查询”拟稿”活动完成后产生的后续工作项代码如下:
public ActionForward save(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
long workItemId = Long.parseLong(request.getParameter(“workItemId”));
User user = (User)request.getSession(true).getAttribute(“WFClientUserName”);
//用户信息注入到BPS Process Server中
BPSServiceClientFactory.getLoginManager().setCurrentUser(user.getUserId(), user.getUserName());
try {
UserTaskBean task = new UserTaskBean();
//结束工作项
task.finshWorkItem(workItemId);
//更加工作项ID查询后续生成的工作项列表
List<WFWorkItem> nextworks = task.queryNextWorkItem(workItemId);
request.setAttribute(“nextworks”, nextworks);
} catch (WFServiceException e) {
e.printStackTrace();
}
return mapping.findForward(“save”);
}
完成工作项代码如下:
public void finshWorkItem(long workItemId) {
IWFWorkItemManager manager = client.getWorkItemManager();
try {
manager.finishWorkItem(workItemId, false);
} catch (WFServiceException e) {
e.printStackTrace();
} catch (WFReasonableException e) {
e.printStackTrace();
}
}
根据工作项ID查询后续工作项代码如下:
public List<WFWorkItem> queryNextWorkItem (long workItemId) throws WFServiceException {
IWFWorkItemManager mng = client.getWorkItemManager();
return mng.queryNextWorkItemsByWorkItemID(workItemId, false);
}
声明: 除非转自他站(如有侵权,请联系处理)外,本文采用 BY-NC-SA 协议进行授权 | 嗅谱网
转载请注明:转自《获取当前活动完成后生成的工作项列表》
本文地址:http://www.xiupu.net/archives-6999.html
关注公众号:
微信赞赏
支付宝赞赏