/// <summary> /// Create Terminate SendReceive /// </summary> /// <returns>SendReceiveBase</returns> private SendReceiveBase <TerminateWorkflowRequest, TerminateWorkflowResponse> CreateTerminateSendReceive() { _terminate = _terminate ?? new SendReceiveBase <TerminateWorkflowRequest, TerminateWorkflowResponse> { ServiceContractName = "{http://flowtasks.com/}IFlowTasksOperations", OperationName = "TerminateWorkflow", CanCreateInstance = false, GenerateCorrelationId = false, UseContentCorrelation = true, CorrelationId = CorrelationId, MessageNamespace = "urn:flowtasks:terminateworkflow", DisplayName = "TerminateWorkflow", OnCompleting = new ActivityFunc <TerminateWorkflowRequest, TerminateWorkflowResponse> { Argument = _requestTerminate, Handler = new CreateResponseForTerminateWorkflow { DisplayName = "CreateResponseForTerminateWorkflow", Request = _requestTerminate } } }; return(_terminate); }
/// <summary> /// Create activity metadata /// </summary> /// <param name="metadata">Metadata</param> protected override void CacheMetadata(NativeActivityMetadata metadata) { // Initialize Approve activity _initializeApprove = CreateInitializeApprove(); // Handle web service call. It will wait till task approved/rejected. _sendReceiveApprove = CreateSendReceiveApprove(); // Use a pick activity to handle expiring time _waitForApproveCompletion = CreateWaitForApprove(); // Approve activities _approveSequence = CreateApproveBody(); // Set up the activity metadata SetupMetadata(metadata); }
/// <summary> /// Create activity metadata /// </summary> /// <param name="metadata">Metadata</param> protected override void CacheMetadata(NativeActivityMetadata metadata) { // wait to start request and then run client activities _startWorkflowSequence = CreateStartWorkflowSequence(); // wait for any terminate request _terminate = CreateTerminateSendReceive(); // Use a Pick activity to handle user terminate requests _startWorkflowBody = CreateStartWorkflowBody(); // wrap everything in a catch activity _startWorkflowCatch = CreateStartWorkflowCatch(); // Set up the activity metadata SetupMetadata(metadata); }
/// <summary> /// Create activity metadata /// </summary> /// <param name="metadata">Metadata</param> protected override void CacheMetadata(NativeActivityMetadata metadata) { // this is used for synchronous childs. Parent will wait until child workflow // send a response. _eventCompleted = _eventCompleted ?? new SendReceiveBase <WorkflowEventRequest, WorkflowEventResponse> { ServiceContractName = "{http://flowtasks.com/}IFlowTasksOperations", OperationName = "WorkflowEvent", CanCreateInstance = false, GenerateCorrelationId = false, UseContentCorrelation = true, CorrelationId = CorrelationId, MessageNamespace = "urn:flowtasks:workflowevent", DisplayName = "WorkflowEvent", OnCompleting = new ActivityFunc <WorkflowEventRequest, WorkflowEventResponse> { Argument = _request, Handler = new CreateResponseForWorkflowEvent { DisplayName = "CreateResponseForWorkflowEvent", Request = _request } } }; _sync = _sync ?? new Sequence { DisplayName = "WaitForWf", Activities = { _eventCompleted } }; metadata.AddImplementationChild(_sync); var workflowIdArgument = new RuntimeArgument("WorkflowId", typeof(string), ArgumentDirection.Out); metadata.Bind(WorkflowId, workflowIdArgument); metadata.AddArgument(workflowIdArgument); var resultArgument = new RuntimeArgument("WorkflowResult", typeof(string), ArgumentDirection.Out); metadata.Bind(WorkflowResult, resultArgument); metadata.AddArgument(resultArgument); var workflowCodeArgument = new RuntimeArgument("WorkflowCode", typeof(string), ArgumentDirection.In); metadata.Bind(WorkflowCode, workflowCodeArgument); metadata.AddArgument(workflowCodeArgument); var domainArgument = new RuntimeArgument("Domain", typeof(string), ArgumentDirection.In); metadata.Bind(Domain, domainArgument); metadata.AddArgument(domainArgument); var propertiesArgument = new RuntimeArgument("Properties", typeof(Dictionary <string, string>), ArgumentDirection.In); metadata.Bind(Properties, propertiesArgument); metadata.AddArgument(propertiesArgument); var asyncArgument = new RuntimeArgument("Async", typeof(bool), ArgumentDirection.In); metadata.Bind(Async, asyncArgument); metadata.AddArgument(asyncArgument); metadata.AddImplementationVariable(NewWorkflowId); }