2014-04-08 5 views
1

Если я планирую время начала процессов, используя события запуска таймера, как я могу запросить, какие процессы начнутся и когда?Как запросить запланированные процессы (события таймера)?

Кроме того, у меня есть тот же вопрос для промежуточного события таймера улавливания. Является ли движок camunda API (Java или REST) ​​запрашивать, какие таймеры работают и когда ожидается, что они истекут?

ответ

4

Вы можете получить следующее запланированное время выполнения ваших процессов, использующих таймер событий через Java и REST API, как в следующем:

Пример Java API:

import org.camunda.bpm.ProcessEngineService; 
import org.camunda.bpm.container.RuntimeContainerDelegate; 
import org.camunda.bpm.engine.ManagementService; 
import org.camunda.bpm.engine.ProcessEngine; 
import org.camunda.bpm.engine.RepositoryService; 
import org.camunda.bpm.engine.management.JobDefinition; 
import org.camunda.bpm.engine.repository.ProcessDefinition; 
import org.camunda.bpm.engine.runtime.Job; 

import java.util.HashMap; 
import java.util.List; 

public class StackOverflow { 

    public HashMap<ProcessDefinition, List<Job>> queryNextScheduledExecutionOfTimers() { 
    ProcessEngineService processEngineService = 
    RuntimeContainerDelegate.INSTANCE.get().getProcessEngineService(); 
    ProcessEngine defaultProcessEngine = processEngineService.getDefaultProcessEngine(); 

    // optional step - get all active process definitions 
    RepositoryService repositoryService = defaultProcessEngine.getRepositoryService(); 
    List<ProcessDefinition> processDefinitions = 
     repositoryService.createProcessDefinitionQuery().active().list(); 

    ManagementService managementService = defaultProcessEngine.getManagementService(); 

    HashMap<ProcessDefinition,List<Job>> timerJobsByProcessDefinition = new HashMap<ProcessDefinition, List<Job>>(); 
    for (ProcessDefinition processDefinition : processDefinitions) { 
     List<JobDefinition> jobDefinitions = 
      managementService.createJobDefinitionQuery() 
       .active() 
       .processDefinitionId(processDefinition.getId()) 
       .list(); 

     for (JobDefinition jobDefinition : jobDefinitions) { 
     // if you want to lookup the activity to highlight it inside the process diagram for example 
     String activityId = jobDefinition.getActivityId(); 
     // if you want to display the configured expression/date/cron expression when the timer should fire 
     String jobConfiguration = jobDefinition.getJobConfiguration(); 
     // if you want to distinguish between timer start event/catching timer intermediate event/boundary timer event 
     String timerType = jobDefinition.getJobType(); 

     List<Job> jobs = managementService.createJobQuery() 
      .active() 
      .timers() 
      .jobDefinitionId(jobDefinition.getId()) 
      .orderByJobDuedate() 
      .list(); 

     timerJobsByProcessDefinition.put(processDefinition, jobs); 
     } 
    } 

    return timerJobsByProcessDefinition; 
    } 
} 

Пример REST API :

http://localhost:8080/engine-rest/process-definition/ для извлечения определений процесса

для каждого запроса определения процесса определения заданий через http://localhost:8080/engine-rest/job-definition?active=true&processDefinitionId=${YOUR_PROCESS_DEFINITION_ID}

для каждого запроса определения обработки заданий через http://localhost:8080/engine-rest/job?active=true&timers=true&processDefinitionId=${YOUR_PROCESS_DEFINITION_ID}

, то вы должны соотнести полученные задания с конфигурациями рабочих мест с использованием jobConfigurationId.