public InputStream getProcessImage(String deploymentId) {
List names = repositoryService.getDeploymentResourceNames(deploymentId);
String pngName = names.stream().filter(n -> n.endsWith(".png")).findFirst().orElse(null);
if (pngName == null) return null;
return repositoryService.getResourceAsStream(deploymentId, pngName);
}
public InputStream getLatestProcessImage(String processDefinitionKey) {
ProcessDefinition pd = repositoryService.createProcessDefinitionQuery()
.processDefinitionKey(processDefinitionKey)
.latestVersion()
.singleResult();
if (pd == null) return null;
return repositoryService.getResourceAsStream(pd.getDeploymentId(), pd.getDiagramResourceName());
}
在 `ProcessEngineConfiguration` 中設定:
或 Java Config:
ProcessEngineConfiguration cfg = ...;
cfg.setCreateDiagramOnDeploy(false);
適用場景:BPMN XML 極複雜導致生成圖片超時/失敗、自行使用外部工具 (如 bpmn.io) 生成高質量圖片並手動部署。
public Map getCurrentActivityCoordinates(String taskId) {
// 1. 任務 -> 流程實例 -> 當前活動 ID
Task task = taskService.createTaskQuery().taskId(taskId).singleResult();
ProcessInstance pi = runtimeService.createProcessInstanceQuery()
.processInstanceId(task.getProcessInstanceId()).singleResult();
String activityId = pi.getActivityId();
// 2. 解析流程定義模型取得座標
ProcessDefinitionEntity pde = (ProcessDefinitionEntity) repositoryService.getProcessDefinition(task.getProcessDefinitionId());
ActivityImpl activity = pde.findActivity(activityId);
Map coords = new HashMap<>();
coords.put("x", activity.getX());
coords.put("y", activity.getY());
coords.put("width", activity.getWidth());
coords.put("height", activity.getHeight());
return coords;
}
// 後端返回 {deploymentId, imageName, x, y, width, height}
// 前端