2016-03-26 15 views
0

Bir İşlem Motoru, Depo Hizmeti, Çalışma Zamanı Hizmeti oluşturdum ve bir BPMN iş akışı dağıtdım. Ayrıca bir İşlem örneği oluşturdum ve başlatabiliyordum. Sorun, "deleteProcessInstance" yöntemini kullanarak işlem örneğini askıya almayı veya silmeyi denediğimde, ProcessInstanceId bulunamadığını belirten bir hata alıyorum !! PS: BPMN'deki processId'nin Activiti'de processKey olarak ele alındığını öğrendim.Activiti'de program örneği olarak bir işlem örneği nasıl silinir/askıya alınır?

Kodu: işlem örneğini başlarken Yukarıdaki kodu

public void startProcess(String processDefinitionKey) 
    { 

     ListenerClass.processInstance= ListenerClass.runtimeService.startProcessInstanceByKey(processDefinitionKey); 

    } 

    public void deleteProcess(String processInstanceId) 
    { 


      System.out.println("Stopping Process instance id " +processInstanceId); 

      ListenerClass.runtimeService.deleteProcessInstance(processInstanceId, "Ok"); 



    } 

} 

ben BPMN.xml dosyasının "işlem kimliği" geçiş (BPMN.xml arasında ProcessID activiti ait = processInstanceKey anlamına gelir).

Benim BPMN.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<bpmn:definitions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" 
xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" 
xmlns:di="http://www.omg.org/spec/DD/20100524/DI" id="Definitions_1" xmlns:activiti="http://activiti.org/bpmn" 
targetNamespace="http://bpmn.io/schema/bpmn"> 
    <bpmn:process id="Process_11" isExecutable="true" name="Hima"> 
    <bpmn:startEvent id="StartEvent_1"> 
     <bpmn:outgoing>SequenceFlow_06sykhd</bpmn:outgoing> 
    </bpmn:startEvent> 
    <bpmn:sequenceFlow id="SequenceFlow_06sykhd" sourceRef="StartEvent_1" targetRef="Task_1dt8brv" /> 
    <bpmn:endEvent id="EndEvent_0cb0ioi"> 
     <bpmn:incoming>SequenceFlow_1doj4n6</bpmn:incoming> 
    </bpmn:endEvent> 
    <bpmn:serviceTask id="Task_1dt8brv" 
      name="My Java Service Task" 
      activiti:class="com.bosch.bip.Service.task1" > 

     <bpmn:incoming>SequenceFlow_06sykhd</bpmn:incoming> 
     <bpmn:outgoing>SequenceFlow_156te78</bpmn:outgoing> 
    </bpmn:serviceTask> 
    <bpmn:serviceTask id="Task_10bfll9" activiti:class="com.bosch.bip.Service.task1"> 
     <bpmn:incoming>SequenceFlow_156te78</bpmn:incoming> 
     <bpmn:outgoing>SequenceFlow_1doj4n6</bpmn:outgoing> 
    </bpmn:serviceTask> 
    <bpmn:sequenceFlow id="SequenceFlow_156te78" sourceRef="Task_1dt8brv" targetRef="Task_10bfll9" /> 
    <bpmn:sequenceFlow id="SequenceFlow_1doj4n6" sourceRef="Task_10bfll9" targetRef="EndEvent_0cb0ioi" /> 
    </bpmn:process> 
    <bpmndi:BPMNDiagram id="BPMNDiagram_1"> 
    <bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="Process_11"> 
     <bpmndi:BPMNShape id="_BPMNShape_StartEvent_2" bpmnElement="StartEvent_1"> 
     <dc:Bounds x="173" y="102" width="36" height="36" /> 
     </bpmndi:BPMNShape> 
     <bpmndi:BPMNEdge id="SequenceFlow_06sykhd_di" bpmnElement="SequenceFlow_06sykhd"> 
     <di:waypoint xsi:type="dc:Point" x="209" y="120" /> 
     <di:waypoint xsi:type="dc:Point" x="264" y="120" /> 
     <di:waypoint xsi:type="dc:Point" x="264" y="147" /> 
     <di:waypoint xsi:type="dc:Point" x="318" y="147" /> 
     <bpmndi:BPMNLabel> 
      <dc:Bounds x="219" y="123.5" width="90" height="20" /> 
     </bpmndi:BPMNLabel> 
     </bpmndi:BPMNEdge> 
     <bpmndi:BPMNShape id="EndEvent_0cb0ioi_di" bpmnElement="EndEvent_0cb0ioi"> 
     <dc:Bounds x="768" y="173" width="36" height="36" /> 
     <bpmndi:BPMNLabel> 
      <dc:Bounds x="741" y="209" width="90" height="20" /> 
     </bpmndi:BPMNLabel> 
     </bpmndi:BPMNShape> 
     <bpmndi:BPMNShape id="Task_1dt8brv_di" bpmnElement="Task_1dt8brv"> 
     <dc:Bounds x="318" y="107" width="100" height="80" /> 
     </bpmndi:BPMNShape> 
     <bpmndi:BPMNShape id="Task_10bfll9_di" bpmnElement="Task_10bfll9"> 
     <dc:Bounds x="528" y="94" width="100" height="80" /> 
     </bpmndi:BPMNShape> 
     <bpmndi:BPMNEdge id="SequenceFlow_156te78_di" bpmnElement="SequenceFlow_156te78"> 
     <di:waypoint xsi:type="dc:Point" x="418" y="147" /> 
     <di:waypoint xsi:type="dc:Point" x="473" y="147" /> 
     <di:waypoint xsi:type="dc:Point" x="473" y="134" /> 
     <di:waypoint xsi:type="dc:Point" x="528" y="134" /> 
     <bpmndi:BPMNLabel> 
      <dc:Bounds x="386" y="202.5" width="90" height="20" /> 
     </bpmndi:BPMNLabel> 
     </bpmndi:BPMNEdge> 
     <bpmndi:BPMNEdge id="SequenceFlow_1doj4n6_di" bpmnElement="SequenceFlow_1doj4n6"> 
     <di:waypoint xsi:type="dc:Point" x="628" y="134" /> 
     <di:waypoint xsi:type="dc:Point" x="698" y="134" /> 
     <di:waypoint xsi:type="dc:Point" x="698" y="191" /> 
     <di:waypoint xsi:type="dc:Point" x="768" y="191" /> 
     <bpmndi:BPMNLabel> 
      <dc:Bounds x="653" y="152.5" width="90" height="20" /> 
     </bpmndi:BPMNLabel> 
     </bpmndi:BPMNEdge> 
    </bpmndi:BPMNPlane> 
    </bpmndi:BPMNDiagram> 
</bpmn:definitions> 

bu bağlamda herhangi bir yardım gerçekten yararlı olacaktır.

runtimeService.deleteProcessInstance(processInstanceId, null); 

süreç, belki işlem zaten sona erdi geçmiş silmek için ihtiyaç bitirildiginde: Yukarıda olduğu gibi bir koşu işlemi için

+0

activiti API "processkey" tarafından bir proses örneğini silmek için herhangi bir yöntem yoktur –

+0

ProcessInstanceId processKey aynı değildir. Kodunuzu buraya yapıştırır mısınız? –

+0

@PiotrKorlaga Sorumu düzenledim. Lütfen bir göz atın –

cevap

1

, bunu kullan?

HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery() 
     .processInstanceId(processInstanceId).singleResult(); 
if (historicProcessInstance != null) { 
    historyService.deleteHistoricProcessInstance(historicProcessInstance.getId()); 
} 
+0

ProcessInstanceId örnek olarak "Process_11: 1: 4" şeklindedir. Ben DB kontrol ettim ve yukarıda belirtildiği gibi işlemi silmek için bu kimliği kullandım ama bana –

+0

null bir işaretçi istisnası atar Benim gereksinim de bir processInstance askıya almak için ama API askıya almak için kullandığım zaman bile, bu başarısız olur processInstanceId –

+2

'u getiremiyor ACT_RE_PROCDEF tablosundan id aldınız. Bu processInstanceId değil. ACT_RU_EXECUTION içinde bulabileceğiniz ProcessInstanceId. ProcessInstanceId erişimcisini ProcessInstance nesnesinde de bulabilirsiniz. –