void ProcessResult(IRunState context, WorkflowRun run) { if (run.WorkflowRunStatus_Enum != WorkflowRunState_Enumeration.WorkflowRunCompleted) { throw new InnerWorkflowFailedException(string.Format("Inner workflow '{0}' failed", run.WorkflowBeingRun.Name)); } var proxyExitPoint = run.GetExitPoint(); var matchingExitPoint = context.Metadata.GetExitpointsForActivity(ActivityInstance.Id).SingleOrDefault(ep => ep.Name == proxyExitPoint.Name); if (matchingExitPoint == null) { throw new WorkflowRunException("Workflow proxy returned using an exit point that doesn't match anything in the parent"); } context.ExitPointId = matchingExitPoint; var outputs = run.GetOutput(); var outArgs = ActivityInstance.GetOutputArguments(); // copy the values from the results into the arguments witht eh same name foreach (var arg in outArgs) { var name = arg.Name; object value = null; if (outputs.TryGetValue(name, out value)) { context.SetArgValue(ActivityInstance, arg, value); } } }
public void TestTimeout( ) { var dummyTimeoutHelper = new DummyTimeoutHelper(); using (var scope = Factory.Current.BeginLifetimeScope(builder => { builder.Register(ctx => dummyTimeoutHelper).As <ITimeoutActivityHelper>(); })) using (Factory.SetCurrentScope(scope)) { Workflow displayFormWf = CreateDisplayFormTestWf(null, null, null, 5); WorkflowRun run = RunWorkflow(displayFormWf); dummyTimeoutHelper.Timeout(); run = Entity.Get <WorkflowRun>(run); Assert.AreEqual(WorkflowRunState_Enumeration.WorkflowRunCompleted, run.WorkflowRunStatus_Enum); var exitPoint = run.GetExitPoint(); Assert.AreEqual("Time-out", exitPoint.Name, "Workflow exited at a time-out"); // Need to figure out how to test the exit point. } }