11 BOS项目第11天
今天学习将activiti整合进BOS系统
11.1 查看流程实例列表
- 前提:使用junit启动一个流程实例
@Autowired
private RuntimeService rs;
@Test
public void test2(){
//报销
HashMap<String, Object> info = new HashMap<>();
info.put("bxyy", "出差-广州到深圳的飞机票");
info.put("bxje", "3688.00");
info.put("employeeName", "wangwu");
rs.startProcessInstanceByKey("bxlc",info);
}
- 第一步:提供一个流程实例的Action,提供list方法获取数据
@Autowired
private RuntimeService rs;
private List<ProcessInstance> list;
public List<ProcessInstance> getList() {
return list;
}
public String list(){
//1.查找流程实例
ProcessInstanceQuery query = rs.createProcessInstanceQuery();
query.orderByProcessInstanceId().desc();
list = query.list();
return "list";
}
- 第二步:配置struts.xml
<!--流程实例-->
<action name="processInstanceAction_*" class="com.kdj.bos.web.action.ProcessInstanceAction" method="{1}">
<result name="list">/WEB-INF/pages/workflow/processinstance.jsp</result>
</action>
- 第三步:提供processinstance.jsp展示数据
- 每个格子,动态的发送post请求,绑定div
<td>
<div id="div${id }"></div>
<script type="text/javascript">
//根据流程实例id查询流程变量
$.post("${pageContext.request.contextPath}/processInstanceAction_findData.action",{"id":'${id}'},function(data){
$("#div${id}").html(data);
});
</script>
<script type="text/javascript">
function showPng(id){
window.showModalDialog("${pageContext.request.contextPath}/processInstanceAction_showPng.action?id="+id);
}
</script>
</td>
- 第四步:提供一个findData方法,查找流程变量数据
public void findData() throws IOException {
Map<String, Object> data = rs.getVariables(id);
ServletActionContext.getResponse().setHeader("content-type", "text/html;charset=utf-8");
ServletActionContext.getResponse().getWriter().write(data.toString());
}
11.2 将运行到哪个任务显示成中文
- 先运行下任务
@Autowired
private TaskService ts;
@Test
public void test3(){
ts.complete("507");
}
11.3 同步bos系统中用户和角色到activiti
- 删除数据库,把.sql的文件表创建下,导入auth_function表数据
- 内置一个admin帐号
- 配置文件中添加下面的代码,能自动创建activiti的表
<!-- 流程引擎配置对象 -->
<bean id="processEngineConfiguration"
class="org.activiti.spring.SpringProcessEngineConfiguration">
<property name="dataSource" ref="dataSource"/>
<property name="transactionManager" ref="transactionManager"/>
<!--让activiti框架自动创建表-->
<property name="databaseSchemaUpdate" value="true"></property>
</bean>
- 添加角色时,把角色添加到activiti的组中
//2.把角色保存到activiti的组中
Group group = new GroupEntity();
group.setId(role.getName());
group.setName(role.getName());
identityService.saveGroup(group);
- 添加用户时,把用户添加到activiti的用户中
//用户拥有角色
//保存到activiti的act_id_user表
org.activiti.engine.identity.User actUser = new UserEntity();
actUser.setId(model.getId()); //uuid
actUser.setFirstName(model.getUsername());
identityService.saveUser(actUser);
//用户拥有角色
for (String roleId : roleIds) {
Role role = roleDao.findById(roleId);
//role.setId(roleId);
model.getRoles().add(role);
//4.维护activiti的用户跟组的关系
String userId = actUser.getId();
String groupId = role.getName();
identityService.createMembership(userId, groupId);
}
11.4 设计物流配送流程
掌握物流配送流程设计思路
-
流程定义的ID
-
使用组任务
-
网关
-
任务的id
11.5 启动配送流程
- Action代码
public String start(){
//启动配送流程
workordermanageService.start(getModel().getId());
//返回列表界面
return list();
}
- Service代码
@Override
public void start(String id) {
//启动配送流程
//1.根据id查找Workordermanage
Workordermanage wom = workordermanageDao.findById(id);
//2.把start改成1
wom.setStart("1");
//3.启动流程实例transfer
//流程变量
Map<String, Object> info = new HashMap<>();
info.put("orderInfo", wom.toString());
//工作单的id
String businessId = wom.getId();
rs.startProcessInstanceByKey("transfer", businessId, info);
}
11.6 总结
- 项目SSH
1.由于老技术,老项目,各个框架都是比较老的版本
2.Struts2【表现层】,Hibernate3【持久层】,Spring3【桥接】版本
3.Easyui - 做界面
4.Poi - 导入导出excel表格
5.Shiro - 权限 -》【权限表设计-五张表】
6.Powerdisigner 表设计软件,生成创建表的sql语句
7.log4j 写日志,工作中一般要把请求数据和异常保存到日志文件中,方便以后排错,把日志写数据库[aop插入日志]
8.Ehcache:一些常用的,没有什么更新数据,区域、权限
9.Activiti 流程引擎
10.actiBPM Activiti流程绘制插件
11.json的框架,net.sf.json/jackson/gson【谷歌】
12.Hessian 远程调用框架,cxf,webservice
SSM
SpringMVC,Spring,MyBatis