WF4.0_2

转载 2012年03月21日 09:29:36
 

从本篇开始,将正式讲解WF4.0,本文主要涉及如下内容:Activity介绍, WF4.0 中工作流的结构,通过WriteLine演示InArgument<T>参数的使用

 

目录

1    Activity介绍及WriteLine Activity的使用    1

1.1    代码下载    1

1.2    什么是Activity    1

1.3    WF4.0 中工作流的结构    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 基础篇 (一)开始使用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="WriteLineText属性演示"

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;

}

}

相关文章推荐

WF 4.0 beta1活动概览(2):Flowchart、Messaging、PowerShell以及Migration

本文接着来介绍一下WF 4.0 beta1的其他几个活动分类:Flowchart、Messaging、PowerShell和Migration。FlowchartFlowchart是WF中新引进的一种...

WorkFlow入门Step.2—Building a Simple WorkFlow-For-WF4.0

开篇        上篇,我们简单的说明了WF的入门,那么院子里面已经有很多的高手,写了不少的关于工作流的应用,最近在集成工作流平台的过程中也是发现了不少的问题和心得体会,工作流果真不只是审批那么简单...

WorkFlow扩展篇Step.2—集合分组下的活动使用[下]-WF4.0

开篇        上篇我们主要是讲述了《WorkFlow扩展篇Step.1—集合分组下的活动使用[上]-WF4.0》如何使用集合Collection活动完成工作流的设计与开发,本篇我们将要继续讲述集...

WF4.0(2)----设计工作流

自从做了程序员,发现自己长胖了,而且自己的身体抵抗力也出了问题,最近身体不适,公司工作任务最近也很赶,上次写了WF4.0的简介,这次就工作中工作流设计的几种方式稍微总结一下。设计工作流包括四种方式:流...
  • syming
  • syming
  • 2014年09月16日 22:20
  • 381

WF3.0和4.0区别介绍

最近要研究下WF4.0的相关内容,将自己认识的、理解的写下来与大家共勉,有兴趣的朋友可以一起探讨一下。      相对于之前的3.0、3.5中的WorkFlow来说,4.0进行了很大的变动,包括流...

WF4.0 基础篇 (八) 控制流Activity

本节主要介绍IF, Switch, While, DoWhile, ForEach 的使用.   本文例子下载: http://files.cnblogs.com/foundation/c...

WF4.0 基础篇 (二) Activity介绍及WriteLine Activity的使用

目录 1    Activity介绍及WriteLine Activity的使用    1 1.1    代码下载    1 1.2    什么是Activity    1 1.3    WF4.0 ...

WF4.0 入门系列(五)WorkflowApplication

到现在为止我们创建的活动是由WorkflowInvoker通过Invoke方法来调用,WorkflowInvoker.Invoke()方法是一个同步方法,被调用的工作流和调用者在同一个线程中。 调用...

WF4.0 基础篇 (五) 数据的传递 Variable变量

本节主要介绍如何在WF4.0中使用变量,以及为变量赋值  本文例子下载: http://files.cnblogs.com/foundation/VariablesSample.rar http://...

WF4.0 基础篇 (二十二) Tracking

Tracking 介绍 WF跟踪是用来记录工作流执行情况 WF跟踪由以下几部分组成: 跟踪记录 Tracking Records 从工作流运行时...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:WF4.0_2
举报原因:
原因补充:

(最多只允许输入30个字)