获取可能到达的活动定义场景
-
获取可能到达的活动定义场景
场景描述
在流程处理过程中有时需要根据设置的条件来模拟判断当前工作项结束后可以到达哪些环节,然后可以选取某些环节做一些业务处理。
模拟查询可能到达的活动使用工作流客户端API: getNextActivitiesMaybeArrived。
案例简介
本案例结合一个报销流程来演示在填写报销单后根据当前设置的条件模拟工作项提交后流程可能会流转到哪个环节。
流程图如下:
拟稿人完成拟稿后分别送交部门经理和总经理审批,在拟稿活动结束后就会产生多个工作项。
场景实现
部署/运行
- 将本场景的应用发布到服务器上,并将流程提交到流程引擎。这里采用分布式调用方式,修改应用下的uddi-address.xml文件为当前环境的正确配置。
- 通过https://localhost:8080/default/链接以tiger用户登录工作流客户端,点击[启动流程]菜单,如下图所示:
- 启动名称为”act(com.primeton.example.workflow.maybeactivity.common.act)”的流程。
在浏览器中输入https://localhost:8080/bps_example_maybeActivitys/login.jsp进入应用登录页面,如下图:
- 输入”tiger”登录,在代办任务里可以看到当前工作项,如下图所示:
点击”执行”,模拟”填写报销单”完成后可以到达哪个环节,如下图所示:
因为本来在”填写报销单”活动中设置为多路分支,而在后面的处理中又在相关数据设置了flag=1的分子条件,所以活动结束后会分别提交给”总经理”和”部门经理”两个环节。
如果不设置相关数据flag=1,则只会流转到”部门经理”环节。
-
场景实现
环境准备
本案例使用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 create(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
String workItemId = request.getParameter(“workItemID”);
long processInstID = Long.parseLong(request.getParameter(“processInstID”));
long activityInstID = Long.parseLong(request.getParameter(“activityInstID”));
try {
UserTaskBean task = new UserTaskBean();
//假设报销金额大于10000设置flag=1
String flag = “1”;
//设置相关数据
task.setRelativeData(processInstID, “flag”,flag);
//获取可能达到的活动定义
List<WFActivityDefine> acts = task.queryNextActivitiesMaybeArrived(activityInstID);
request.setAttribute(“acts”, acts);
} catch (Exception e) {
e.printStackTrace();
}
request.setAttribute(“workItemId”, workItemId);
return mapping.findForward(“create”);
}
设置相关数据和查询活动定义代码如下:
public boolean setRelativeData(long processInstID, String xpath,
Object value) throws Exception {
//获取相关数据管理接口
IWFRelativeDataManager mng = client.getRelativeDataManager();
try {
mng.setRelativeData(processInstID, xpath, value);
return true;
} catch (WFServiceException e) {
e.printStackTrace();
throw new Exception(e);
}
}
public List<WFActivityDefine> queryNextActivitiesMaybeArrived (long activityInstID) throws WFServiceException {
IWFProcessInstManager mng = client.getProcessInstManager();
List<WFActivityDefine> list = mng.getNextActivitiesMaybeArrived(activityInstID);
return list;
}
可能到达的活动活动定义列表JSP页面如下:
<%@ page language=”java” pageEncoding=”utf-8″%>
<%@ taglib uri=”/WEB-INF/struts-bean.tld” prefix=”bean”%>
<%@ taglib uri=”/WEB-INF/struts-html.tld” prefix=”html”%>
<%@ taglib uri=”/WEB-INF/struts-logic.tld” prefix=”logic”%>
<!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN”>
<html>
<head>
<title>选择工活动</title>
<meta http-equiv=”pragma” content=”no-cache”>
<meta http-equiv=”cache-control” content=”no-cache”>
<meta http-equiv=”expires” content=”0″>
<meta http-equiv=”keywords” content=”keyword1,keyword2,keyword3″>
<meta http-equiv=”description” content=”This is my page”>
<link rel=”stylesheet” type=”text/css”
href=”<%=request.getContextPath()%>/user_css/style-custom.css”>
</head>
<body>
<form name=”queryform” action=”” method=”post” target=”_self”>
</form>
<br>
<table border=”1″ cellpadding=”0″ cellspacing=”0″ width=”100%”
class=”EOS_Table”>
<tr>
<th>
可能到达的活动
</th>
<tr>
<tr>
<td>
<table border=”0″ cellpadding=”0″ cellspacing=”0″ width=”100%”
class=”form_table”>
<tr>
<td width=”10%” align=”center”>
序号
</td>
<td width=”10%” align=”center”>
活动名称
</td>
<td width=”10%” align=”center”>
活动定义ID
</td>
<td width=”10%” align=”center”>
优先级
</td>
</tr>
<logic:present name=”acts” scope=”request”>
<logic:iterate id=”task” name=”acts” indexId=”tind”>
<tr>
<td align=”center”>
<%=(tind.intValue()+1)%>
</td>
<td align=”center”>
<bean:write name=”task” property=”name”/>
</td>
<td align=”center”>
<bean:write name=”task” property=”id”/>
</td>
<td>
<bean:write name=”task” property=”priority”/>
</td>
</tr>
</logic:iterate>
</logic:present>
</table>
</td>
<tr>
</table>
</body>
</html>
声明: 除非转自他站(如有侵权,请联系处理)外,本文采用 BY-NC-SA 协议进行授权 | 嗅谱网
转载请注明:转自《获取可能到达的活动定义场景》
本文地址:http://www.xiupu.net/archives-6987.html
关注公众号:
微信赞赏
支付宝赞赏