Datasheet
Chapter 1: Workfl ow Programming Principles
26
Listing 1-9 (continued )
}
protected override ActivityExecutionStatus Execute(
ActivityExecutionContext executionContext)
{
if (this.EnabledActivities.Count == 0)
return ActivityExecutionStatus.Closed;
if (Condition != null & &
Condition.Evaluate(this, executionContext))
{
ActivityExecutionContext childExecutionContext =
executionContext.ExecutionContextManager.CreateExecutionContext(
this.EnabledActivities[0]);
childExecutionContext.Activity.Closed += Activity_Closed;
childExecutionContext.ExecuteActivity(
childExecutionContext.Activity);
return ActivityExecutionStatus.Executing;
}
return ActivityExecutionStatus.Closed;
}
void Activity_Closed(object sender,
ActivityExecutionStatusChangedEventArgs e)
{
e.Activity.Closed -= this.Activity_Closed;
ActivityExecutionContext executionContext =
sender as ActivityExecutionContext;
ActivityExecutionContext childExecutionContext =
executionContext.ExecutionContextManager.GetExecutionContext(
e.Activity);
executionContext.ExecutionContextManager.CompleteExecutionContext(
childExecutionContext);
if (Condition != null & &
Condition.Evaluate(this, executionContext))
{
childExecutionContext =
executionContext.ExecutionContextManager.CreateExecutionContext(
this.EnabledActivities[0]);
childExecutionContext.Activity.Closed += Activity_Closed;
childExecutionContext.ExecuteActivity(
childExecutionContext.Activity);
return;
}
executionContext.CloseActivity();
}
}
}
c01.indd 26c01.indd 26 8/25/08 4:02:58 PM8/25/08 4:02:58 PM