2016-11-08 2 views
0

우리는 Activiti 워크 플로우 엔진을 사용하고 있으며 하위 프로세스가 완료되지 않은 경우 프로세스 실행을 계속할 수 있는지 알고 싶습니다.Activiti - 하위 프로세스를 완료하지 않고 계속 실행하십시오.

예를 들어 A-> B와 같은 하위 프로세스 A와 하위 프로세스 B가 있습니다. A는 두 개의 끝 노드를 가지며, 하나는 실행되고 다른 노드는 사용자 태스크가 완료 될 때까지 대기합니다. 그래서 나는 하위 프로세스 A가 완료되지 않았을 것으로 생각하지만, 실행을 계속하고 B를 시작하기를 원합니다.

우리는 최소한의 영향력 솔루션을 찾고 있습니다. 우리는 이미 프로덕션 환경에서 거대한 워크 플로우를 가지고 있기 때문에 하위 프로세스를 추가하고 싶었습니다.

그런 시나리오에서 당신은 무엇을 추천합니까? 이 시나리오에서 프로세스/실행/태스크 변수는 어떻게 작동합니까?

편집 : 우리는 Greg Harley (BP3)가 제안한이 테스트 케이스를 이제 작동 시키려고 노력하고 있지만 중간 catch 이벤트는 호출되지 않습니다.

enter image description here

<?xml version="1.0" encoding="UTF-8"?> 
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:activiti="http://activiti.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.activiti.org/test"> 
<signal id="alertSignal" name="alert" /> 
    <process id="myProcess" name="myProcess" isExecutable="true"> 
    <subProcess id="subprocess1" name="Sub Process"> 
     <startEvent id="startevent2" name="Start"></startEvent> 
     <endEvent id="endevent1" name="End"></endEvent> 
     <userTask id="verifico-id-transitorio-paciente" name="verifico-id-transitorio-paciente"> 
     <extensionElements> 
      <activiti:taskListener event="create" expression="#{INTERNA_LOGICA_TRAMITE.setearPermisoTarea(task)}"></activiti:taskListener> 
      <activiti:taskListener event="create" expression="#{INTERNA_LOGICA_TRAMITE.setearPermisoDependencia(task)}"></activiti:taskListener> 
     </extensionElements> 
     </userTask> 
     <sequenceFlow id="flow1" sourceRef="startevent2" targetRef="verifico-id-transitorio-paciente"></sequenceFlow> 
     <sequenceFlow id="flow2" sourceRef="verifico-id-transitorio-paciente" targetRef="parallelgateway1"></sequenceFlow> 
     <parallelGateway id="parallelgateway1" name="Parallel Gateway"></parallelGateway> 
     <sequenceFlow id="flow10" sourceRef="parallelgateway1" targetRef="ingreso-formulario-ConMed"></sequenceFlow> 
     <intermediateThrowEvent id="signalintermediatethrowevent1" name="SignalThrowEvent"> 
     <signalEventDefinition signalRef="alertSignal"></signalEventDefinition> 
     </intermediateThrowEvent> 
     <sequenceFlow id="flow11" sourceRef="parallelgateway1" targetRef="signalintermediatethrowevent1"></sequenceFlow> 
     <userTask id="ingreso-formulario-ConMed" name="ingreso-formulario-ConMed"> 
     <extensionElements> 
      <activiti:taskListener event="create" expression="#{INTERNA_LOGICA_TRAMITE.setearPermisoTarea(task)}"></activiti:taskListener> 
      <activiti:taskListener event="create" expression="#{INTERNA_LOGICA_TRAMITE.setearPermisoDependencia(task)}"></activiti:taskListener> 
     </extensionElements> 
     </userTask> 
     <sequenceFlow id="flow13" sourceRef="ingreso-formulario-ConMed" targetRef="endevent1"></sequenceFlow> 
    </subProcess> 
    <subProcess id="subprocess2" name="Sub Process"> 
     <startEvent id="startevent3" name="Start"></startEvent> 
     <endEvent id="endevent2" name="End"></endEvent> 
     <userTask id="ingreso-formulario-Con" name="ingreso-formulario-Con"> 
     <extensionElements> 
      <activiti:taskListener event="create" expression="#{INTERNA_LOGICA_TRAMITE.setearPermisoTarea(task)}"></activiti:taskListener> 
      <activiti:taskListener event="create" expression="#{INTERNA_LOGICA_TRAMITE.setearPermisoDependencia(task)}"></activiti:taskListener> 
     </extensionElements> 
     </userTask> 
     <sequenceFlow id="flow5" sourceRef="startevent3" targetRef="ingreso-formulario-Con"></sequenceFlow> 
     <sequenceFlow id="flow6" sourceRef="ingreso-formulario-Con" targetRef="endevent2"></sequenceFlow> 
    </subProcess> 
    <startEvent id="startevent1" name="Start"></startEvent> 
    <subProcess id="subprocess3" name="Sub Process"> 
     <userTask id="modifico-formulario-ConMed" name="modifico-formulario-ConMed"> 
     <extensionElements> 
     </extensionElements> 
     </userTask> 
     <startEvent id="startevent4" name="Start"></startEvent> 
     <endEvent id="endevent3" name="End"></endEvent> 
     <sequenceFlow id="flow8" sourceRef="startevent4" targetRef="modifico-formulario-ConMed"></sequenceFlow> 
     <sequenceFlow id="flow9" sourceRef="modifico-formulario-ConMed" targetRef="endevent3"></sequenceFlow> 
    </subProcess> 
    <sequenceFlow id="flow3" sourceRef="startevent1" targetRef="subprocess1"></sequenceFlow> 
    <sequenceFlow id="flow4" sourceRef="subprocess1" targetRef="subprocess2"></sequenceFlow> 
    <endEvent id="endevent4" name="End"></endEvent> 
    <sequenceFlow id="flow7" sourceRef="subprocess2" targetRef="endevent4"></sequenceFlow> 
    <startEvent id="signalstartevent1" name="Signal start"> 
     <signalEventDefinition signalRef="alertSignal"></signalEventDefinition> 
    </startEvent> 
    <sequenceFlow id="flow14" sourceRef="signalstartevent1" targetRef="subprocess3"></sequenceFlow> 
    </process> 
</definitions> 

답변

1

이 당신이 후, 그러나 "개"작업을 포함하는 서브 프로세스 만 사용자 작업이 완료되면 호출 될 것입니다 확실하지. 이 예에서 사용자 작업 2는 사용자 작업이지만 서비스 또는 스크립트 작업이 될 수 있습니다. 이렇게하면 사용자 작업 1이 완료되었는지 여부와 관계없이 선행 조건이 완료되는 즉시 하위 프로세스 2 (The Dogs 포함)가 실행됩니다.

귀하의 특정 요구 사항을 놓친 경우 알려주십시오. 그렉

+0

참고 : 나는 다른 옵션으로 이벤트 하위 과정에서 신호 시작 이벤트를 사용하여 제안,하지만이 사용 사례에 오픈 결함이 : https://issues.alfresco.com/jira/browse/ACTIVITI-286 –

+0

Eclipse에서 Activiti 플러그인을 사용하고 있습니다. 당신이 제안한 것과 같은 것을 그린다. 서브 프로세스 A에 중간 던져기 이벤트를 추가하고 서브 프로세스 B로 흐르는 프로세스 레벨에서 중간 잡기 이벤트를 추가했다.하지만 배포하려고 할 때 signalref 누락과 관련된 오류가 발생했다. 그래서 나는 수동으로 신호와 신호 ref를 xml에 추가했다. 배포 할 수는 있지만 중간 포착은 절대로 호출되지 않습니다. – Mateo

+0

이클립스 플러그인은 내가 회상하는 한 signalref를 추가 할 수있게 해준다. 경계 이벤트가 실행되지 않는 경우 신호 이름 상관 관계가 올바른지 확인하십시오. 또한 프로세스 인스턴스를 시작하자마자 ACT_RU_EVENT_SUBSCR을 점검하여 수신기가 등록되어 있는지 확인할 수 있습니다. –

관련 문제