Activiti 가 어떻게 프로 세 스 맵 을 동적 으로 가 져 오 는 지 상세 하 게 설명 합 니 다.

본 논문 에서 사용 하 는 activiti 버 전 은 5.2.0 이다.
1.제도 원리
activiti 에 서 는 프로 세 스 그림 을 그 릴 수 있 는 클래스 Default ProcessDiagramGenerator 를 제공 합 니 다.이 종 류 는 5.2.0 이상 버 전에 있 습 니 다.
단독 jar 패키지 로 제공 되 므 로 의존 도 를 도입 해 야 합 니 다.

<dependency>
  <groupId>org.activiti</groupId>
  <artifactId>activiti-image-generator</artifactId>
  <version>5.22.0</version>
</dependency>
사용 할 때 이 종류의 대상 을 먼저 만 들 고,

//    5.22.0        
DefaultProcessDiagramGenerator diagramGenerator=new DefaultProcessDiagramGenerator();
그리고 그림 그리 기 방법 을 사용 합 니 다.diagramGenerator.generateDiagram(bpmnModel, imageType, highLightedActivities);그 중의 몇 가지 인자:
bpmnModel:현재 프로 세 스에 대응 하 는 프로 세 스 모델 은 reposcory Service.getBpmnModel(processDefinitionId)을 통 해 얻 을 수 있 습 니 다.
image Type:그림 종류,jpg,png 등
하 이 라이트 Activities:하 이 라이트 가 필요 한 노드 의 id
2.절차 에 따라 id 그림 그리 기
프로 세 스 정의 표 actre_procdef 의 메 인 키 id 그림 을 그 릴 수 있 습 니 다.이 때 는 절차 가 없 을 수 있 습 니 다.절차 그림 이 성공 적 으로 배치 되면 act 가 발생 합 니 다.re_procdef 표 의 기록.그래서 노드 의 하 이 라이트 문제 도 존재 하지 않 습 니 다.이 그림 은 절차 인 스 턴 스 와 무관 하기 때 문 입 니 다.

  @Test
  public void test1() throws Exception {
    
    //      id   BpmnModel  
    String processDefinitionId="process:2:4304";
    BpmnModel bpmnModel = repositoryService.getBpmnModel(processDefinitionId);
    //    5.22.0        
    DefaultProcessDiagramGenerator diagramGenerator=new DefaultProcessDiagramGenerator();
    //  bpmnModel         
    InputStream inputStream = diagramGenerator.generateDiagram(bpmnModel, "png", new ArrayList<String>());
    FileOutputStream output=new FileOutputStream(new File("d:/test.png"));
    IOUtils.copy(inputStream, output);
    System.out.println("    ");
  }
generateDiagram()방법의 세 번 째 매개 변 수 는 빈 list 를 전 달 했 습 니 다.이 list 는 하 이 라이트 로 표시 할 노드 의 id 집합 을 표시 합 니 다.즉,프로 세 스 맵 의 모든 작업 id 입 니 다.
3.절차 인 스 턴 스 id 에 따라 그림 그리 기
3.1 기본 원리
프로 세 스 DefinitionId 에 따라 그림 을 그 렸 습 니 다.processInstanceId 에 따라 그림 을 그 릴 때,사실은 processInstanceId 에 따라 해당 하 는 프로 세 스 인 스 턴 스 대상 ProcessInstance 를 조회 합 니 다.
그리고 프로 세 스 실례 대상 을 통 해 프로 세 스 DefinitionId 를 가 져 옵 니 다.그 중의 get 방법 을 사용 하여 프로 세 스 Instance.getProcessDefinitionId()
하 이 라이트 디 스 플레이 가 필요 한 노드 의 id:현재 노드+지나 간 노드 를 얻 을 수 있 습 니 다.
3.2 현재 노드 의 획득
runtime Service 서비스 구성 요 소 를 가 져 오 는 방법

String executionId=processInstance.getId();
List<String> activeActivityIds = runtimeService.getActiveActivityIds(executionId);
activeActivity Ids 라 는 list 는 현재 노드 의 id 집합 입 니 다.병렬 프로 세 스 라면 여러 개가 있 고 다른 경 우 는 하나 입 니 다.
3.3 지나 간 노드 의 획득
지나 간 노드 는 activiti 의 역사 행동 표 acthi_actist 에서 가 져 옵 니 다.프로 세 스 의 행위 데 이 터 는 이 표 에 기록 되 어 있 으 며,프로 세 스 가 한 노드 에 이 르 렀 을 때,이 표 에는 프로 세 스 노드 의 정보 가 기록 되 어 있 으 며,노드 id,명칭 등 을 포함한다.그 중 에 ACT 가 있어 요.ID_프로 세 스 맵 에 대응 하 는 노드 의 id 를 대표 합 니 다.

하 이 라이트 가 필요 한 노드 id
그래서 우리 가 해 야 할 일 은 이 표 에서 이 데 이 터 를 조회 하 는 것 이다.activiti 는 이 표를 조회 하 는 api 를 제 공 했 습 니 다.history Service 라 는 서비스 구성 요 소 를 통 해 가 져 올 수 있 습 니 다.

//          id  
    HistoricActivityInstanceQuery historicActivityInstanceQuery = historyService.createHistoricActivityInstanceQuery();
    List<HistoricActivityInstance> historicActivityInstanceList = historicActivityInstanceQuery.processInstanceId(processInstanceId).list();
    for(HistoricActivityInstance hi:historicActivityInstanceList) {
      String taskKey=hi.getActivityId();
      activeActivityIds.add(taskKey);
    }
이상 코드 는 먼저 ACT 를 조회 합 니 다.ID_,하 이 라이트 가 필요 한 집합 activeActivity Ids 에 추가 합 니 다.
3.4 그림 그리 기

DefaultProcessDiagramGenerator defaultProcessDiagramGenerator=new DefaultProcessDiagramGenerator();
//         
InputStream inputStream = defaultProcessDiagramGenerator.generateDiagram(bpmnModel, "png", activeActivityIds);
//         
IOUtils.copy(inputStream, new FileOutputStream(new File("d:/test2.png")));
System.out.println("    ");
이렇게 그 려 진 프로 세 스 그림 에 지나 간 노드 가 하 이 라이트 로 표 시 됩 니 다.
총화
프로 세 스 그림 을 그 리 는 원 리 는 Default ProcessDiagramGenerator 클래스 의 방법 을 사용 하 는 것 입 니 다.
이 종 류 는 단독 jar 에서 제공 되 며,새로운 의존 도 를 추가 해 야 합 니 다.
일부 노드 를 강조 하려 면 그림 그리 기 방법 에 노드 id 의 집합 을 전달 합 니 다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기