4、
Sequential Workflow With Parameters
Workflow
的流程是可以带参数的,这样,流程代码可以根据外界参数的值来对后面执行情况进行选择判断。
在本例用选中
SequentialWorkflow
对象,可以看到该对象有
Parameters
属性,点击该属性,探出如下图窗体:

这里可以定义多个
Parameter
对象,包括对象的
Name
、
Type
等属性,
Direction
用于表明该参数是输入参数还是输出参数。本例中定义了
amount
输入参数,和
status
输出参数。
本例流程如图,
ifElseBranch1
的
Condition
属性的执行方法如下:

private bool IsApproved(object sender, EventArgs e)
{
if (Convert.ToInt32(this.Parameters["amount"].Value) < 500)
return true;
else
return false;
}
这里是根据外界传递来的参数
amount
的值判断
ifElse
最终选择的路径的。
在
Code1
中:
private
void Approved(object sender, EventArgs e)
{
this.Parameters["status"].Value = "approved";
}
在
Code2
中:
private
void Rejected(object sender, EventArgs e)
{
this.Parameters["status"].Value = "rejected";
}
Code1
和
Code2
分别给出了
2
种路径的输出参数值。
在看看
Program.cs
中是怎样调用这个带参数的工作流的
Dictionary
<string, object> parameters = new Dictionary<string, object>();
parameters.Add("amount", Convert.ToInt32(args[0]));
// Load the workflow type
Type
type = typeof(SequentialWorkflowWithParameters);
// Create and start an instance of the workflow
workflowRuntime.StartWorkflow(type, parameters);
在工作流结束的事件中,通过
OutputParameters
属性,拿到了输出参数
status
的值。
static
void OnWorkflowCompleted(object sender, WorkflowCompletedEventArgs workflowCompletedEventArgs)
{
//The order status is stored in the "status" "in" parameter
string
orderStatus = workflowCompletedEventArgs.OutputParameters["status"].ToString();
Console
.WriteLine("Order was " + orderStatus);
waitHandle.Set();
}
