螺竹编程
发布于 2024-08-05 / 11 阅读
0

Camunda中的Service API

RepositoryService

  • 用于管理部署的流程和决策定义。

  • 例如,可以通过RepositoryService​部署新的流程定义、查询已部署的流程定义等。

  • 示例:

    RepositoryService repositoryService = processEngine.getRepositoryService();
    Deployment deployment = repositoryService.createDeployment()
                                   .addClasspathResource("my-process.bpmn")
                                   .deploy();
    

RuntimeService

  • 用于管理流程实例的执行。

  • 可以用于启动新的流程实例、查询运行中的流程实例、操作流程变量等。

  • 示例:

    RuntimeService runtimeService = processEngine.getRuntimeService();
    ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("my-process");
    Map<String, Object> variables = new HashMap<>();
    variables.put("myVariable", "Hello, Camunda!");
    runtimeService.setVariables(processInstance.getId(), variables);
    

下面是一些常见的 RuntimeService 的使用示例:

启动新的流程实例

RuntimeService runtimeService = processEngine.getRuntimeService();
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("my-process");

设置流程变量

Map<String, Object> variables = new HashMap<>();
variables.put("myVariable", "Hello, Camunda!");
runtimeService.setVariables(processInstance.getId(), variables);

查询正在运行的流程实例

List<ProcessInstance> runningInstances = runtimeService.createProcessInstanceQuery()
                                        .processDefinitionKey("my-process")
                                        .active()
                                        .list();

中断流程实例

runtimeService.deleteProcessInstance(processInstance.getId(), "Cancelled by user");

触发手动任务

runtimeService.triggerSubProcessInstance(taskExecution.getId());

获取子流程实例

List<ProcessInstance> subProcessInstances = runtimeService.createProcessInstanceQuery()
                                            .superProcessInstanceId(processInstance.getId())
                                            .list();

这些只是 RuntimeService 提供的部分功能,实际上它还有更多的方法可以用于管理流程实例的各个方面。开发者可以根据具体需求灵活地使用 RuntimeService 提供的API。

TaskService

  • 用于管理用户任务的生命周期。

  • 可以用于分配任务、获取待办任务列表、完成任务等。

  • 示例:

    TaskService taskService = processEngine.getTaskService();
    Task task = taskService.createTaskQuery().processInstanceId(processInstance.getId()).singleResult();
    taskService.claim(task.getId(), "user");
    taskService.complete(task.getId());
    

IdentityService

  • 用于管理流程引擎中的用户和组。

  • 可以用于创建/删除用户和组、查询用户和组信息等。

  • 示例:

    IdentityService identityService = processEngine.getIdentityService();
    User user = identityService.newUser("johndoe");
    user.setFirstName("John");
    user.setLastName("Doe");
    identityService.saveUser(user);
    

FormService

  • 用于管理流程中的表单。

  • 可以用于获取表单数据、渲染表单等。

  • 示例:

    FormService formService = processEngine.getFormService();
    Map<String, Object> formData = formService.getRenderedTaskForm(task.getId());
    

HistoryService

  • 用于访问已完成流程实例的历史数据。

  • 可以用于查询已完成的流程实例、任务、变量等信息。

  • 示例:

    HistoryService historyService = processEngine.getHistoryService();
    HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery()
                                                       .processInstanceId(processInstance.getId())
                                                       .singleResult();
    

ManagementService

  • 用于管理 Camunda 流程引擎内部的操作和维护。

  • 可以用于查询引擎的统计信息、执行数据库操作等。

  • 示例:

    ManagementService managementService = processEngine.getManagementService();
    List<TableMetaData> tableMetaDatas = managementService.getTableCount();
    for (TableMetaData tableMetaData : tableMetaDatas) {
        System.out.println(tableMetaData.getTableName() + ": " + tableMetaData.getCount());
    }
    

FilterService

  • 用于管理自定义的任务过滤器。

  • 可以用于创建、更新和删除任务过滤器,以及查询过滤器列表。

  • 示例:

    FilterService filterService = processEngine.getFilterService();
    Filter filter = filterService.newTaskFilter("My Tasks")
                    .setOwner("jonhdoe")
                    .setSharable(true)
                    .save();
    

ExternalTaskService

  • 用于管理外部任务的生命周期。

  • 外部任务是指流程引擎将某些任务外包给外部服务执行的机制。

  • 可以用于获取待处理的外部任务、完成外部任务等。

  • 示例:

    ExternalTaskService externalTaskService = processEngine.getExternalTaskService();
    List<LockedExternalTask> tasks = externalTaskService.fetchAndLock(1, "workerId")
                                       .topic("my-topic", 10000)
                                       .execute();
    for (LockedExternalTask task : tasks) {
        // 处理外部任务
        externalTaskService.complete(task.getId(), "workerId");
    }
    

CaseService

  • 用于管理 Camunda 中的案例管理(Case Management)功能。

  • 可以用于启动新的案例实例、获取案例任务、更新案例数据等。

  • 示例:

    CaseService caseService = processEngine.getCaseService();
    CaseInstance caseInstance = caseService.createCaseInstanceByKey("my-case-definition");
    CaseExecution caseTask = caseService.createCaseExecutionQuery()
                            .caseInstanceId(caseInstance.getId())
                            .activityId("my-case-task")
                            .singleResult();
    caseService.manuallyStartCaseExecution(caseTask.getId());
    

DecisionService

  • 用于管理 Camunda 中的决策表(Decision Table)功能。

  • 可以用于评估决策表、获取决策结果等。

  • 示例:

    DecisionService decisionService = processEngine.getDecisionService();
    Map<String, Object> variables = new HashMap<>();
    variables.put("age", 30);
    variables.put("risk-level", "high");
    DecisionResult decisionResult = decisionService.evaluateDecisionTableByKey("my-decision-table", variables);
    System.out.println("Decision result: " + decisionResult.getSingleResult());