/// <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)); }
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); } }