BOS项目11:流程定义/实例管理,bos用户角色同步activiti用户表组表

本文主要是介绍BOS项目11:流程定义/实例管理,bos用户角色同步activiti用户表组表,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!


目录

  1. 2    流程定义管理
  2. 3    流程实例管理
  3. 4    将bos系统中的用户和组同步到activiti中

内容:

1、提供新的json文件,修改系统菜单(加入工作流的菜单)

2、流程定义管理(查询、部署流程、查看png流程图片)

3、流程实例管理(查询、查看运行状态)

4、将bos系统中的用户数据和角色数据同步到activiti的用户表和组表

 

1.    提供新的json文件,修改系统菜单(加入工作流的菜单)

2.    流程定义管理

第一步:创建一个ProcessDefinitionAction,提供list方法,并注入流程引擎对象

 查询

[java]  view plain  copy
 
  在CODE上查看代码片 派生到我的代码片
  1. @Controller  
  2. @Scope("prototype")  
  3. public class ProcessDefinitionAction extends ActionSupport {  
  4.     @Resource  
  5.     private ProcessEngine processEngine;  
  6.   
  7.     /** 
  8.      * 查询最新版本的流程定义列表数据 
  9.      */  
  10.     public String list() {  
  11.         ProcessDefinitionQuery query = processEngine.getRepositoryService()  
  12.                 .createProcessDefinitionQuery();  
  13.         query.latestVersion();  
  14.         List<ProcessDefinition> list = query.list();  
  15.         // 压栈  
  16.         ActionContext.getContext().getValueStack().set("list", list);  
  17.         return "list";  
  18.     }  

第二步:配置struts.xml

第三步:提供processdefinition_list.jsp页面,展示流程定义数据

[html]  view plain  copy
 
  在CODE上查看代码片 派生到我的代码片
  1. <body class="easyui-layout">  
  2.   <div region="center" >  
  3.     <table id="grid" class="easyui-datagrid">    
  4.         <thead>  
  5.             <tr>  
  6.                 <th data-options="field:'id'" width="120">流程编号</th>  
  7.                 <th data-options="field:'name'" width="200">流程名称</th>  
  8.                 <th data-options="field:'key'" width="100">流程key</th>  
  9.                 <th data-options="field:'version'" width="80">版本号</th>  
  10.                 <th data-options="field:'viewpng'" width="200">查看流程图</th>  
  11.             </tr>  
  12.         </thead>  
  13.         <tbody>  
  14.                 <s:iterator value="list" var="processDefinition">  
  15.                     <!-- 在循环过程中 ,将  processDefinition 对象,同时放入 root 和 map 中-->  
  16.                 <tr>  
  17.                     <td>  
  18.                         <s:property value="id"/> <!-- 从root找 -->  
  19.                         <%--  
  20.                         <s:property value="#processDefinition.id"/> <!-- 从map找 -->  
  21.                          --%>  
  22.                            
  23.                     </td>  
  24.                     <td><s:property value="name"/>  
  25.                     </td>  
  26.                     <td><s:property value="key"/></td>  
  27.                     <td><s:property value="version"/></td>  
  28.                     <td>  
  29.                         <a onclick="window.showModalDialog('processDefinitionAction_showpng.action?pdId=${id }')"   
  30.                          class="easyui-linkbutton" data-options="iconCls:'icon-search'">查看流程图  
  31.                         </a>  
  32.                     </td>  
  33.                 </tr>  
  34.                 </s:iterator>  
  35.         </tbody>  
  36.     </table>  
  37.   </div>  

 

2.1   部署流程定义


第一步:提供文件上传的页面

 

[html]  view plain  copy
 
  在CODE上查看代码片 派生到我的代码片
  1. <s:form action="processDefinitionAction_deploy" theme="simple" method="post"  
  2.      enctype="multipart/form-data" id="uploadForm">  
  3.     <table class="table-edit" width="100%" >  
  4.         <tr class="title"><td colspan="2">发布新流程</td></tr>  
  5.         <tr>  
  6.             <td width="200">浏览流程定义zip压缩文件</td>  
  7.             <td>  
  8.                 <input type="file" name="deploy" />  
  9.             </td>  
  10.         </tr>  
  11.         <tr>  
  12.             <td colspan="2">  
  13.                 <a id="btn" href="javascript:$('#uploadForm').submit();"   
  14.                 class="easyui-linkbutton" data-options="iconCls:'icon-save'">发布新流程</a>    
  15.             </td>  
  16.         </tr>  
  17.     </table>  
  18. </s:form>  


第二步:在ProcessDefinitionAction中提供deploy方法,提供File类型的属性deploy

 

[java]  view plain  copy
 
  在CODE上查看代码片 派生到我的代码片
  1. // 接收上传的文件  
  2. private File deploy;// zip文件  
  3. public void setDeploy(File deploy) {  
  4.     this.deploy = deploy;  
  5. }  
  6. /** 
  7.  * 部署流程定义 
  8.  *  
  9.  * @throws Exception 
  10.  */  
  11. public String deploy() throws Exception {  
  12.     DeploymentBuilder deploymentBuilder = processEngine  
  13.             .getRepositoryService().createDeployment();  
  14.     ZipInputStream zipInputStream = new ZipInputStream(new FileInputStream(  
  15.             deploy));  
  16.     deploymentBuilder.addZipInputStream(zipInputStream);  
  17.     deploymentBuilder.deploy();  
  18.     return "toList";  
  19. }  

第三步:配置struts.xml

 

 

2.2   查看流程图片


第一步:修改processdefintion_list.jsp页面中链接按钮的地址

 

[html]  view plain  copy
 
  在CODE上查看代码片 派生到我的代码片
  1. <a onclick="window.showModalDialog('processDefinitionAction_showpng.action?pdId=${id }')"   
  2.  class="easyui-linkbutton" data-options="iconCls:'icon-search'">查看流程图  
  3. </a>  

第二步:在Action中提供showpng方法,获取对应的png图片的输入流

 

[java]  view plain  copy
 
  在CODE上查看代码片 派生到我的代码片
  1. //接收流程定义ID  
  2. private String pdId;  
  3. public void setPdId(String pdId) {  
  4.     this.pdId = pdId;  
  5. }  
  6. /** 
  7.  * 查看png图片 
  8.  */  
  9. public String showpng(){  
  10.     //processEngine.getRepositoryService().getResourceAsStream(deploymentId, resourceName);  
  11.     InputStream pngStream = processEngine.getRepositoryService().getProcessDiagram(pdId);  
  12.     ActionContext.getContext().getValueStack().set("pngStream", pngStream);  
  13.     //使用struts2的文件下载功能展示png图片  
  14.     return "showpng";  
  15. }  

第三步:配置struts.xml

 

[html]  view plain  copy
 
  在CODE上查看代码片 派生到我的代码片
  1. <!-- 流程定义管理Action -->  
  2. <action name="processDefinitionAction_*" class="processDefinitionAction"  
  3.     method="{1}">  
  4.     <result name="list">/WEB-INF/pages/workflow/processdefinition_list.jsp  
  5.     </result>  
  6.     <!-- <result name="toList" type="redirectAction"> <param name="namespace">/</param>   
  7.         <param name="actionName">processDefinitionAction_list</param> </result> -->  
  8.     <result name="toList" type="redirectAction">  
  9.         processDefinitionAction_list  
  10.     </result>  
  11.     <result name="showpng" type="stream">  
  12.         <param name="contentType">image/png</param>  
  13.         <param name="inputName">pngStream</param>  
  14.         <!--   
  15.         <param name="contentDisposition">attachment;filename="document.pdf"</param>  
  16.         <param name="bufferSize">1024</param>  
  17.          -->  
  18.     </result>  
  19. </action>  

 

3.    流程实例管理

3.1   查看正在运行的流程实例


第一步:创建ProcessInstanceAction,提供list方法,查询流程实例列表数据

 

[java]  view plain  copy
 
  在CODE上查看代码片 派生到我的代码片
  1. @Controller  
  2. @Scope("prototype")  
  3. public class ProcessInstanceAction extends ActionSupport {  
  4.     @Autowired  
  5.     private ProcessEngine processEngine;  
  6.   
  7.     /** 
  8.      * 查询正在运行的流程实例数据 
  9.      */  
  10.     public String list() {  
  11.         // 流程实例查询对象,查询表act_ru_execution  
  12.         ProcessInstanceQuery query = processEngine.getRuntimeService()  
  13.                 .createProcessInstanceQuery();  
  14.         query.orderByProcessDefinitionKey().desc();  
  15.         List<ProcessInstance> list = query.list();  
  16.         ActionContext.getContext().getValueStack().set("list", list);  
  17.         return "list";  
  18.     }  

 

第二步:配置struts.xml 

第三步:提供processinstance_list.jsp页面,展示列表数据

[html]  view plain  copy
 
  在CODE上查看代码片 派生到我的代码片
  1. <body class="easyui-layout">  
  2.    <div region="center">  
  3.       <table id="grid" class="easyui-datagrid">  
  4.         <thead>  
  5.             <tr>  
  6.                 <th data-options="field:'id'" width="60">实例编号</th>  
  7.                 <th data-options="field:'name'" width="150">流程定义编号</th>  
  8.                 <th data-options="field:'activity'" width="150">运行到哪个任务</th>  
  9.                 <th data-options="field:'viewRuntime'" width="500">业务数据</th>  
  10.                 <th data-options="field:'viewpng'" width="200">查看流程图</th>  
  11.             </tr>  
  12.         </thead>  
  13.         <tbody>  
  14.             <s:iterator value="list">  
  15.                 <tr>  
  16.                     <td>${id }</td>  
  17.                     <td>${processDefinitionId }</td>  
  18.                     <td>${activityId }</td>  
  19.                     <td>  
  20.                         <div id="div${id }"></div>  
  21.                         <script type="text/javascript">  
  22.                             //根据流程实例id查询流程变量  
  23.                             $.post("${pageContext.request.contextPath}/processInstanceAction_findData.action",{"id":'${id}'},function(data){  
  24.                                 $("#div${id}").html(data);  
  25.                             });  
  26.                         </script>  
  27.                     </td>  
  28.                     <td>  
  29.                         <script type="text/javascript">  
  30.                             function showPng(id){  
  31.                                 window.showModalDialog("processInstanceAction_showPng.action?id="+id);  
  32.                             }  
  33.                         </script>  
  34.                         <a data-options="iconCls:'icon-search'" class="easyui-linkbutton"   
  35.                         onclick="showPng('${id}');" href="#">查看流程图</a>  
  36.                     </td>  
  37.                 </tr>  
  38.             </s:iterator>  
  39.         </tbody>  
  40.       </table>  
  41.    </div>  
  42. </body>  

 

第四步:在Action中提供findData方法,根据流程实例ID查询对应的流程变量

 

[java]  view plain  copy
 
  在CODE上查看代码片 派生到我的代码片
  1. // 接收流程实例ID  
  2. private String id;  
  3. public void setId(String id) {  
  4.     this.id = id;  
  5. }  
  6. /** 
  7.  * 根据流程实例ID查询流程变量 
  8.  *  
  9.  * @throws IOException 
  10.  */  
  11. public String findData() throws IOException {  
  12.     Map<String, Object> variables = processEngine.getRuntimeService()  
  13.             .getVariables(id);  
  14.     ServletActionContext.getResponse().setContentType(  
  15.             "text/html;charset=UTF-8");  
  16.     ServletActionContext.getResponse().getWriter().print(variables);  
  17.     return NONE;  
  18. }  

3.2   查询流程实例运行状态(图片显示)


第一步:在流程实例列表页面,修改链接按钮的地址

 效果


 

第二步:在Action中提供showPng方法,查询部署ID,图片名称,任务坐标

 

[java]  view plain  copy
 
  在CODE上查看代码片 派生到我的代码片
  1. /** 
  2.  * 流程任务获取图片数据 
  3.  *  
  4.  * @return 
  5.  */  
  6. public String showPng() {  
  7.     // 通过流程实例获取流程定义id  
  8.     ProcessInstance processInstance = processEngine.getRuntimeService()  
  9.             .createProcessInstanceQuery().processInstanceId(id)  
  10.             .singleResult();  
  11.     String processDefinitionId = processInstance.getProcessDefinitionId();  
  12.     // 通过流程定义id获取流程定义对象,然后获取部署id和图片名称  
  13.     ProcessDefinition processDefinition = processEngine  
  14.             .getRepositoryService().createProcessDefinitionQuery()  
  15.             .processDefinitionId(processDefinitionId).singleResult();  
  16.     String deploymentId = processDefinition.getDeploymentId();  
  17.     String imageName = processDefinition.getDiagramResourceName();  
  18.     // 通过流程定义id获取详细(包含坐标)的流程定义对象  
  19.     ProcessDefinitionEntity processDefinitionEntity = (ProcessDefinitionEntity) processEngine  
  20.             .getRepositoryService().getProcessDefinition(  
  21.                     processDefinitionId);  
  22.     String activityId = processInstance.getActivityId();  
  23.     //通过活动id获取活动(当前任务)对象  
  24.     ActivityImpl activityImpl = processDefinitionEntity.findActivity(activityId);  
  25.     //获取图片参数  
  26.     int x = activityImpl.getX();  
  27.     int y = activityImpl.getY();  
  28.     int height = activityImpl.getHeight();  
  29.     int width = activityImpl.getWidth();  
  30.     //把所有参数都放到值栈  
  31.     Map<String,Object> map=new HashMap<String, Object>();  
  32.     map.put("deploymentId", deploymentId);  
  33.     map.put("imageName", imageName);  
  34.     map.put("x", x);  
  35.     map.put("y", y);  
  36.     map.put("height", height);  
  37.     map.put("width", width);  
  38.     ActionContext.getContext().getValueStack().push(map);  
  39.     return "image";  
  40. }  

提取工具类:ActivitiUtils

[java]  view plain  copy
 
  在CODE上查看代码片 派生到我的代码片
  1. public class ActivitiUtils {  
  2.     public static Map<String, Object> findDataByInstanceId(  
  3.             ProcessEngine processEngine, String id) {  
  4.         // 查询部署ID、png图片名称、当前流程任务的坐标  
  5.         ProcessInstanceQuery query = processEngine.getRuntimeService()  
  6.                 .createProcessInstanceQuery();  
  7.         // 根据流程实例ID查询流程实例对象  
  8.         query.processInstanceId(id);  
  9.         ProcessInstance processInstance = query.singleResult();  
  10.   
  11.         // 根据流程实例对象查询流程定义ID  
  12.         String processDefinitionId = processInstance.getProcessDefinitionId();  
  13.         // 根据流程定义ID查询流程定义对象  
  14.         ProcessDefinitionQuery query2 = processEngine.getRepositoryService()  
  15.                 .createProcessDefinitionQuery();  
  16.         query2.processDefinitionId(processDefinitionId);  
  17.         ProcessDefinition processDefinition = query2.singleResult();  
  18.   
  19.         // 获得当前流程实例执行到那个任务了  
  20.         String activityId = processInstance.getActivityId();// usertask2  
  21.   
  22.         // 根据流程定义ID查询流程定义对象(包含有坐标信息)  
  23.         ProcessDefinitionEntity processDefinition2 = (ProcessDefinitionEntity) processEngine  
  24.                 .getRepositoryService().getProcessDefinition(  
  25.                         processDefinitionId);  
  26.         ActivityImpl activityImpl = processDefinition2.findActivity(activityId);  
  27.         int x = activityImpl.getX();  
  28.         int y = activityImpl.getY();  
  29.         int width = activityImpl.getWidth();  
  30.         int height = activityImpl.getHeight();  
  31.           
  32.         Map<String, Object> map = new HashMap<String, Object>();  
  33.         map.put("deploymentId", processDefinition.getDeploymentId());  
  34.         map.put("imageName", processDefinition.getDiagramResourceName());  
  35.         map.put("x", x);  
  36.         map.put("y", y);  
  37.         map.put("width", width);  
  38.         map.put("height", height);  
  39.         return map;  
  40.     }  
  41. }  

第三步:配置struts.xml

第四步:提供image.jsp页面,展示图片和div

 

[html]  view plain  copy
 
  在CODE上查看代码片 派生到我的代码片
  1. <body>  
  2. <!-- 1.获取到规则流程图 -->  
  3. <img style="position: absolute;top: 0px;left: 0px;"  
  4.      src="processInstanceAction_viewImage?deploymentId=${deploymentId }&imageName=${imageName}">  
  5.   
  6. <!-- 2.根据当前活动的坐标,动态绘制DIV -->  
  7. <div style="position: absolute;border:1px solid red;  
  8.     top:${y-1}px;left:${x-1}px;width:${width}px;height:${height}px;">  
  9. </div>  
  10. </body>  

第五步:在Action中提供viewImage方法,查询png图片的输入流

[java]  view plain  copy
 
  在CODE上查看代码片 派生到我的代码片
  1. //接收图片src传递过来的参数  
  2. String deploymentId;  
  3. String imageName;  
  4.   
  5. public void setDeploymentId(String deploymentId) {  
  6.     this.deploymentId = deploymentId;  
  7. }  
  8.   
  9. public void setImageName(String imageName) {  
  10.     this.imageName = imageName;  
  11. }  
  12.   
  13. /** 
  14.  * 查询png图片的输入流,展示图片 
  15.  */  
  16. public String viewImage() {  
  17.     InputStream pngStream = processEngine.getRepositoryService()  
  18.             .getResourceAsStream(deploymentId, imageName);  
  19.     ActionContext.getContext().getValueStack().set("pngStream", pngStream);  
  20.     return "viewImage";  
  21. }  

 

第六步:配置struts.xml,使用文件下载

[html]  view plain  copy
 
  在CODE上查看代码片 派生到我的代码片
  1. <!-- 流程实例管理Action -->  
  2. <action name="processInstanceAction_*" class="processInstanceAction" method="{1}">  
  3.     <result name="list">/WEB-INF/pages/workflow/processinstance_list.jsp</result>  
  4.     <result name="showPng">//WEB-INF/pages/workflow/image.jsp</result>  
  5.     <result name="viewImage" type="stream">  
  6.         <param name="contentType">image/png</param>  
  7.         <param name="inputName">pngStream</param>  
  8.     </result>  
  9. </action>  

 

 

4.    将bos系统中的用户和组同步到activiti中


    同步用户

 

[java]  view plain  copy
 
  在CODE上查看代码片 派生到我的代码片
  1. //添加用户,同步到activiti的act_id_user  act_id_mebership  
  2. public void save(User user, String[] roleIds) {  
  3.     String password = user.getPassword();  
  4.     //使用md5加密  
  5.     password = MD5Utils.md5(password);  
  6.     user.setPassword(password);  
  7.     userDao.save(user);//持久对象  
  8.     //添加activiti UserEntity  
  9.     org.activiti.engine.identity.User actUser = new UserEntity();  
  10.     actUser.setId(user.getId());  
  11.     processEngine.getIdentityService().saveUser(actUser);//操作act_id_user  
  12.     for (String id : roleIds) {  
  13.         Role role = roleDao.findById(id);  
  14.         //用户关联角色   
  15.         user.getRoles().add(role);  
  16.         //将ac用户加入到ac组中 role.getName()使用角色名字做为组ID方便阅读  
  17.         processEngine.getIdentityService().createMembership(actUser.getId(), role.getName());  
  18.     }  
  19. }  

    同步组

 

[java]  view plain  copy
 
  在CODE上查看代码片 派生到我的代码片
  1. //保存角色,同步到activiti的act_id_group  
  2. public void save(Role model, String funcitonIds) {  
  3.     roleDao.save(model);//持久对象  
  4.     //创建ac组并添加  
  5.     Group group = new GroupEntity();  
  6.     group.setId(model.getName());  
  7.     group.setName(model.getName());  
  8.     processEngine.getIdentityService().saveGroup(group );  
  9.     String[] ids = funcitonIds.split(",");  
  10.     for (String id : ids) {  
  11.         Function function = new Function();  
  12.         function.setId(id);  
  13.         model.getFunctions().add(function);//角色关联权限  
  14.     }  
  15. }  

这篇关于BOS项目11:流程定义/实例管理,bos用户角色同步activiti用户表组表的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/369142

相关文章

Security OAuth2 单点登录流程

单点登录(英语:Single sign-on,缩写为 SSO),又译为单一签入,一种对于许多相互关连,但是又是各自独立的软件系统,提供访问控制的属性。当拥有这项属性时,当用户登录时,就可以获取所有系统的访问权限,不用对每个单一系统都逐一登录。这项功能通常是以轻型目录访问协议(LDAP)来实现,在服务器上会将用户信息存储到LDAP数据库中。相同的,单一注销(single sign-off)就是指

Spring Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

基于MySQL Binlog的Elasticsearch数据同步实践

一、为什么要做 随着马蜂窝的逐渐发展,我们的业务数据越来越多,单纯使用 MySQL 已经不能满足我们的数据查询需求,例如对于商品、订单等数据的多维度检索。 使用 Elasticsearch 存储业务数据可以很好的解决我们业务中的搜索需求。而数据进行异构存储后,随之而来的就是数据同步的问题。 二、现有方法及问题 对于数据同步,我们目前的解决方案是建立数据中间表。把需要检索的业务数据,统一放到一张M

服务器集群同步时间手记

1.时间服务器配置(必须root用户) (1)检查ntp是否安装 [root@node1 桌面]# rpm -qa|grep ntpntp-4.2.6p5-10.el6.centos.x86_64fontpackages-filesystem-1.41-1.1.el6.noarchntpdate-4.2.6p5-10.el6.centos.x86_64 (2)修改ntp配置文件 [r

这15个Vue指令,让你的项目开发爽到爆

1. V-Hotkey 仓库地址: github.com/Dafrok/v-ho… Demo: 戳这里 https://dafrok.github.io/v-hotkey 安装: npm install --save v-hotkey 这个指令可以给组件绑定一个或多个快捷键。你想要通过按下 Escape 键后隐藏某个组件,按住 Control 和回车键再显示它吗?小菜一碟: <template

如何用Docker运行Django项目

本章教程,介绍如何用Docker创建一个Django,并运行能够访问。 一、拉取镜像 这里我们使用python3.11版本的docker镜像 docker pull python:3.11 二、运行容器 这里我们将容器内部的8080端口,映射到宿主机的80端口上。 docker run -itd --name python311 -p

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

在cscode中通过maven创建java项目

在cscode中创建java项目 可以通过博客完成maven的导入 建立maven项目 使用快捷键 Ctrl + Shift + P 建立一个 Maven 项目 1 Ctrl + Shift + P 打开输入框2 输入 "> java create"3 选择 maven4 选择 No Archetype5 输入 域名6 输入项目名称7 建立一个文件目录存放项目,文件名一般为项目名8 确定

软考系统规划与管理师考试证书含金量高吗?

2024年软考系统规划与管理师考试报名时间节点: 报名时间:2024年上半年软考将于3月中旬陆续开始报名 考试时间:上半年5月25日到28日,下半年11月9日到12日 分数线:所有科目成绩均须达到45分以上(包括45分)方可通过考试 成绩查询:可在“中国计算机技术职业资格网”上查询软考成绩 出成绩时间:预计在11月左右 证书领取时间:一般在考试成绩公布后3~4个月,各地领取时间有所不同