jBPM4.4: 임무를 분배하는 몇 가지 방식은 집행 기간에 임무 집행자를 동태적으로 분배한다.

4394 단어 작업jbpm
jBPM에서 작업을 할당하는 방법은 다음과 같습니다.
할당된 객체는 다음과 같습니다.
  • 일부 사용자에게 할당
  • 또는 사용자 그룹에 할당됩니다.

  •  
    다음과 같이 할당할 수 있습니다.
  • 프로세스 설계 시 사용자/사용자 그룹을 직접 지정합니다.
  • 프로세스 디자인을 할 때 assignee 방식으로 사용자에게 직접 분배할 수 있다
  • 특정 사용자/사용자 그룹에 명확하게 분배: 이렇게 직접 이 사용자에게 업무를 분배합니다. 여기는 사용자만 할 수 있습니다
  • 환경 변수에서 작업 환경 변수order 대상의saler 속성 값을 직접 대표하는 사용자
  • 프로세스 설계를 할 때 한 무리의 사용자에게 candidate-users
  • 프로세스 설계를 할 때 한 무리의 사용자 그룹인 candidate-groups
  • 상기 2가지 방식: candidate-users, candidate-groups의 방식으로 임무를 받은 사람이 먼저 임무를 받아야 처리할 수 있다. 접수 방식:task 서비스.takeTask

  • 프로그램이 실행될 때 동적 확정: 이것은 프로세스의 xml에도 설정이 필요합니다. 도대체 어느 프로그램이 정해야 하는지.Task 노드에서 작업 분배기를 설정해야 합니다: 이class는 AssignmentHandler를 계승하는 클래스입니다. 단 하나의 방법만 있습니다:void assign (Assignable assignable, OpenExecution execution) throws Exception.Assignable는 임무와 수영 코스의 일반적인 인터페이스입니다.따라서 임무 분배 프로세서는 임무에 사용할 수도 있고 수영로에서 assignable에 사용할 수도 있다. 상기 3가지 임무 수행 사용자를 추가하는 방법:assignee,candidate-users,candidate-groups,
  • 그리고 수영로(swimlane)에 따라 사용자를 분배합니다.
     
    절차가 확정된 상황에서 때때로 한 단계를 완성하는 인원이 확정되지 않고 임무가 발표될 때 지도자가 완성에 참여하는 인원을 확정한다.
     
    이러한 상황을 완성하기 위해 이 단계에 이르렀다. 동적 생성을 설정하여subTask를 만들고subTask를 통해 모든 사람에게 파견 작업을 할 수 있다.
     
    사실 jBPM 4도 통과할 수 있어요.4의foreach 방식으로 완성(주의: 이 기능은 아직 부화기에 있다).
     
    예를 들어 하나의 심사 업무를 완성하려면 어떤 업무는 2명이 완성해야 하고 어떤 업무는 3명이 완성해야 한다. 절차를 시작할 때 절차를 생성하는 인원이 해당하는 직원을 지정한다.
     
    jBPM 4.4 개발 가이드의 예는 다음과 같습니다.
    <process name="ForEach" xmlns="http://jbpm.org/4.4/jpdl">
    
       <start g="28,61,48,48" name="start1">
          <transition to="foreach1"/>
       </start>
    
       <foreach var="department" in="#{departments}" g="111,60,48,48" name="foreach1">
          <transition to="Collect reports"/>
       </foreach>
    
       <task candidate-groups="#{department}" g="201,58,92,52" name="Collect reports">
          <transition to="join1"/>
       </task>
    
       <join g="343,59,48,48" multiplicity="#{quorum}" name="join1">
          <transition to="end1"/>
       </join>
    
       <end g="433,60,48,48" name="end1"/>
    
    </process>

      1. 프로세스를 시작한 후 foreach 노드에 도달합니다.
    <foreach var="department" in="#{departments}" g="111,60,48,48" name="foreach1">
          <transition to="Collect reports"/>
       </foreach>
     
    매개변수:
    in: 밖에서 들어오는 인자를 표시합니다.foreach에서 이 인자를 읽을 것입니다. 이 인자는string 수조일 수도 있고 쉼표로 구분된 문자열일 수도 있습니다.
    var: 이 변수는foreach에서 in의 내용을 규칙에 따라 나누는 것입니다. 나누는 결과는 var이 정의한 변수에 놓고 다음 단계로 전달됩니다. (한 걸음 한 걸음 값을 받습니다.)
     
    foreach에 들어가서 이 매개 변수를 분석하면join의multiplicity 매개 변수의 값에 따라task(multiplicity를 몇 개로 정의하면 몇 개의Executiuon, 몇 개의task)를 생성합니다. 이것들의assignee는 모두 비어 있습니다.
     
    2.task 입장
    <task candidate-groups="#{department}" g="201,58,92,52" name="Collect reports">
          <transition to="join1"/>
       </task>

     
    task에 들어갔습니다. 사실 현재 여러task가join의multiplicity에 의해 확정되었습니다.
     
    이task 작업에 배정된 인원은 candidate-groups(또는 candidate-users 등)에서 정의됩니다.이 예#{department}는foreach 노드에서 정의된 var="department"의 변수 이름입니다.
     
    이 작업들은 사용자에게 직접 분배되는 것이 아니라 사용자 스스로take를 진행해야 한다
    (TaskService.createTaskQuery().candidate(userId).list 어떤 미션을 받을 수 있는지 본인이 후보자입니다.
    또는 TaskService를 통해findGroupTasks(userId)는 자신이 가입한 그룹에서 수행해야 할 작업을 가져옵니다.
    또는 프로세스 xml 파일에서 assignee로 작업 수행자에게 직접 분배
    ).
     
    3. foreach에서 자동으로 생성된 Task가 모두 완성되면 프로세스는 다음 단계로 넘어갑니다.
    만약 일부 인원이 완성하고 일부 인원이 완성하지 못하면foreach에서 자동으로 생성된 모든 Execution(processInstance.getExecutions()를 찾을 수 있지만 임무가 완성된 상황에 따라 다른 상태가 있습니다.
    작업이 완료되면 Task 테이블에서 삭제됩니다. 받은 excution 상태는: inactive-join입니다.
    완료되지 않은 작업은task에 여전히 존재합니다.excution 상태는active-concurrent입니다
     

    좋은 웹페이지 즐겨찾기