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

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

 

本文例子下载:

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

本文例子说明

WF4.0 基础篇 (六) 数据的传递 Arguments 参数_第1张图片

WF4.0 基础篇 (六) 数据的传递 Arguments 参数_第2张图片

 

 

数据的传递 Arguments 参数

 

Arguments 参数概述

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

参数有如下属性:

Name

参数的名子

Direction

参数的类型

In

Out

In/Out

Propery

Argument type

参数的数据类型

Default value

参数的默认值

In:使用的是表达式

Out,In/Out :无默认值

Propery : 值类型

IsRequired

是否必填

 

添加参数

WF4.0 基础篇 (六) 数据的传递 Arguments 参数_第3张图片

 

 

In参数

 

System.Activities.InArgument<T>

WF4.0 基础篇 (六) 数据的传递 Arguments 参数_第4张图片

 

[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的值

流程

WF4.0 基础篇 (六) 数据的传递 Arguments 参数_第5张图片

宿主

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();

}

结果

WF4.0 基础篇 (六) 数据的传递 Arguments 参数_第6张图片

 

例: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);

}

}

流程

WF4.0 基础篇 (六) 数据的传递 Arguments 参数_第7张图片

宿主

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();

}

结果

WF4.0 基础篇 (六) 数据的传递 Arguments 参数_第8张图片

 

 

Out参数

 

System.Activities.OutArgument<T>

WF4.0 基础篇 (六) 数据的传递 Arguments 参数_第9张图片

 

[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的值

流程

WF4.0 基础篇 (六) 数据的传递 Arguments 参数_第10张图片

宿主

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());

}

结果

WF4.0 基础篇 (六) 数据的传递 Arguments 参数_第11张图片

 

例: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);

}

}

流程

WF4.0 基础篇 (六) 数据的传递 Arguments 参数_第12张图片

宿主

static void outArgumentWorkflow()

{

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

 

myInstance.Run();

}

结果

WF4.0 基础篇 (六) 数据的传递 Arguments 参数_第13张图片

 

 

In/Out参数

 

System.Activities.InOutArgument<T>

WF4.0 基础篇 (六) 数据的传递 Arguments 参数_第14张图片

 

[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的值

流程

WF4.0 基础篇 (六) 数据的传递 Arguments 参数_第15张图片

宿主

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());

}

结果

WF4.0 基础篇 (六) 数据的传递 Arguments 参数_第16张图片

 

例: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);

}

}

流程

WF4.0 基础篇 (六) 数据的传递 Arguments 参数_第17张图片

宿主

static void inOutArgumentWorkflow()

{

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

myInstance.Run();

}

结果

WF4.0 基础篇 (六) 数据的传递 Arguments 参数_第18张图片

 

 

转帖::http://www.cnblogs.com/foundation/archive/2009/11/25/1610738.html

你可能感兴趣的:(workflow,String,object,Class)