Example #1
0
        /// <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);
        }
Example #2
0
        /// <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);
        }
Example #3
0
        /// <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);
        }
Example #4
0
        /// <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);
        }