现在的位置: 首页 > 综合 > 正文

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

2014年04月05日 ⁄ 综合 ⁄ 共 5337字 ⁄ 字号 评论关闭

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

 

本文例子下载:

http://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();

}

结果

抱歉!评论已关闭.