private Task ProcessNextFlow(TInstance instance, BpmnFlowElement flow, CancellationToken cancellationToken)
 {
     if (flow is BpmnFlowNode flowNode)
     {
         if (flowNode.Outgoing != null)
         {
             var tasks = flowNode.Outgoing.Select(async outgoing =>
             {
                 await ProcessFlowAsync(instance, outgoing.Name, cancellationToken);
             });
             return(Task.WhenAll(tasks));
         }
     }
     if (flow is BpmnSequenceFlow sequence)
     {
         return(ProcessFlowAsync(instance, sequence.TargetRef, cancellationToken));
     }
     if (flow is BpmnEndEvent endEvent)
     {
         foreach (var item in instance.Flows)
         {
             if (item.Status != FlowResult.Completed && item.Status != FlowResult.NotProcessing && item.Status != FlowResult.Cancelled)
             {
                 item.Status = FlowResult.Cancelled;
             }
         }
         instance.Status = InstanceStatus.Completed;
     }
     return(ProcessTargetSequenceFlowAsync(instance, flow.Id, cancellationToken));
 }
Beispiel #2
0
 public static FlowElementType GetItemType(BpmnFlowElement flowElement)
 {
     if (flowElement is BpmnSequenceFlow)
     {
         return(FlowElementType.SequenceFlow);
     }
     if (flowElement is BpmnGateway)
     {
         if (flowElement is BpmnParallelGateway)
         {
             return(FlowElementType.ParallelGateway);
         }
         if (flowElement is BpmnExclusiveGateway)
         {
             return(FlowElementType.ExclusiveGateway);
         }
         if (flowElement is BpmnInclusiveGateway)
         {
             return(FlowElementType.InclusiveGateway);
         }
         if (flowElement is BpmnComplexGateway)
         {
             return(FlowElementType.ComplexGateway);
         }
         if (flowElement is BpmnEventBasedGateway)
         {
             return(FlowElementType.EventBasedGateway);
         }
     }
     if (flowElement is BpmnTask)
     {
         if (flowElement is BpmnUserTask)
         {
             return(FlowElementType.UserTask);
         }
         if (flowElement is BpmnServiceTask)
         {
             return(FlowElementType.ServiceTask);
         }
         if (flowElement is BpmnBusinessRuleTask)
         {
             return(FlowElementType.BusinessRuleTask);
         }
         if (flowElement is BpmnManualTask)
         {
             return(FlowElementType.ManualTask);
         }
         if (flowElement is BpmnReceiveTask)
         {
             return(FlowElementType.ReceiveTask);
         }
         if (flowElement is BpmnScriptTask)
         {
             return(FlowElementType.ScriptTask);
         }
         if (flowElement is BpmnSendTask)
         {
             return(FlowElementType.SendTask);
         }
         return(FlowElementType.Task);
     }
     if (flowElement is BpmnEvent)
     {
         if (flowElement is BpmnStartEvent)
         {
             return(FlowElementType.StartEvent);
         }
         if (flowElement is BpmnEndEvent)
         {
             return(FlowElementType.EndEvent);
         }
         if (flowElement is BpmnIntermediateCatchEvent)
         {
             return(FlowElementType.IntermediateCatchEvent);
         }
         if (flowElement is BpmnImplicitThrowEvent)
         {
             return(FlowElementType.ImplicitThrowEvent);
         }
         if (flowElement is BpmnBoundaryEvent)
         {
             return(FlowElementType.BoundaryEvent);
         }
         if (flowElement is BpmnIntermediateThrowEvent)
         {
             return(FlowElementType.IntermediateThrowEvent);
         }
         return(FlowElementType.Event);
     }
     if (flowElement is BpmnSubProcess)
     {
         if (flowElement is BpmnAdHocSubProcess)
         {
             return(FlowElementType.AdHocSubProcess);
         }
         if (flowElement is BpmnTransaction)
         {
             return(FlowElementType.Transaction);
         }
         return(FlowElementType.SubProcess);
     }
     if (flowElement is BpmnCallActivity)
     {
         return(FlowElementType.CallActivity);
     }
     if (flowElement is BpmnCallChoreography)
     {
         return(FlowElementType.CallChoreography);
     }
     if (flowElement is BpmnChoreographyTask)
     {
         return(FlowElementType.ChoreographyTask);
     }
     if (flowElement is BpmnSubChoreography)
     {
         return(FlowElementType.SubChoreography);
     }
     if (flowElement is BpmnDataObject)
     {
         return(FlowElementType.DataObject);
     }
     if (flowElement is BpmnDataObjectReference)
     {
         return(FlowElementType.DataObjectReference);
     }
     if (flowElement is BpmnDataStoreReference)
     {
         return(FlowElementType.DataStoreReference);
     }
     return(FlowElementType.Flow);
 }
 public Task OnCompleteAsync <TInstanceFlow>(IProcessInstance <TInstanceFlow> instance, BpmnFlowElement flow, CancellationToken cancellationToken) where TInstanceFlow : IBpmNetInstanceFlow
 {
     return(Task.FromResult(0));
 }
 private Task <FlowResult> ExecuteFlowAsync(TInstance instance, BpmnFlowElement flow, CancellationToken cancellationToken)
 {
     if (flow is BpmnSequenceFlow sequenceFlow)
     {
         return(_sequenceFlowProcessService.ExecuteAsync(instance, sequenceFlow, cancellationToken));
     }
     if (flow is BpmnGateway)
     {
         if (flow is BpmnParallelGateway parallelGateway)
         {
             return(_parallelGatewayProcessService.ExecuteAsync(instance, parallelGateway, cancellationToken));
         }
         if (flow is BpmnInclusiveGateway inclusiveGateway)
         {
             return(_inclusiveGatewayProcessService.ExecuteAsync(instance, inclusiveGateway, cancellationToken));
         }
         if (flow is BpmnExclusiveGateway exclusiveGateway)
         {
             return(_exclusiveGatewayProcessService.ExecuteAsync(instance, exclusiveGateway, cancellationToken));
         }
         if (flow is BpmnComplexGateway complexGateway)
         {
             return(_complexGatewayProcessService.ExecuteAsync(instance, complexGateway, cancellationToken));
         }
         if (flow is BpmnEventBasedGateway eventBasedGateway)
         {
             return(_eventBasedGatewayProcessService.ExecuteAsync(instance, eventBasedGateway, cancellationToken));
         }
     }
     if (flow is BpmnTask task)
     {
         if (flow is BpmnUserTask userTask)
         {
             return(_userTaskProcessService.ExecuteAsync(instance, userTask, cancellationToken));
         }
         if (flow is BpmnServiceTask serviceTask)
         {
             return(_serviceTaskProcessService.ExecuteAsync(instance, serviceTask, cancellationToken));
         }
         if (flow is BpmnBusinessRuleTask businessRuleTask)
         {
             return(_businessRuleTaskProcessService.ExecuteAsync(instance, businessRuleTask, cancellationToken));
         }
         if (flow is BpmnManualTask manualTask)
         {
             return(_manualTaskProcessService.ExecuteAsync(instance, manualTask, cancellationToken));
         }
         if (flow is BpmnReceiveTask receiveTask)
         {
             return(_receiveTaskProcessService.ExecuteAsync(instance, receiveTask, cancellationToken));
         }
         if (flow is BpmnScriptTask scriptTask)
         {
             return(_scriptTaskProcessService.ExecuteAsync(instance, scriptTask, cancellationToken));
         }
         if (flow is BpmnSendTask sendTask)
         {
             return(_sendTaskProcessService.ExecuteAsync(instance, sendTask, cancellationToken));
         }
         return(_taskProcessService.ExecuteAsync(instance, task, cancellationToken));
     }
     if (flow is BpmnEvent bpmnEvent)
     {
         if (flow is BpmnStartEvent startEvent)
         {
             return(_startEventProcessService.ExecuteAsync(instance, startEvent, cancellationToken));
         }
         if (flow is BpmnEndEvent endEvent)
         {
             return(_endEventProcessService.ExecuteAsync(instance, endEvent, cancellationToken));
         }
         if (flow is BpmnIntermediateCatchEvent intermediateCatchEvent)
         {
             return(_intermediateCatchEventProcessService.ExecuteAsync(instance, intermediateCatchEvent, cancellationToken));
         }
         if (flow is BpmnImplicitThrowEvent implicitThrowEvent)
         {
             return(_implicitThrowEventProcessService.ExecuteAsync(instance, implicitThrowEvent, cancellationToken));
         }
         if (flow is BpmnBoundaryEvent boundaryEvent)
         {
             return(_boundaryEventProcessService.ExecuteAsync(instance, boundaryEvent, cancellationToken));
         }
         if (flow is BpmnIntermediateThrowEvent intermediateThrowEvent)
         {
             return(_intermediateThrowEventProcessService.ExecuteAsync(instance, intermediateThrowEvent, cancellationToken));
         }
         return(_eventProcessService.ExecuteAsync(instance, bpmnEvent, cancellationToken));
     }
     if (flow is BpmnSubProcess subProcess)
     {
         if (flow is BpmnAdHocSubProcess adHocSubProcess)
         {
             return(_adHocSubProcessProcessService.ExecuteAsync(instance, adHocSubProcess, cancellationToken));
         }
         if (flow is BpmnTransaction transaction)
         {
             return(_transactionProcessService.ExecuteAsync(instance, transaction, cancellationToken));
         }
         return(_subProcessProcessService.ExecuteAsync(instance, subProcess, cancellationToken));
     }
     if (flow is BpmnCallActivity callActivity)
     {
         return(_callActivityProcessService.ExecuteAsync(instance, callActivity, cancellationToken));
     }
     if (flow is BpmnCallChoreography callChoreography)
     {
         return(_callChoreographyProcessService.ExecuteAsync(instance, callChoreography, cancellationToken));
     }
     if (flow is BpmnChoreographyTask choreographyTask)
     {
         return(_choreographyTaskProcessService.ExecuteAsync(instance, choreographyTask, cancellationToken));
     }
     if (flow is BpmnDataObject dataObject)
     {
         return(_dataObjectProcessService.ExecuteAsync(instance, dataObject, cancellationToken));
     }
     if (flow is BpmnDataObjectReference dataObjectReference)
     {
         return(_dataObjectReferenceProcessService.ExecuteAsync(instance, dataObjectReference, cancellationToken));
     }
     if (flow is BpmnDataStoreReference dataStoreReference)
     {
         return(_dataStoreReferenceProcessService.ExecuteAsync(instance, dataStoreReference, cancellationToken));
     }
     if (flow is BpmnSubChoreography subChoreography)
     {
         return(_subChoreographyProcessService.ExecuteAsync(instance, subChoreography, cancellationToken));
     }
     return(_flowElementProcessService.ExecuteAsync(instance, flow, cancellationToken));
 }