Activiti 프로세스 맵 보기 인스턴스

4975 단어 Activiti흐름도
본고는 Activiti 흐름도 보기의 실현 방법을 실례로 보여주고 구체적인 절차는 다음과 같다.
1. 테스트 용례 보기 그림 코드는 다음과 같습니다.

public void viewImage() throws Exception {
 //  
 RepositoryService repositoryService = processEngine.getRepositoryService();
 //  
 String deploymentId = "701";
 List<String> names = repositoryService.getDeploymentResourceNames(deploymentId);
 String imageName = null;
 for (String name : names) {
  if(name.indexOf(".png")>=0){
  imageName = name;
  }
 }
 if(imageName!=null){
//   System.out.println(imageName);
  File f = new File("e:/"+ imageName);
  //  ID 
  InputStream in = repositoryService.getResourceAsStream(deploymentId, imageName);
  FileUtils.copyInputStreamToFile(in, f);
 }

설명:
1) deploymentId의 프로세스 배포 ID
2) resourceName이(가) act_ge_bytearray 테이블에서 NAME_열의 값
3) repository Service의 getDeployment ResourceNames 방법을 사용하면 배치된 모든 파일의 이름을 지정할 수 있습니다
4) repository Service의 getResourceAsStream 방법으로 배치 ID와 파일 이름을 전송하면 배치된 이름 파일의 입력 흐름을 얻을 수 있습니다
5) 마지막 IO 흐름에 대한 작업, FileUtils 도구의copyInputStreamToFile 방법으로 프로세스에서 파일로의 복사 완료
2. 웹 프로젝트에서 프로세스 정의 페이지에서 그림을 보기:

public String viewImage(){
InputStream in = repositoryService.getResourceAsStream.getImageStream(deploymentId,imageName);// service 
HttpServletResponse resp = ServletActionContext.getResponse();
try {
  OutputStream out = resp.getOutputStream();
  //  resp 
  byte[] b = new byte[1024];
  for (int len = -1; (len= in.read(b))!=-1; ) {
 out.write(b, 0, len);
  }
  //  
  out.close();
  in.close();
} catch (IOException e) {
  e.printStackTrace();
}
return null;
}

설명:
1) deploymentId는 프로세스 배포 ID이고 imageName은 그림 이름입니다.
2) 프로세스 정의 목록 페이지에서 그림을 보기 때문에 id와 imageName은 프로세스 정의 (ProcessDefinition) 에서 얻을 수 있습니다 (String getDeploymentId ().및 String getDiagram ResourceName();)
3) 웹 페이지 레이블흐름도 보기
3. 웹 프로젝트 현재 흐름도 보기

public String viewCurrentImage(){
ProcessDefinition pd = service.getProcessDefinitionByTaskId(taskId);
// 1.  ID
putContext("deploymentId", pd.getDeploymentId());
// 2.  
putContext("imageName", pd.getDiagramResourceName());

// 3. 
Map<String,Object> currentActivityCoordinates =service.getCurrentActivityCoordinates(taskId);
putContext("acs", currentActivityCoordinates);
return "image";
}

그중의 서비스.getProcessDefinitionByTaskId(taskId);의 코드 구현:

public ProcessDefinition getProcessDefinitionByTaskId(String taskId) {
// 1.  task
Task task = taskService.createTaskQuery().taskId(taskId).singleResult();
// 2.  task pdid 
ProcessDefinition pd = repositoryService.getProcessDefinition(task.getProcessDefinitionId());
return pd;
}

그중의 서비스.getCurrentActivityCoordinates(taskId);의 코드 구현:

public Map<String, Object> getCurrentActivityCoordinates(String taskId) {
Map<String, Object> coordinates = new HashMap<String, Object>();
// 1.  ID
Task task = taskService.createTaskQuery().taskId(taskId).singleResult();
ProcessInstance pi = runtimeService.createProcessInstanceQuery().processInstanceId(task.getProcessInstanceId()).singleResult();
String currentActivitiId = pi.getActivityId();
// 2.  
ProcessDefinitionEntity pd = (ProcessDefinitionEntity) repositoryService.getProcessDefinition(task.getProcessDefinitionId());
// 3.  currentActivitiId 
ActivityImpl activity = pd.findActivity(currentActivitiId);
// 4.  
coordinates.put("x", activity.getX());
coordinates.put("y", activity.getY());
coordinates.put("width", activity.getWidth());
coordinates.put("height", activity.getHeight());
return coordinates;
}

이미지 페이지 섹션:
개인 작업 목록 페이지에서 를 클릭하여 현재 흐름도 보기 다음 페이지로 이동합니다.

<body>
<!-- 1.   strust2 -->
<img style="position: absolute;top: 0px;left: 0px;" src="viewImage?deploymentId=<s:property value='#deploymentId'/>&imageName=<s:property value='#imageName'/>">

<!-- 2. , DIV -->
<div style="position: absolute;border:1px solid red;top:<s:property value='#acs.y'/>px;left: <s:property value='#acs.x'/>px;width: <s:property value='#acs.width'/>px;height:<s:property value='#acs.height'/>px;  "></div>
</body>

좋은 웹페이지 즐겨찾기