none
Windows Workflow Foundation (wwf) 学习笔记(二) RRS feed

  • 常规讨论

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

    这里可以定义多个Parameter对象,包括对象的NameType等属性,Direction用于表明该参数是输入参数还是输出参数。本例中定义了amount输入参数,和status输出参数。

    本例流程如图,ifElseBranch1Condition属性的执行方法如下:


    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";


    }

    Code1Code2分别给出了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();


    }

    转自:http://www.cnblogs.com/andersen/
    2009年6月18日 8:26