Как да заявите планирани процеси (таймерни събития)?

Ако планирам началния час на процесите, като използвам събития за стартиране на таймера, как мога да попитам кои процеси ще стартират и кога?

Освен това имам същия въпрос за междинното събитие на таймера за улавяне. Двигателят camunda предоставя ли API (Java или REST) ​​за запитване кои таймери работят и кога се очаква да изтекат?


person mschoe    schedule 08.04.2014    source източник


Отговори (1)


Можете да извлечете следващите планирани часове за изпълнение на вашите процеси, които използват събития на таймера, чрез 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.

person Hawky4s    schedule 08.04.2014