程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> WF4.0基礎篇(二) Activity介紹及WriteLine Activity的使用

WF4.0基礎篇(二) Activity介紹及WriteLine Activity的使用

編輯:關於.NET

從本篇開始,將正式講解WF4.0,本文主要涉及如下內容:Activity介紹, WF4.0 中工作流的結構,通過WriteLine演示 InArgument<T>參數的使用

Activity介紹及WriteLine Activity的使用

代碼下載

[WF4.0 基礎篇 (一)開始使用WF] 的代碼

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

本文代碼

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

代碼結構說明

什麼是Activity

Activity在WF中是一個最基本的概念.當談及Activity時,通常是指如下兩個概念Activty Class 或 在 工作流中任意Activity派生類的 統稱

一.先說一下Activty Class

這個概念比較簡單,就是指 [System.Activities.Activity] 這個NET4.0 類庫中所帶的類

[System.Activities.Activity]是工作流結構的基類,下圖是[System.Activities.Activity]與派生類的結構

二.再說一下"工作流中任意Activity派生類的統稱"是什麼意思

在很多翻譯文章中,當其要表述"工作流中任意Activity派生類的統稱"這個概念時,會將[Activity]翻譯為[活動],其實我更 喜歡將其翻譯為[節點]

WF4.0的流程結構與我們常用的流程圖很象,下面我們看一下一個流程圖的例子:

(注:從漢語的角度講,[節點]與[結點]是不同的,[節點]是指上圖中的矩形,[結點]則是指上圖中矩形間的連線)

我們再看一下WF4.0流程的例子

我們可以將WF4.0流程中的[活動]理解為流程圖的[節點]

(注: WF4.0流程中只有[節點]沒有[結點],從數據結構的角度講上面的兩個例子分別是[圖結構]和兩種描述方式,第一個例子是([節點] +[結點]),第二個例子是([節點]+ [節點關系自描述]) ,這個概念先講到這裡,後面我會專門寫一篇從數據結構的角度分析WF4.0流程結構的 文章)

WF4.0 中工作流的結構

WF4.0工作流從表現形式上看是圖結構,但其實質上仍是樹結構,有[根],有鮮明的[層次關系]這些都是樹的基本特征.

只不過WF4.0工作流采用了[枝葉樹]的方式,並且提供了FlawCahr這個[活動]用以在其內部實現[圖結構]

下面我具體說明一下枝葉樹結構:

枝葉樹是指在樹結構上存在兩類節點,一類是支節點,一類是葉節點.支節點下可以有支節點也可以有葉節點,葉節點下不能再有任何節點 .這與磁盤結構很象.支節點像文件夾,葉節點像文件.

WF4.0的活動也是這樣.其中[FlowCahr]與[Sequence]是兩個常用的支節點[活動]

[FlowCahr]用於實現一個圖結構的[活動]

[Sequence]則用於實現從上到下順序執行的[活動]

關於這兩個[活動]在後面的文章中會有詳細介紹,下面我們先學習一個簡單的葉節點[活動], WriteLine

WriteLine Activity

WriteLine是一個用於輸出字符串的Activity,在[開始使用WF4.0]一文中,我們已經使用它了,在這量我將對WriteLine的功能做具體講解 ,並引入一個WF4.0中很重要的概念"表達式"

類名 System.Activities.Statements.WriteLine 文件 System.Activities.dll 結構說明 繼承 CodeActivity 是一個 sealed類 定義了[InArgument<string> Text屬性] 與[InArgument<TextWriter> TextWriter屬性] override 了 [CacheMetadata方法] 與 [Execute方法] 功能說明 WriteLine類調用[TextWriter 屬性]所指定的[System.IO.TextWriter 對像]輸出[Text 屬性] 的值 如果沒指定[TextWriter 屬性],默認為控制台輸出[Text 屬性] 的值

Text 屬性

是一個InArgument<string> 類型參數 ,用於接收結果值為[string]的VB表達式

(關於InArgument<T>與WF4.0中的VB表達式會在後面的文章中詳細介紹)

流程

xaml

<Activity mc:Ignorable="sap"
x:Class="WriteLineActivitySample.Workflow1"
mva:VisualBasic.Settings="Assembly references and imported namespaces serialized as XML namespaces"
xmlns="http://schemas.microsoft.com/netfx/2009/xaml/activities"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:mv="clr-namespace:Microsoft.VisualBasic;assembly=System"
xmlns:mva="clr-namespace:Microsoft.VisualBasic.Activities;assembly=System.Activities"
xmlns:s="clr-namespace:System;assembly=mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
xmlns:s1="clr-namespace:System;assembly=mscorlib"
xmlns:s2="clr-namespace:System;assembly=System"
xmlns:s3="clr-namespace:System;assembly=System.Xml"
xmlns:s4="clr-namespace:System;assembly=System.Core"
xmlns:sad="clr-namespace:System.Activities.Debugger;assembly=System.Activities"
xmlns:sap="http://schemas.microsoft.com/netfx/2009/xaml/activities/presentation"
xmlns:scg="clr-namespace:System.Collections.Generic;assembly=System"
xmlns:scg1="clr-namespace:System.Collections.Generic;assembly=System.ServiceModel"
xmlns:scg2="clr-namespace:System.Collections.Generic;assembly=System.Core"
xmlns:scg3="clr-namespace:System.Collections.Generic;assembly=mscorlib"
xmlns:sd="clr-namespace:System.Data;assembly=System.Data"
xmlns:sd1="clr-namespace:System.Data;assembly=System.Data.DataSetExtensions"
xmlns:sl="clr-namespace:System.Linq;assembly=System.Core"
xmlns:st="clr-namespace:System.Text;assembly=mscorlib"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
>
<WriteLine
DisplayName="WriteLine的Text屬性演示"
sad:XamlDebuggerXmlReader.FileName="d:\users\wxd\documents\visual studio 2010 \Projects\WriteLineActivitySample\WriteLineActivitySample\Workflow1.xaml"
sap:VirtualizedContainerService.HintSize="213,200"
Text="[String.Format(&quot;{0}:{1}&quot;, &quot;wxwinter&quot;, System.DateTime.Now.ToString())] "
/>
</Activity>

運行工作流

class Program
{
static void Main(string[] args)
{
//WriteLine的Text屬性演示
WorkflowInvoker.Invoke(new Workflow1());
//控制台停屏看效果
System.Console.Read();
}
}

運行結果

TextWriter 屬性

是一個InArgument<TextWriter> 類型參數 ,用於接收結果值為[TextWriter]的VB表達式

自定義TextWriter

public class myTextWriter : System.IO.TextWriter
{
public override Encoding Encoding
{
get { return Encoding.UTF8; }
}
public override void WriteLine(string value)
{
System.Console.WriteLine("wxwinter:" + value);
}
}

流程

xaml

<Activity ...>
<WriteLine DisplayName="WriteLine的TextWriter屬性演示"
Text="wxd"
TextWriter="[New WriteLineActivitySample.myTextWriter()]"
/>
</Activity>

運行工作流

class Program
{
static void Main(string[] args)
{
//WriteLine的TextWriter屬性演示
WorkflowInvoker.Invoke(new Workflow2());
//控制台停屏看效果
System.Console.Read();
}
}

運行結果

在代碼中使用WriteLine

class Program
{
static void Main(string[] args)
{
WriteLine wxwinterActivity = new WriteLine();
InArgument<string> inArgument = new InArgument<string>(getValue("wxd"));
wxwinterActivity.Text = inArgument;
WorkflowInvoker.Invoke(wxwinterActivity);
System.Console.Read();
}
static string getValue(string p)
{
return "wxwinter:" + p;
}
}

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