弄两条了 还没弄出来 跪求帮忙啊 <?xml version="1.0" encoding="UTF-8" ?> 
- <definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:activiti="http://activiti.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.activiti.org/test">
- <process id="ProjectApplicationProcess" name="ProjectApplicationProcess">
  <startEvent id="startevent1" name="Start" /> 
- <userTask id="usertask1" name="项目申请" activiti:candidateGroups="项目经理">
- <extensionElements>
  <activiti:taskListener event="create" class="com.zds.common.activitiListener.TaskCreateListener" /> 
  <activiti:taskListener event="complete" class="com.zds.common.activitiListener.TaskCompleteListener" /> 
  </extensionElements>
  </userTask>
- <userTask id="usertask2" name="项目审核" activiti:candidateGroups="部门经理">
- <extensionElements>
  <activiti:taskListener event="create" class="com.zds.common.activitiListener.DMTaskCreateListener" /> 
  <activiti:taskListener event="complete" class="com.zds.common.activitiListener.TaskCompleteListener" /> 
  </extensionElements>
  </userTask>
这个是 XML 的一部分  public class TaskCreateListener implements TaskListener{ public void notify(DelegateTask task) {
ServletContext sc = ServletActionContext.getServletContext();
ApplicationContext ac = WebApplicationContextUtils.getRequiredWebApplicationContext(sc);
ProstatusService prostatusService = (ProstatusService)ac.getBean("prostatusService");
ProcessEngineConfiguration pe = (ProcessEngineConfiguration)ac.getBean("processEngineConfiguration");
ProcessEngine processEngine = pe.buildProcessEngine();
RepositoryService repositoryService = processEngine.getRepositoryService();
RuntimeService runtimeService = processEngine.getRuntimeService();

ProcessDefinitionEntity def = (ProcessDefinitionEntity) ((RepositoryServiceImpl)repositoryService).getDeployedProcessDefinition(task.getProcessDefinitionId());
List<ActivityImpl> activitiList = def.getActivities();
List<PvmActivity> nextActivities = new LinkedList<PvmActivity>();

ExecutionEntity execution =((TaskEntity) task).getExecution();

String activitiId = execution.getActivityId();

///--------------------
System.out.println("----------------------------------------------------");
System.out.println(task.getExecutionId());
System.out.println(task.getId());
System.out.println(task.getOwner());
System.out.println(task.getProcessDefinitionId());
System.out.println(task.getProcessInstanceId());
System.out.println(task.getTaskDefinitionKey());


System.out.println("组 = "+processEngine.getTaskService().createTaskQuery().taskCandidateGroup("项目经理").list());
System.out.println("组 = "+processEngine.getTaskService().createTaskQuery().taskCandidateGroup("部门经理").list());
System.out.println("组 = "+processEngine.getTaskService().createTaskQuery().taskCandidateGroup("分管副总").list());
System.out.println("组 = "+processEngine.getTaskService().createTaskQuery().taskCandidateGroup("风控委员会").list());


if("usertask1".equals(activitiId)){
System.out.println(" 有项目 等待处理");
}

for(ActivityImpl activityImpl:activitiList){
String id = activityImpl.getId();
//获取当前的activity
if(activitiId.equals(id)){
System.out.println("当前任务:"+activityImpl.getProperty("name"));

List<PvmTransition> outTransitions = activityImpl.getOutgoingTransitions();
for(PvmTransition tr:outTransitions){
nextActivities.add(tr.getDestination());
}
break;
}
}


if(nextActivities!=null && nextActivities.size()>0){
StringBuffer nextTask = new StringBuffer();
for(PvmActivity pvmActivity:nextActivities){
nextTask.append(","+pvmActivity.getProperty("name"));
}
nextTask = nextTask.deleteCharAt(0);
Prostatus prostatus = new Prostatus();
prostatus.setProcessIns(task.getProcessInstanceId());
prostatus.setCurrentTask(task.getName());
prostatus.setNextTask(nextTask.toString());
prostatusService.save(prostatus);
}

}
这个是 流程监听器。   怎么获取 当期流程的 下一个目标是谁啊  比如说 我现在是 在项目申请阶段。由项目经理来处理
我提交后会提交给谁 在配置文件里面 已经有明确的流程目标- <sequenceFlow id="flow1" name="" sourceRef="startevent1" targetRef="usertask1">
- <extensionElements>
  <activiti:executionListener event="take" class="com.zds.common.activitiListener.StartProcessListener" /> 
  </extensionElements>
  </sequenceFlow>
  <sequenceFlow id="flow2" name="" sourceRef="usertask1" targetRef="usertask2" /> 
  <sequenceFlow id="flow3" name="" sourceRef="usertask2" targetRef="exclusivegateway1" /> 
- <sequenceFlow id="flow4" name="" sourceRef="exclusivegateway1" targetRef="usertask3">
- <conditionExpression xsi:type="tFormalExpression">
- <![CDATA[ 
  ${"1".equals(ispass)}
    
     ]]> 
  </conditionExpression>
  </sequenceFlow>
- <sequenceFlow id="flow5" name="" sourceRef="exclusivegateway1" targetRef="endevent1">
- <extensionElements>
  <activiti:executionListener event="take" class="com.zds.common.activitiListener.EndProcessListener" /> 
  </extensionElements>
- <conditionExpression xsi:type="tFormalExpression">
- <![CDATA[ 
  ${"0".equals(ispass)}
    
     ]]> 
  </conditionExpression>
  </sequenceFlow>我想在监听器里面获取 当期流程 的下一个目标是谁 该怎么获取。。

解决方案 »

  1.   

    没接触过Activiti 都是jbpm祝楼主好运
      

  2.   


    我嘿无语 。。   
    谁 会弄 Activiti 基于流程 的 这个 东东啊  帮帮忙啊
      

  3.   

    ProcessDefinitionEntity def = (ProcessDefinitionEntity) ((RepositoryServiceImpl)repositoryService).getDeployedProcessDefinition(task.getProcessDefinitionId());
    //根据流程定义获得所有的节点:
    List<ActivityImpl> activitiList = def.getActivities();
    List<PvmTransition> outTransitions = activityImpl.getOutgoingTransitions(); for(ActivityImpl activityImpl:activitiList){
    String id = activityImpl.getId();
    if(activitiId.equals(id)){
    System.out.println("当前执行的任务:"+activityImpl.getProperty("name")); 
    //ActivityBehavior behavior=activityImpl.getActivityBehavior();
    //获取从某个节点出来的所有子节点
    List<PvmTransition> outTransitions = activityImpl.getOutgoingTransitions();
    for(PvmTransition tr:outTransitions){
    //获取线路的终点节点
    PvmActivity ac = tr.getDestination(); 
    System.out.println(map);
    System.out.println("下一步任务任务:"+ac.getProperty("name"));
    }
    break;
    }
    }
      

  4.   


    我上面已经写出来了 这个是获取 下一个流程的节点。。 获取到得是 name="项目审核"我所要的是 获取当前流程提交的目标。     我想要这个  candidateGroups="部门经理"  
    就是 当前流程提交后 会提交到谁的手里面去  而不是下一个节点所要做的事情  
      

  5.   

    很想弄xml流程的,没上手,自己编了一个引擎,不过,看兄弟入门了,顶一下!
      

  6.   


    for(ActivityImpl activityImpl:activitiList){
    String id = activityImpl.getId();
    if(activitiId.equals(id)){
    //输出某个节点的某种属性
    //System.out.println("当前任务:"+activityImpl.getProperty("name")); 
    //ActivityBehavior behavior=activityImpl.getActivityBehavior();
    UserTaskActivityBehavior behavior2=(UserTaskActivityBehavior)activityImpl.getActivityBehavior();
    //System.out.println(behavior2.getTaskDefinition());
    TaskDefinition taskDefinition=behavior2.getTaskDefinition();
    if(taskDefinition!=null) {
    Set<Expression> set=taskDefinition.getCandidateGroupIdExpressions();
    for (Expression expression : set) {
    roleName=expression.getExpressionText();
    }
    break;
    }
    }
    }
      

  7.   

    这里区下一步任务的话,只考虑了一种情况
    for (Expression expression : set) {
    roleName=expression.getExpressionText();
    }
    break;
    }
      

  8.   

    获取下一个目标的话,其实你可以在任务完成之后 重新取一遍,
    Task task1=taskService.createTaskQuery().processInstanceId(processInstance.getId()).singleResult();

    得到的就是下一步目标;
    不知道有没有理解错你的意思;