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());