WF4.0 基础篇 (二) Activity介绍及WriteLine Activity的使用
?
從本篇開始,將正式講解WF4.0,本文主要涉及如下內(nèi)容:Activity介紹, WF4.0 中工作流的結(jié)構(gòu),通過WriteLine演示InArgument<T>參數(shù)的使用
?
目錄
1????Activity介紹及WriteLine Activity的使用????1
1.1????代碼下載????1
1.2????什么是Activity????1
1.3????WF4.0 中工作流的結(jié)構(gòu)????2
1.4????WriteLine Activity????3
1.4.1????Text 屬性????3
1.4.2????TextWriter 屬性????4
1.4.3????在代碼中使用WriteLine????5
?
?
Activity介紹及WriteLine Activity的使用
?
代碼下載
[WF4.0 基礎(chǔ)篇 (一)開始使用WF] 的代碼
http://files.cnblogs.com/foundation/helloWorkflow.rar
?
本文代碼
http://files.cnblogs.com/foundation/WriteLineActivitySample.rar
代碼結(jié)構(gòu)說明
?
什么是Activity
Activity在WF中是一個最基本的概念.當(dāng)談及Activity時,通常是指如下兩個概念A(yù)ctivty Class 或 在 工作流中任意Activity派生類的統(tǒng)稱
?
?
一.先說一下Activty Class
這個概念比較簡單,就是指 [System.Activities.Activity] 這個NET4.0 類庫中所帶的類
[System.Activities.Activity]是工作流結(jié)構(gòu)的基類,下圖是[System.Activities.Activity]與派生類的結(jié)構(gòu)
?
?
二.再說一下"工作流中任意Activity派生類的統(tǒng)稱"是什么意思
在很多翻譯文章中,當(dāng)其要表述"工作流中任意Activity派生類的統(tǒng)稱"這個概念時,會將[Activity]翻譯為[活動],其實(shí)我更喜歡將其翻譯為[節(jié)點(diǎn)]
WF4.0的流程結(jié)構(gòu)與我們常用的流程圖很象,下面我們看一下一個流程圖的例子:
(注:從漢語的角度講,[節(jié)點(diǎn)]與[結(jié)點(diǎn)]是不同的,[節(jié)點(diǎn)]是指上圖中的矩形,[結(jié)點(diǎn)]則是指上圖中矩形間的連線)
?
我們再看一下WF4.0流程的例子
?
我們可以將WF4.0流程中的[活動]理解為流程圖的[節(jié)點(diǎn)]
(注: WF4.0流程中只有[節(jié)點(diǎn)]沒有[結(jié)點(diǎn)],從數(shù)據(jù)結(jié)構(gòu)的角度講上面的兩個例子分別是[圖結(jié)構(gòu)]和兩種描述方式,第一個例子是([節(jié)點(diǎn)]+[結(jié)點(diǎn)]),第二個例子是([節(jié)點(diǎn)]+ [節(jié)點(diǎn)關(guān)系自描述]) ,這個概念先講到這里,后面我會專門寫一篇從數(shù)據(jù)結(jié)構(gòu)的角度分析WF4.0流程結(jié)構(gòu)的文章)
?
WF4.0 中工作流的結(jié)構(gòu)
WF4.0工作流從表現(xiàn)形式上看是圖結(jié)構(gòu),但其實(shí)質(zhì)上仍是樹結(jié)構(gòu),有[根],有鮮明的[層次關(guān)系]這些都是樹的基本特征.
只不過WF4.0工作流采用了[枝葉樹]的方式,并且提供了FlawCahr這個[活動]用以在其內(nèi)部實(shí)現(xiàn)[圖結(jié)構(gòu)]
下面我具體說明一下枝葉樹結(jié)構(gòu):
枝葉樹是指在樹結(jié)構(gòu)上存在兩類節(jié)點(diǎn),一類是支節(jié)點(diǎn),一類是葉節(jié)點(diǎn).支節(jié)點(diǎn)下可以有支節(jié)點(diǎn)也可以有葉節(jié)點(diǎn),葉節(jié)點(diǎn)下不能再有任何節(jié)點(diǎn).這與磁盤結(jié)構(gòu)很象.支節(jié)點(diǎn)像文件夾,葉節(jié)點(diǎn)像文件.
WF4.0的活動也是這樣.其中[FlowCahr]與[Sequence]是兩個常用的支節(jié)點(diǎn)[活動]
[FlowCahr]用于實(shí)現(xiàn)一個圖結(jié)構(gòu)的[活動]
[Sequence]則用于實(shí)現(xiàn)從上到下順序執(zhí)行的[活動]
關(guān)于這兩個[活動]在后面的文章中會有詳細(xì)介紹,下面我們先學(xué)習(xí)一個簡單的葉節(jié)點(diǎn)[活動], WriteLine
?
?
WriteLine Activity
WriteLine是一個用于輸出字符串的Activity,在[開始使用WF4.0]一文中,我們已經(jīng)使用它了,在這量我將對WriteLine的功能做具體講解,并引入一個WF4.0中很重要的概念"表達(dá)式"
類名 | System.Activities.Statements.WriteLine |
文件 | System.Activities.dll |
結(jié)構(gòu)說明 | 繼承 CodeActivity 是一個 sealed類 定義了[InArgument<string> Text屬性] 與[InArgument<TextWriter> TextWriter屬性] override 了 [CacheMetadata方法] 與 [Execute方法] |
功能說明 | WriteLine類調(diào)用[TextWriter 屬性]所指定的[System.IO.TextWriter 對像]輸出[Text 屬性] 的值 如果沒指定[TextWriter 屬性],默認(rèn)為控制臺輸出[Text 屬性] 的值 |
?
Text 屬性
是一個InArgument<string> 類型參數(shù) ,用于接收結(jié)果值為[string]的VB表達(dá)式
(關(guān)于InArgument<T>與WF4.0中的VB表達(dá)式會在后面的文章中詳細(xì)介紹)
流程 | |
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("{0}:{1}", "wxwinter", System.DateTime.Now.ToString())]" /> </Activity> |
運(yùn)行工作流 | class Program { static void Main(string[] args) { //WriteLine的Text屬性演示 WorkflowInvoker.Invoke(new Workflow1()); ? //控制臺停屏看效果 System.Console.Read(); } } |
運(yùn)行結(jié)果 |
?
TextWriter 屬性
是一個InArgument<TextWriter> 類型參數(shù) ,用于接收結(jié)果值為[TextWriter]的VB表達(dá)式
自定義 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> |
運(yùn)行工作流 | ? class Program { static void Main(string[] args) { //WriteLine的TextWriter屬性演示 WorkflowInvoker.Invoke(new Workflow2()); ? //控制臺停屏看效果 System.Console.Read(); } } |
運(yùn)行結(jié)果 |
?
在代碼中使用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; } } |
?
總結(jié)
以上是生活随笔為你收集整理的WF4.0 基础篇 (二) Activity介绍及WriteLine Activity的使用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SSL证书安装指南 - Winodws
- 下一篇: IT人的十八般武艺-序言