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);
                }
            }
        }
예제 #2
0
        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.
                }
        }