Ejemplo n.º 1
0
        /// <summary>
        /// Gets last execution context. Don't override this
        /// </summary>
        /// <returns></returns>
        internal virtual WorkflowState GetLastExecContext()
        {
            var req = new DescribeWorkflowExecutionRequest
            {
                Domain    = _request.Domain,
                Execution = _decisionTask.WorkflowExecution
            };

            var res = _swfClient.DescribeWorkflowExecutionAsync(req).Result;

            return(WorkflowStateSerializer.Deserialize(res.WorkflowExecutionDetail.LatestExecutionContext));
        }
Ejemplo n.º 2
0
        public void StartAndTerminateWorkflowExecution()
        {
            string domainName = "sdk-dotnet-start-" + DateTime.Now.Ticks;
            var    regRequest = new RegisterDomainRequest()
            {
                Name        = domainName,
                Description = "A Description",
                WorkflowExecutionRetentionPeriodInDays = "4"
            };

            Client.RegisterDomain(regRequest);
            try
            {
                var regWorkflowRequest = new RegisterWorkflowTypeRequest()
                {
                    Name        = "Start and Terminate Workflow",
                    Domain      = domainName,
                    Description = "Another Description",
                    Version     = "1.0",
                    DefaultExecutionStartToCloseTimeout = FIVE_HOUR_DURATION,
                    DefaultTaskStartToCloseTimeout      = FOUR_HOUR_DURATION
                };

                var regWorkflowResponse = Client.RegisterWorkflowType(regWorkflowRequest);
                try
                {
                    Sleep(); // Sleep for the eventual consistency
                    var workflowId   = DateTime.Now.Ticks.ToString();
                    var startRequest = new StartWorkflowExecutionRequest()
                    {
                        Domain      = domainName,
                        WorkflowId  = workflowId,
                        ChildPolicy = "TERMINATE",
                        TaskList    = new TaskList()
                        {
                            Name = "ImportantTasks"
                        },
                        WorkflowType = new WorkflowType()
                        {
                            Name = regWorkflowRequest.Name, Version = regWorkflowRequest.Version
                        }
                    };

                    var startResponse = Client.StartWorkflowExecution(startRequest);
                    Assert.IsNotNull(startResponse.Run.RunId);

                    Thread.Sleep(10 * 1000);
                    var countWorkRequest = new CountOpenWorkflowExecutionsRequest()
                    {
                        Domain          = domainName,
                        StartTimeFilter = new ExecutionTimeFilter()
                        {
                            OldestDate = DateTime.Now.AddDays(-4),
                            LatestDate = DateTime.Now.AddDays(1)
                        },
                        ExecutionFilter = new WorkflowExecutionFilter()
                        {
                            WorkflowId = workflowId
                        }
                    };

                    var countWorkResponse = Client.CountOpenWorkflowExecutions(countWorkRequest);

                    Assert.AreEqual(1, countWorkResponse.WorkflowExecutionCount.Count);

                    var listWorkRequest = new ListOpenWorkflowExecutionsRequest()
                    {
                        Domain          = domainName,
                        StartTimeFilter = new ExecutionTimeFilter()
                        {
                            OldestDate = DateTime.Now.AddDays(-4),
                            LatestDate = DateTime.Now.AddDays(1)
                        },
                        ExecutionFilter = new WorkflowExecutionFilter()
                        {
                            WorkflowId = workflowId
                        }
                    };

                    var listWorkResponse = Client.ListOpenWorkflowExecutions(listWorkRequest);
                    Assert.AreEqual(1, listWorkResponse.WorkflowExecutionInfos.ExecutionInfos.Count);

                    var info = listWorkResponse.WorkflowExecutionInfos.ExecutionInfos[0];
                    Assert.AreEqual(regWorkflowRequest.Name, info.WorkflowType.Name);
                    Assert.AreEqual(regWorkflowRequest.Version, info.WorkflowType.Version);
                    Assert.AreEqual(startResponse.Run.RunId, info.Execution.RunId);
                    Assert.AreEqual(startRequest.WorkflowId, info.Execution.WorkflowId);

                    var descRequest = new DescribeWorkflowExecutionRequest()
                    {
                        Domain    = domainName,
                        Execution = new WorkflowExecution()
                        {
                            RunId      = startResponse.Run.RunId,
                            WorkflowId = startRequest.WorkflowId
                        }
                    };

                    var descResponse = Client.DescribeWorkflowExecution(descRequest);

                    Assert.IsNotNull(descResponse.WorkflowExecutionDetail);
                    Assert.AreEqual(startRequest.TaskList.Name, descResponse.WorkflowExecutionDetail.ExecutionConfiguration.TaskList.Name);

                    var termRequest = new TerminateWorkflowExecutionRequest()
                    {
                        Domain      = domainName,
                        ChildPolicy = "TERMINATE",
                        WorkflowId  = workflowId
                    };

                    var termResponse = Client.TerminateWorkflowExecution(termRequest);
                    Assert.IsNotNull(termResponse.ResponseMetadata.RequestId);
                }
                finally
                {
                    Client.DeprecateWorkflowType(new DeprecateWorkflowTypeRequest()
                    {
                        Domain       = domainName,
                        WorkflowType = new WorkflowType()
                        {
                            Name    = "Start and Terminate Workflow",
                            Version = "1.0"
                        }
                    });
                }
            }
            finally
            {
                var depRequest = new DeprecateDomainRequest()
                {
                    Name = domainName
                };
                Client.DeprecateDomain(depRequest);
            }
        }