六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 48|回复: 0

jbpm4的流程监控程序[2] 获得流程实例的相关节点信息

[复制链接]

升级  31.33%

23

主题

23

主题

23

主题

秀才

Rank: 2

积分
97
 楼主| 发表于 2013-1-28 19:21:52 | 显示全部楼层 |阅读模式
jbpm4的流程监控程序[2] 获得流程实例的相关节点信息

<<jbpm4的流程监控程序[3] 流程图监控展示,基于mootools>>

其实实现流程监控并不难,因为在jbpm4已经可以得到流程图和节点的坐标信息了.

在这个jbpm4的监控程序中,比较难的是对于流程已经结束的不太好获得相关的信息,试了好多方法才实现.
/** * CopyRight (C) 2006-2009 yy * @author yy * @project jbpm * @version 1.0 * @mail yy629_86 at 163 dot com * @date 2009-9-22 上午10:39:01 * @description  */package sofocus.bpm.jbpm.model;import java.util.List;import org.jbpm.api.history.HistoryActivityInstance;import org.jbpm.api.model.ActivityCoordinates;/** * 流程实例的节点信息,包括的活动结点和处理过的节点信息 * @author yeyong */public class ProcessInstaticeActivityInfo {  private List<ActivityInfo> activeActivityInfos; // 处于活动的节点信息  private List<ActivityInfo> processedActivityInfos; // 已经处理过的节点信息  /**   * @param activeActivityInfos   * @param processedActivityInfos   */  public ProcessInstaticeActivityInfo(List<ActivityInfo> activeActivityInfos,      List<ActivityInfo> processedActivityInfos) {    this.activeActivityInfos = activeActivityInfos;    this.processedActivityInfos = processedActivityInfos;  }  public static class ActivityInfo {    private ActivityCoordinates coordinates;    private HistoryActivityInstance activityInstance;    /**     * @param coordinates     */    public ActivityInfo(ActivityCoordinates coordinates) {      this.coordinates = coordinates;    }    /**     * @param coordinates     * @param activityInstance     */    public ActivityInfo(ActivityCoordinates coordinates, HistoryActivityInstance activityInstance) {      this.coordinates = coordinates;      this.activityInstance = activityInstance;    }    /**     * @return the coordinates     */    public ActivityCoordinates getCoordinates() {      return coordinates;    }    /**     * @param coordinates     *          the coordinates to set     */    public void setCoordinates(ActivityCoordinates coordinates) {      this.coordinates = coordinates;    }    /**     * @return the activityInstance     */    public HistoryActivityInstance getActivityInstance() {      return activityInstance;    }    /**     * @param activityInstance     *          the activityInstance to set     */    public void setActivityInstance(HistoryActivityInstance activityInstance) {      this.activityInstance = activityInstance;    }  }  /**   * @return the activeActivityInfos   */  public List<ActivityInfo> getActiveActivityInfos() {    return activeActivityInfos;  }  /**   * @return the processedActivityInfos   */  public List<ActivityInfo> getProcessedActivityInfos() {    return processedActivityInfos;  }}

/** * CopyRight (C) 2006-2009 yy * @author yy * @project jbpm * @version 1.0 * @mail yy629_86 at 163 dot com * @date 2009-9-5 下午04:43:09 * @description */package sofocus.bpm.jbpm.support;import java.io.InputStream;import java.util.*;import java.util.zip.ZipInputStream;import javax.sql.DataSource;import org.hibernate.Session;import org.jbpm.api.*;import org.jbpm.api.history.*;import org.jbpm.api.job.Job;import org.jbpm.api.model.ActivityCoordinates;import org.jbpm.api.task.Task;import org.jbpm.pvm.internal.env.Environment;import org.jbpm.pvm.internal.env.EnvironmentFactory;import org.jbpm.pvm.internal.history.model.HistoryProcessInstanceImpl;import org.jbpm.pvm.internal.history.model.HistoryTaskInstanceImpl;import org.jbpm.pvm.internal.model.ExecutionImpl;import org.jbpm.pvm.internal.model.ProcessDefinitionImpl;import org.jbpm.pvm.internal.model.Transition;import org.jbpm.pvm.internal.svc.TaskServiceImpl;import sofocus.bpm.jbpm.model.PageInfo;import sofocus.bpm.jbpm.model.ProcessInstaticeActivityInfo;import sofocus.bpm.jbpm.model.ProcessInstaticeActivityInfo.ActivityInfo;import sofocus.bpm.jbpm.service.PagingQueryService;/** * jbpm template *  * @author yeyong */public class JbpmTemplate {  public static String PROCESS_IMAGE = ".png";  public static String PROCESS_DEFINITION_XML = ".jpdl.xml";  protected ProcessEngine processEngine;  protected RepositoryService repositoryService;  protected ExecutionService executionService;  protected ManagementService managementService;  protected TaskService taskService;  protected HistoryService historyService;  protected IdentityService identityService;  protected PagingQueryService pagingQueryService;    // ......     /**   * 获得指定流程实例id的相关的资源   *    * @param processInstanceId   * @param resourceName   * @return   */  public InputStream getResourceFromProcessInstance(String processInstanceId, String resourceName) {    ProcessDefinition pd = getProcessDefinitionByProcessInstanceId(processInstanceId);    if (pd != null) {      if (PROCESS_DEFINITION_XML.equals(resourceName)) {        resourceName = pd.getName() + resourceName;      } else if (PROCESS_IMAGE.equals(resourceName)) {        resourceName = pd.getImageResourceName();      }      return repositoryService.getResourceAsStream(pd.getDeploymentId(), resourceName);    } else {      return null;    }  }    /**   * 获得指定流程id的流程相关的坐标信息   *    * @param processInstanceId   * @return   */  public ProcessInstaticeActivityInfo getActivityCoordinatesInfo(String processInstanceId) {    ProcessDefinitionImpl processDefinition = (ProcessDefinitionImpl) this        .getProcessDefinitionByProcessInstanceId(processInstanceId);    String pdId = processDefinition.getId();    List<ActivityInfo> activeCoordinates = new ArrayList<ActivityInfo>(); // 处于活动状态的节点    List<ActivityInfo> coordinateList = new ArrayList<ActivityInfo>(); // 已经流过的节点    {      ActivityInfo activityInfo = new ActivityInfo(processDefinition.getInitial().getCoordinates());      coordinateList.add(activityInfo);      List<HistoryActivityInstance> activities = historyService.createHistoryActivityInstanceQuery()          .executionId(processInstanceId).list();      for (HistoryActivityInstance activity : activities) {        String activityName = activity.getActivityName();        activityInfo = new ActivityInfo(repositoryService.getActivityCoordinates(pdId, activityName));        activityInfo.setActivityInstance(activity);        coordinateList.add(activityInfo);      }    }    HistoryProcessInstance hpi = getHistoryProcessInstancByProcessInstanceId(processInstanceId);    String endActivityName = ((HistoryProcessInstanceImpl) hpi).getEndActivityName();    if (endActivityName != null) { // 流程实例已经结束了      ActivityCoordinates coordinates = repositoryService.getActivityCoordinates(pdId, endActivityName);      activeCoordinates.add(new ActivityInfo(coordinates)); //这里把结束节点也作为处于活动状态的节点    } else { // 流程实例未结束      Set<String> activityNames = executionService.findExecutionById(processInstanceId)          .findActiveActivityNames();      for (String activityName : activityNames) {        ActivityCoordinates coordinates = repositoryService.getActivityCoordinates(pdId, activityName);        activeCoordinates.add(new ActivityInfo(coordinates));      }    }    return new ProcessInstaticeActivityInfo(activeCoordinates, coordinateList);  }}
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表