`
jianwwpro
  • 浏览: 29699 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Activiti 并发实例流程图的显示

 
阅读更多

1.写在前面:
activiti中并发后的活动任务节点通过runtimeService.getActiveActivityIds(String proInstId)得到。
这个方法在Activiti的doc文档中介绍的不对,它错把参数写成了executionId,而事实上,一个流程实例(对应流程实例编号ProInstId)在运行中通过并发节点产生多个执行任务(对应执行编号executionId)。
2.关键代码:
ProcessInstanceAction.java

Java代码
public class ProcessInstanceAction extends BaseAction {
     private List<ActivityImpl> actImpls = new ArrayList<ActivityImpl>(); 
        public List<ActivityImpl> getActImpls() { 
          return actImpls;
       }
         public void setActImpls(List<ActivityImpl> actImpls) {
           this.actImpls = actImpls;
       }
     /** 
     * 显示流程图
      *
      * @return
      * @throws Exception
      */      
public String getProcessPic() throws Exception { 
          // String taskId =          // "2901";//getRequest().getParameter("taskId");3016,552,3020          
String procDefId = getRequest().getParameter("procDefId"); 
          ProcessDefinition procDef = repositoryService.createProcessDefinitionQuery().processDefinitionId(procDefId).singleResult();
           String diagramResourceName = procDef.getDiagramResourceName(); 
          InputStream imageStream = repositoryService.getResourceAsStream(procDef.getDeploymentId(), diagramResourceName);
           getRequest().setAttribute("inputStream", imageStream);
           return SUCCESS; 
      }         
/**
      * 获取跟踪信息
      *
       * @return
      * @throws Exception
      */     
 public String getProcessMap() throws Exception {
           String procDefId = getRequest().getParameter("procDefId");  
           String proInstId = getRequest().getParameter("procInstId"); 
          ProcessDefinition processDefinition = repositoryService .createProcessDefinitionQuery().processDefinitionId(procDefId) .singleResult(); 
            ProcessDefinitionImpl pdImpl = (ProcessDefinitionImpl) processDefinition;
           String processDefinitionId = pdImpl.getId();// 流程标识            ProcessDefinitionEntity def = (ProcessDefinitionEntity) ((RepositoryServiceImpl) repositoryService) .getDeployedProcessDefinition(processDefinitionId); 
            List<ActivityImpl> activitiList = def.getActivities();// 获得当前任务的所有节点
            /****/         
 List<String> ActiveActivityIds = runtimeService.getActiveActivityIds(proInstId); 
          for (String activeId : ActiveActivityIds) {
                 for (ActivityImpl activityImpl : activitiList) { 
                  String id = activityImpl.getId();
                   if (activityImpl.isScope()) { 
                        if (activityImpl.getActivities().size() > 1) {
                           List<ActivityImpl> subAcList = activityImpl                                   .getActivities(); 
                          for (ActivityImpl subActImpl : subAcList) {                               String subid = subActImpl.getId(); 
                              System.out.println("subImpl:" + subid); 
                              if (activeId.equals(subid)) {// 获得执行到那个节点
                                  actImpls.add(subActImpl);
                                   break; 
                              }
                           } 
                      } 
                    }  
                 if (activeId.equals(id)) {// 获得执行到那个节点
                        actImpls.add(activityImpl); 
                      System.out.println(id);  
                 } 
              } 
          } 
          /****/  
            return SUCCESS;
       }
   }  




pic.jsp
Html代码

<%@page import="java.io.InputStream"%> 
 <%@page import="org.activiti.engine.impl.*"%>  
<%@page import="org.activiti.engine.impl.pvm.*"%> 
 <%@page import="org.activiti.engine.impl.pvm.process.*"%>
  <%@page import="org.activiti.engine.repository.*"%>  
<%@page import="org.activiti.engine.*"%>  
<%@ page language="java" contentType="text/html; charset=UTF-8"      pageEncoding="UTF-8"%>   
 <%              
      InputStream is = (InputStream)request.getAttribute("inputStream"); 
      byte[] b = new byte[1024]; 
      int len = -1; 
      while((len = is.read(b, 0, 1024)) != -1) {
           response.getOutputStream().write(b, 0, len);  
         // 防止异常:getOutputStream() has already been called for this response           out.clear();
           out = pageContext.pushBody();
       }        %> 

showImg.jsp
Html代码
<%@page import="java.io.InputStream"%>  
<%@page import="org.activiti.engine.impl.*"%> 
 <%@page import="org.activiti.engine.impl.pvm.*"%>
  <%@page import="org.activiti.engine.impl.pvm.process.*"%> 
 <%@page import="org.activiti.engine.repository.*"%>  
<%@page import="org.activiti.engine.*"%> 
 <%@ page language="java" pageEncoding="UTF-8"%> 
 <%@ taglib prefix="s" uri="/struts-tags"%>  
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html> 
 <head>
      <title>
</title> 
 </head> 
 <body> 
     <div > 
         <img src="getProcessPic.action?procDefId=${procDefId}" style="position:absolute; left:0px; top:0px;">
      <s:iterator value="actImpls"> 
     <%System.out.println("lala"); %> 
                  <!-- 给执行的节点加框 --> 
         <div style="position:absolute; border:2px solid red;left:${x-1 }px;top:${y-1 }px;width:${width }px;height:${height }px;"></div>
          </s:iterator> 
     </div> 
   </body>
  </html>  

另附:环境配置struts+activiti:
struts.xml


Xml代码

<?xml version="1.0" encoding="UTF-8" ?>
  <!DOCTYPE struts PUBLIC   "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"   "http://struts.apache.org/dtds/struts-2.0.dtd">  <struts> 
     <constant name="struts.objectFactory.spring.autoWire" value="name" />      <constant name="struts.objectFactory" value="spring" />      
<package name="default" extends="struts-default"> 
     <action name="getProcessPic" class="processInstanceAction" method="getProcessPic"> 
             <result name = "success" >/incident/pic.jsp</result>
          </action>
          <action name="getProcessMap" class="processInstanceAction" method="getProcessMap">
              <result name = "success" >/incident/showImg.jsp</result> 
         </action> 
 </package>
  </struts>  
 



分享到:
评论
1 楼 webeasymail 2012-11-29  
引用

activiti中并发后的活动任务节点通过runtimeService.getActiveActivityIds(String proInstId)得到。
这个方法在Activiti的doc文档中介绍的不对,它错把参数写成了executionId,而事实上,一个流程实例(对应流程实例编号ProInstId)在运行中通过并发节点产生多个执行任务(对应执行编号executionId)。

/**
 * Represent a 'path of execution' in a process instance.
 * 
 * Note that a {@link ProcessInstance} also is an execution.
 * 
 * @author Joram Barrez
 */
public interface Execution {
  
}



在源码中,作者已经对Execution 和ProcessInstance的关系进行了注释,ProcessInstance实际上就是一个Execution,这个参数没有写错!

相关推荐

    Activiti如何动态获取流程图过程详解

    Activiti提供了动态获取流程图的功能,通过DefaultProcessDiagramGenerator类和repositoryService组件,可以根据流程定义id或流程实例id来绘制流程图。同时,高亮显示的节点可以通过runtimeService服务组件和...

    流程引擎(Flowable+Activiti)

    该版本可能增强了对云环境的支持,提高了并发处理能力,并提供了一套丰富的工具集用于流程设计和监控。Activiti强调简洁的API设计,使得开发者能快速理解和使用。 两者之间的比较: 1. 流程模型:Flowable在BPMN ...

    eclipse的activiti流程图插件.zip

    Activiti 插件支持 BPMN 2.0,允许用户创建复杂的流程图,包括任务、决策点、事件和并发流等元素。 3. **Eclipse IDE**:Eclipse 是一款强大的开放源代码集成开发环境,广泛用于Java应用开发,但也支持其他编程语言...

    Activiti工作流之管理流程定义

    这些元素通过连线连接,形成一个完整的流程图。 **三、Activiti Designer** 为了方便流程设计,Activiti提供了一个名为Activiti Designer的Eclipse插件,允许开发者使用图形化界面设计流程。设计完成后,可以导出`....

    activiti 5.16 流程管理 中文版

    - **流程图**:可视化流程图展示。 - **XML内容**:对应的BPMN XML文件。 - **启动一个流程实例**:通过代码启动流程实例。 - **任务列表**:展示当前待办任务。 - **领取任务**:用户领取任务。 - **完成任务**:...

    activiti工作流实例

    在这个实例中,我们可能会看到如何使用 Activiti 的 API 和相关工具创建 BPMN 流程图,包括启动流程、处理任务、信号和事件等。 首先,我们需要了解 Activiti 的核心概念: 1. **流程定义**:这是 BPMN 图形的代码...

    activiti工作流案例

    2. **流程图(Process Diagram)**:案例可能包含流程图,它们是BPMN符号的可视化表示,帮助用户理解流程的结构。你可以通过这些图表理解流程的流转逻辑,如任务如何分配、条件判断在哪里、如何处理并发任务等。 3....

    Activiti工作流示例Activiti Demo(带完整源码)非常实用

    在描述中提到的"Canvas动画"是指Activiti提供的可视化建模工具,它允许开发者通过拖拽方式创建流程图,并以动画形式展示流程执行的过程,使得流程设计更加直观易懂。这种动态演示方式有助于开发者和业务人员更好地...

    activiti流程管理的几个小例子

    2. **模型器(Modeler)**:Activiti 提供了一个可视化的模型器,让用户可以拖放元素来创建流程图。这使得非程序员也能设计和理解复杂的业务流程。 3. **部署(Deployment)**:流程定义完成后,需要部署到Activiti...

    activiti工作流详细讲解和实例

    3. **流程建模**:使用Eclipse或Alfresco Activiti Modeler等工具,创建和编辑流程图。 4. **API使用**:学习如何通过Java API启动流程实例,查询任务,完成任务,以及操作流程变量。 5. **实战演练**:通过实际...

    Activiti 学习笔记九:并行网关(parallelGateWay)

    1. 打开 Activiti 的流程设计器,选择“并行网关”元素,拖放到流程图中。 2. 连接网关:使用顺序流(Sequence Flow)连接并行网关与其他活动,定义流程的分支和汇聚路径。 3. 设置条件:如果需要,可以在顺序流上...

    activiti-5.22.0&Activiti-activiti-5.22.0.zip

    BPMN(Business Process Model and Notation)是一种图形化表示方法,使得非技术人员也能理解流程图。 2. **BPMN 2.0支持**: Activiti-5.22.0 遵循BPMN 2.0规范,这意味着它支持如任务、网关、事件、子流程等元素...

    Springboot 整合activiti及使用案例

    3. **创建流程定义**:设计 BPMN 2.0 流程图,并将其保存为 `.bpmn` 文件。 4. **启动流程引擎**:在 SpringBoot 启动类或配置类中,配置并启动 Activiti 引擎。 5. **编写业务代码**:根据业务需求,编写与流程相关...

    spring-activiti验证demo

    Spring Activiti是一个基于Java的企业级工作流引擎,它与Spring框架深度集成,为开发者提供了强大的业务流程管理(BPM)能力。在这个“spring-activiti验证demo”中,你将找到一个实例,展示了如何在实际项目中应用...

    activiti用户指南.zip

    1. 流程设计:使用 BPMN 工具(如 Activiti Modeler 或 Eclipse 插件)设计流程图,导出 BPMN XML 文件。 2. 部署流程:将 BPMN XML 文件部署到 Activiti 引擎,创建流程定义。 3. 启动流程:通过 API 或用户界面...

    Activiti7的开源项目,用于二次开发!

    - **流程可视化**:提供Web界面供用户设计和查看流程图,增强了用户体验。 - **任务管理**:提供任务分配、委托、完成等功能,支持多任务并发执行。 - **表单集成**:可与前端表单系统集成,实现业务数据的提交和...

    Activiti5 用户手册 中文版

    1. 管理台:Activiti 提供了一个Web管理界面,用于监控和管理流程实例,查看流程图,以及进行其他管理操作。 2. 日志与调试:通过日志系统,可以跟踪和分析流程运行情况,辅助定位和解决问题。 八、最佳实践与案例 ...

    Activiti7+视图工具

    这个资源包显然包含了Activiti7的项目实例以及一个用于绘制BPMN2.0流程图的工具,使得学习和使用Activiti7变得更加直观和便捷。 首先,我们要理解什么是Activiti7。Activiti7是Alfresco Software Inc.开发的一个轻...

    activiti6.0 中文api

    以上只是Activiti 6.0中文API的一部分核心概念,实际使用时,开发者还需要理解流程图的构造、数据库模型、事务管理、并发控制等细节。通过深入学习和实践,可以充分利用Activiti来构建高效、灵活的业务流程管理系统...

    activiti视频教程工作流实例(包括源码)-完成调整请假的处理

    它提供了丰富的符号集,如开始事件、结束事件、任务、网关和泳道等,使非技术人员也能理解流程图。Activiti支持BPMN 2.0,使得流程设计直观且易于理解。 3. **请假流程实例**: 这个教程可能涵盖了一个完整的请假...

Global site tag (gtag.js) - Google Analytics