• [转]WF4.0 基础篇 (六) 数据的传递 Arguments 参数


    本文转自:http://www.cnblogs.com/foundation/archive/2009/11/25/1610738.html

    节主要介绍如何在WF4.0中使用参数,以及在流程启动时传入参数据在流程结束时读取参数

    本文例子下载:

    https://files.cnblogs.com/foundation/ArgumentsSample.rar

    本文例子说明

    数据的传递 Arguments 参数

    Arguments 参数概述

    Arguments是WF的输出和输入接口,在同一个流程内,所有Activity共享一组参数.

    参数有如下属性:

    Name

    参数的名子

    Direction

    参数的类型

    In

    Out

    In/Out

    Propery

    Argument type

    参数的数据类型

    Default value

    参数的默认值

    In:使用的是表达式

    Out,In/Out :无默认值

    Propery : 值类型

    IsRequired

    是否必填

    添加参数

    In参数

    System.Activities.InArgument<T>

    [In参数]使用说明

    1. 可以用VS设计器在xaml中定义[In参数]

    2. 在xaml中定义的[In参数],可以在该xaml中被其他Activity用表达式绑定

    3. 可以用code方式在code Activity中定义[In参数]

    4. 可以在属性框中, 将code Activity中定义的[In参数]绑定到参数或变量

    可以用"表达式"方式赋值

    5. 运行时,可以用启动参数的方式[In参数]赋值(xaml与code两种方式都可以)

    6. [In参数]不能在实例的[OnCompleted]事件中用[WorkflowApplicationCompletedEventArgs.Outputs]得到

    7. 可以使用[Assign] 为 [In参数]赋值

    例:XAML方式的[In参数]使用

    说明:

    1.在xaml格式的workFlow中定义三个[double]型的[In参数]v1,v2,v3

    2.启动时为v1,v2赋值

    3.在流程内部用[Assign]为v3赋予v1+v2

    4.用WriteLine打印v3的值

    流程

    宿主

    static void startValueInWorkflow()

    {

    System.Collections.Generic.Dictionary<string, object> dic = new System.Collections.Generic.Dictionary<string, object>();

    dic.Add("v1",123.456);

    dic.Add("v2",456.789);

    WorkflowApplication myInstance = new WorkflowApplication(new StartValueInWorkflow(), dic);

    myInstance.Run();

    }

    结果

    例:Code方式的[In参数]使用

    说明:

    1. 定一个Activity名为[InArgumentActivity],其具有一个[string]类型 [In参数]myIn

    2. 在xaml格式的workFlow中定义一个[string]型的[In参数]myValue

    3. 启动时为myValue赋值

    4. 在流程内部添加[InArgumentActivity],将[InArgumentActivity.myIn] 绑定到myValue

    InArgumentActivity

    public sealed class InArgumentActivity : CodeActivity

    {

    public System.Activities.InArgument<string> myIn { get; set; }

    protected override void Execute(CodeActivityContext context)

    {

    string s1 = context.GetValue(this.myIn);

    string s2 = myIn.Get(context);

    System.Console.WriteLine(s1);

    System.Console.WriteLine(s2);

    }

    }

    流程

    宿主

    static void inArgumentWorkflow()

    {

    System.Collections.Generic.Dictionary<string, object> dic = new System.Collections.Generic.Dictionary<string, object>();

    dic.Add("myValue","wxwinter wxd");

    WorkflowApplication myInstance = new WorkflowApplication(new InArgumentWorkflow(), dic);

    myInstance.Run();

    }

    结果

    Out参数

    System.Activities.OutArgument<T>

    [Out参数]使用说明

    1. 可以用VS设计器在xaml中定义[Out参数]

    2. 在xaml中定义的[Out参数],可以在该xaml中被其他Activity用表达式绑定

    3. 可以用code方式在code Activity中定义[Out参数]

    4. 可以在属性框中, 将code Activity中定义的[Out参数]绑定到参数或变量

    不能直接对[Out参数]赋值

    5. 运行时,不能用启动参数的方式[Out参数]赋值(xaml与code两种方式都不可以)

    6. [Out参数]可在实例的[OnCompleted]事件中用[WorkflowApplicationCompletedEventArgs.Outputs]得到

    7. 可以使用[Assign] 为 [Out参数]赋值

    例:XAML方式的[Out参数]使用

    说明:

    1.在xaml格式的workFlow中定义二个[double]型的[In参数]v1,v2

    定义一个[double]型的[Out 参数]v3

    2.启动时为v1,v2赋值

    3.在流程内部用[Assign]为v3赋予v1+v2

    4.在[completed]中打印v3的值

    流程

    宿主

    static void startValueOutWorkflow()

    {

    System.Collections.Generic.Dictionary<string, object> dic = new System.Collections.Generic.Dictionary<string, object>();

    dic.Add("v1", 123.456);

    dic.Add("v2", 456.789);

    WorkflowApplication myInstance = new WorkflowApplication(new StartValueOutWorkflow(), dic);

    myInstance.Completed = completed;

    myInstance.Run();

    }

    static void completed(WorkflowApplicationCompletedEventArgs e)

    {

    System.Console.WriteLine(e.Outputs["v3"].ToString());

    }

    结果

    例:Code方式的[Out参数]使用

    说明:

    1. 定一个Activity名为[OutArgumentActivity],其具有一个[string]类型 [Out 参数]myOut

    2. 在xaml格式的workFlow中定义一个[string]型的变量 myVariable

    3. 在流程内部添加[OutArgumentActivity],将[OutArgumentActivity.myOut]绑定到myVariable

    4. 添加[WriteLine],打印[myVariable]

    OutArgumentActivity

    public sealed class OutArgumentActivity : CodeActivity

    {

    public System.Activities.OutArgument<string> myOut

    { set; get; }

    protected override void Execute(CodeActivityContext context)

    {

    //1

    string s1 = myOut.Get(context);

    myOut.Set(context, "wxd" + s1);

    //2

    string s2 = context.GetValue(myOut);

    context.SetValue(myOut, "lzm" + s2);

    }

    }

    流程

    宿主

    static void outArgumentWorkflow()

    {

    WorkflowApplication myInstance = new WorkflowApplication(new OutArgumentWorkflow());

    myInstance.Run();

    }

    结果

    In/Out参数

    System.Activities.InOutArgument<T>

    [In/Out参数]使用说明

    1. 可以用VS设计器在xaml中定义[I民/Out参数]

    2. 在xaml中定义的[In/Out参数],可以在该xaml中被其他Activity用表达式绑定

    3. 可以用code方式在code Activity中定义[In/Out参数]

    4. 可以在属性框中, 将code Activity中定义的[In/Out参数]绑定到参数或变量

    不能直接对[In/Out参数]赋值

    5. 运行时, 可以用启动参数的方式[In/Out参数]赋值(xaml与code两种方式都可以)

    6. [In/Out参数]可在实例的[OnCompleted]事件中用[WorkflowApplicationCompletedEventArgs.Outputs]得到

    7. 可以使用[Assign] 为 [In/Out参数]赋值

    例:XAML方式的[In/Out参数]使用

    说明:

    1.在xaml格式的workFlow中定义三个[string]型的[In/Out参数]v1,v2, v3

    2.启动时为v1,v2,v3赋值

    3.在流程内部用[Assign]为v3赋予v1 + v2 +v3

    4.在[completed]中打印v3的值

    流程

    宿主

    static void startValueInOutWorkflow()

    {

    System.Collections.Generic.Dictionary<string, object> dic = new System.Collections.Generic.Dictionary<string, object>();

    dic.Add("v1", "wxd");

    dic.Add("v2", "lzm");

    dic.Add("v3", "wxwinter");

    WorkflowApplication myInstance = new WorkflowApplication(new StartValueInOutWorkflow(), dic);

    myInstance.Completed = completed;

    myInstance.Run();

    }

    static void completed(WorkflowApplicationCompletedEventArgs e)

    {

    System.Console.WriteLine(e.Outputs["v3"].ToString());

    }

    结果

    例:Code方式的[In/Out参数]使用

    说明:

    1. 定一个Activity名为[InOutArgumentActivity],其具有一个[string]类型 [In参数]myInOut

    2. 在xaml格式的workFlow中定义一个[string]型的变量 myVariable,默认值为"wxwinter"

    3. 在流程内部添加[WriteLine],打印myVariable的值

    4. 在流程内部添加[InOutArgumentActivity],将[InArgumentActivity. myInOut]绑定到流程的myVariable

    5. 在流程内部再添加[WriteLine],打印myVariable的值

    InOutArgumentActivity

    public sealed class InOutArgumentActivity : CodeActivity

    {

    public System.Activities.InOutArgument<string> myInOut

    { set; get; }

    protected override void Execute(CodeActivityContext context)

    {

    //1

    //string s1 = myInOut.Get(context);

    //myInOut.Set(context, "wxd:" + s1);

    //2

    string s2 = context.GetValue(myInOut);

    context.SetValue(myInOut, "wxd:" + s2);

    }

    }

    流程

    宿主

    static void inOutArgumentWorkflow()

    {

    WorkflowApplication myInstance = new WorkflowApplication(new InOutArgumentWorkflow());

    myInstance.Run();

    }

    结果

  • 相关阅读:
    [初学Untiy]SPACE SHOOTER TUTORIAL
    [OpenGL]第一章 OpenGL概述
    DSAA 第一章 引论
    Learn Python The Hard Way(27--)
    linux 系统tty、pty和pts 的概念及区别
    stuffs of install ubuntu
    第八章、Linux 磁盘与文件系统管理
    第七章 Linux文件与目录管理
    切换不同的echarts时,出现图标缩小,报警告,Can’t get dom width or height!
    echarts x轴的纵向区域随便点击获取点击的x轴那一纵向区域的值
  • 原文地址:https://www.cnblogs.com/freeliver54/p/2914550.html
Copyright © 2020-2023  润新知