程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> WF 4.0基礎篇(六) 數據的傳遞 Arguments參數

WF 4.0基礎篇(六) 數據的傳遞 Arguments參數

編輯:關於.NET

本節主要介紹如何在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();

}

結果

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved