快捷搜索:  as  test  1111  test aNd 8=8  test++aNd+8=8  as++aNd+8=8  as aNd 8=8

亚游官方网址是多少:WF从入门到精通(第四章):活动及workflow类型介绍



进修完本章,你将掌握:

1.workflow活动是如何形成的

2.顺序事情流和状态机事情流之间的差别

3.创建一个顺序事情流

4.创建一个状态机事情流

活动是WF中workflow处置惩罚的基础单位,要是你再把一个营业处置惩罚历程(或workflow义务)进行分化,你会发明它由更小、更细的义务组成。要是需设计这样一个大年夜的义务,它需把信息送到一系列的数据处置惩罚系统进行处置惩罚,那么子义务或许就包括这样一些工作:从数据库读取数据,应用这些数据天生一个文件,经由过程应用FTP或XML Web service把文件传到一个远程办事器上,标记信息已经被处置惩罚(如经由过程写入数据库并进入审计步骤),等等。这些子义务都聚焦到一个特定的义务上:读数据库、上传文件、进行审计。换句话说,它们是活动。

当你创建workflow时,你会把这些零丁的活动捆在一路,并让活动从一个转到另一个。一些活动可作为其它活动的容器。一些活动履行一个单一义务,这我们已谈过。基于容器的活动用来容纳其它活动,在前一章中我们谈及的root活动便是这种活动。root活动既可是一个顺序活动也可是一个状态机活动,本章中我们将对这些活动的类型进行阐明。

活动如何知道在本步骤完成后下一步将做什么呢?本章将主要把焦点放在这上面上。或许活动会以你创建一个root活动时指定的顺序履行,或者可能是仅在一个特定的事故发生后才去履行一个指定的活动。为了让我们更好地舆解活动,我们首先要去看看WF Activity工具,然后看看活动是如何链接在一路的。

活动先容:基础的事情单位

WF为你供给了一个Activity工具。Activity实现了一个看起来很简单的基类。它不会做许多智能义务,但它可进行workflow的互订交互(这可不简单)。活动工具由“Activity”派生,供给出了刁悍的功能。你可自若地创建你自己的活动,这个话题将在第13章(自定义活动)进行先容。事实上,本书的第二部分都是在先容活动(第7章至第13章)。表4-1列出了许多我们平日感兴趣的Activity的属性,表4-2列出了你会常常用到的措施。在第13章,你还会看到更多的和自定义活动相关的措施和属性。

表4-1 活动(Activity)的属性

属性

功能

Description

获取或设置用户定义的关于活动的描述。

Enable

获取或设置一个指明实例能否被履行和验证的值。

ExecutionResult

获取实例着末运行的结果(ActivityExecutionResult)。(有Canceled、Compensat亚游官方网址是多少ed、Faulted、None和Succeeded)。

ExecutionStatus

获得workflow的状态,其为ActivityExecutionStatus的罗列值(Canceling、Closed、Compensating、Executing、Faulting和Initialized)之一。

Name

获取或设置活动实例的名称。

Parent

获取包孕本活动的父活动。

WorkflowInstanceId

获取和该活动相关的workflow实例的标识符。

表4-2 活动(A亚游官方网址是多少ctivity)的措施

属性

功能

Cancel

取消活动的履行。

Clone

返回活动的一个深拷贝。

Execute

以同步要领运交活动。

GetActivityByName

要是在一个组合活动上履行,本措施将返回组合活动中所包孕的指定名称的活动。

Load

从一个流中加载一个活动的实例。

RaiseEvent

触发一个和指定的依附属性相关的事故。

RaiseGenericEvent

触发和所引用的依附属性相关的事故。RaiseEvent和RaiseGenericEvent的感化是一样的——第一个事故RaiseEvent直接指出DependencyPropenty,而RaiseGenericEvent则是一个泛型版本。

Save

把活动保存到流中。

活动的措施平日都具有虚拟和受保护的属性。目的是你可去覆盖它们,使其供给一个相符你自己的活动所必要的实现。今朝为止,最关键的措施是Execute。当workflow运行时调用这个措施时,你的活动便开始履行了。

活动可被分为两个大年夜类:组合活动和基础活动。组合活动包孕其它活动。一个极好的例子是我们今朝为止贯穿书中的Sequential活动(译者注:它是基于顺序事情流中所有活动的载体,在创建一个顺序事情流时Visual Studio就已为我们创建好了,可在视图设计器中看到)。今朝为止所有的法度榜样实例履行workflow实例的要领都是Sequential活动,它包孕其它活动,如它自身、Delay活动和Code活动。

基础活动,就像我刚谈到的Delay亚游官方网址是多少活动和Code活动,它们是一个基于单一义务的活动,我在本章早些时刻谈过它。终极,你必要基础活动去实际承载特定的义务。组合活动或许可批示义务和数据的流动,但基础活动能做更多。

ActivityExecutionContext工具

许多Activity工具的措施必要一个ActivityExecutionContext工具来进行输入。在workflow运行时把你要履行的workflow实例入队的时刻ActivityExecutionContext工具被创建,是以,它不是你直接要创建的工具。workflow运行时为你创建它。

ActivityExecutionContext工具的感化是供给活动以措施和办事,以便和workflow实例挂钩。这些如初始化,准时器和孕育发生履行流。它本色上是一个helper工具。在13章将更具体的对活动高低文(情况)进行评论争论。

备注:要是你认识ASP.NET编程的话,这个context工具本色上和System.Web.HttpContext工具的感化是一样的。其它相似的还有System.Threading.Thread.CurrentContext。所有这些Context工具的目标都是一样的:供给一个存储位置并轻易地规复一个当前履行实例的信息。这种环境下,它是一个履行傍边的活动的一个实例。

依附属性(Dependency Properties)

在表4-2中,你将看到一些依附属性(DependencyProperty)。什么是依附属性呢?

平日,要是你为类创建了一个属性的话,你也会在类中创建一个字段来存储该属性的值。普遍的代码如下:

class MyClass

{

protected Int32 _x=0;

public Int32 X

{

get { return _x;}

set { _x = value; }

}

}

字段_x更正式的叫法是backing store。在这个例子中,你的类为X属性供给了backing store。

然而,WF和WPF平日都异常必要去造访你类中的属性。WPF必要指明容器中控件的空间和大年夜小以便能最佳地被render。WF必要依附属性来方便地进交活动绑定。WF中ActivityBind类可为你方便地进交活动绑定。

活动验证

活动平日都具有验证能力,你可回忆第一章。

在第一章的例子中有这样一种环境,如在IfElse活动中未指定应该选择哪一个分支进行履行的前提时,Visual Studio会提醒我们。其它活动实现了不合的验证算法。要是我们编译带有验证差错的代码,我们的编译都邑掉败。我们必须矫正这些验证前提不充分的代码,才能编译和履行我们的workflow代码。

workflow类型

你已创建过workflow利用法度榜样,是以你可能留意到可以创建不合类型的workflow利用。

workflow利用法度榜样的类型很大年夜程度上依附于你选择的root活动。

只管你留意到在新项目对话框中仅仅只有两种workflow类型的利用法度榜样可供选择,

但实际运用中存在三种主要的类型。迄今为止本书中你已经创建过顺序事情流,是以它们并不神秘。

当你创建workflow时,你的活动以你规定的顺序履行。

另一种重新项目对话框中看到的workflow类型是状态机事情流。我将在本章评论争论它的更多细节。

第三种workflow类型基于顺序事情流,但它是规则驱动的。它不是仅仅履行你指定的义务,

而是由Policy活动和规则前提组成的基于规则的workflow,来履行基于你指定的营业规则workflow义务。

我们将在12章更多地进修这种workflow类型:“Policy活动”。由于这种类型的workflow以顺序活动作为root,

是以在新项目对话框中没有这种类型的workflow利用法度榜样的模板可供选择。你应以顺序事情流作为肇端,

然后增添基于规则的活动。

选择一种workflow类型

在什么环境下一种类型的workflow比另一种类型的workflow更好?你若何选择相宜的workflow类型呢?

表4-3可为你供给一些基础的参考。

表4-3 亚游官方网址是多少选择基础的workflow类型的鉴定表

workflow类型

适用前提

顺序事情流

workflow义务可以自治的履行,很少由外部进行节制。主要由workflow自身来对履行的义务进行节制。只有少量用户或没有用户来和它进行交互。它的root活动是SequentialWorkflow活动。

状态机事情流

workflow义务严重依附外部来节制和唆使其履行。预期有很多的用户交互(或其它外部节制)。对付基于状态的workflow,root活动是StateMachineWorkflow活动。

基于规则的事情流

营业逻辑中包孕繁杂的判断前提,既不像顺序事情流也不像状态机事情流。基于规则的事情流或者有一个顺序的root活动,或者有一个基于状态的root活动。  顺序事情流的抱负利用是去履行营业处置惩罚。要是你必要从源中读数据,处置惩罚这些数据,发送看护,往你的一个数据池中写入结果的话,顺序事情流或许将相符你的需求。这并不料味着顺序事情流不得当处置惩罚依附于用户交互的特定义务,如附和或不合意之类的审批义务。着实这样一些的用户交互不应成为workflow自身的关注焦点。

要是你必要大年夜量的用户交互,当你的workflow发送看护给用户或其它系统(有各类缘故原由:看护、必要批复、选择一个选项等等)以应用户或其它系统进行相应(它们的相应来自事故)时,状态机事情流可能是更好的选择。这些事故触发了workflow从一种处置惩罚状态转化到另一种处置惩罚状态。我将在本章后面及14章(“基于状态的事情流”)更多地评论争论这些。

着末一种workflow类型(我们将在12章看到)是基于规则的workflow。这些workflow基于营业规则鉴定是否进行转化,并鉴定转化后的目标是什么。这些workflow平日都预置了加倍繁杂的剧情。

你或许会觉得所有的workflow都能以基于规则的事情流类型来创建,但我们平日并不老是应用这种要领进行创建。由于其它的workflow类型,如顺序事情流和状态机事情流,它们能更轻易地创建和测试。

要用最相宜的workflow类型来构建你的系统。平日,在许多真实案例中你会发明你自己应用了所有三种workflow类型的组合。

顺序活动

让我们进一步深入顺序复合活动吧。只管迄今为止我们应用这些活动贯穿本书,但我在之前故意地迁延讨论关于它的更多内容。现在我们去理解了workflow运行时和workflow实例是如何事情的,并且知道workflow实例是我们正运行中的workflow活动的版本,我们能更好的懂得发生了什么。

履行顺序活动意味着这些活动以一个指定的顺序履行。首先要做的事最先履行,着末才做的事着末履行。一个顺序活动就像在根据目录履行。你必要记下首先要做的义务,接下来要做的义务和着末要做的义务。要是这些义务以顺序活动的要领存储,WF将以你指定的顺序精准地履行每个义务。

备注:本书中我们不会看到以动态的要领添加活动,但你应知道这是可以做到的。

在Visual Studio中,workflow的视图设计器可帮你展示你的workflow。当你创建一个顺序事情流利用法度榜样并在设计器中打开root活动时,你可把义务放到屏幕的最上方以便首先被履行。那些朝向底部的义务将晚些履行。从可视化界面可看出,活动运行的顺序是从上到下。当然顺序活动还可所以一个复合活动。

创建顺序事情流

在本书中迄今为止我们已创建过一些顺序事情流利用法度榜样,是以这里我不再创建它们。但我照样把完备的步骤重复一下。

建立一个顺序事情流利用法度榜样

1.打开Microsoft Vistual Studio 2008。

2.在文件菜单上,选择新建项目。然后将出现新项目对话框。

3.在项目类型面板中,展开Vistual C#树形节点,出现出基于workflow项目的模板。

4.在模板面板中,点击顺序事情流节制台利用法度榜样或顺序事情流库。前者创建一个可履行的利用法度榜样并以节制台的要领履行,而后者创建一个动态链接库并在其它利用法度榜样中应用。

5.输入你的项目或利用法度榜样的名称。

6.输入或选择你想保存你的项目的所在路径。

7.点击确定,Visual Studio 2008将为你建立一个基础项目,此中包孕workflow视图设计器用户界面。

然后,你就可方便地从对象箱中拖拽你必要的活动,调剂它们的属性以相符你的需求。要是你必要增添更多workflow库的项目,你可参考我前一章中的描述,或者简单地直接在你的利用法度榜样中增添一个新的workflow类。接下来我们还会看到大年夜量的例子。

状态活动

迄今为止在本书中我们还未看到过状态机事情流。14章完全把焦点放到基于状态的事情流的事情上,但我在这里将先容一些观点,我们也会快速地创建一个基于状态的事情流。

看看这样一个术语:有限状态机。我们把这个术语分成三个词:有限、状态和机械。有限,意思是我们将进行转化的状态的数目是有限的。状态是我们的利用法度榜样在事故发生时进行转化的逻辑前提。机械则意味自动化。我将用一个例子来说明。

在工程黉舍,或许会要求你应用有限状态机来设计一些数字系统。例如自动售货机和洗衣机。看看自动售货机,思虑一下机械事情必须具有的步骤,以便它能为你供给你必要的商品(如汽水、糖果、点心等等)。当你投入硬币时,它会集计你投入的硬币金额,直到你投入的硬币金额能购买商品时为止。当你选择一个商品时,它会反省存货清单。要是有货,它就把你选择的器械分发给你。

我们可以应用有限状态机来构建自动售货机。在有限自念头的图示中,我们应用圆来表示状态,箭头来表示状态之间的转换,转换由事故触发。图中有一个逻辑上的动身点和一个或多个逻辑上的终点。要是我们停在其它地方,我们的利用法度榜样就被称作未指定状态或者无效状态。我们的事情便是防止无效状态,如我们不能免费地获取商品,我们也不应该接管跨越商品价格的多余的钱。要是自动售货机吸收了钱但又未供给商品的话,用户毫无疑问会暴怒。

假象一下简化的自动售货机,让我们画出状态和导致状态转换的事故吧。正如我提到的,状态用圆来表示。使你的机械从一个状态变为另一个状态的事故用箭头表示。它们都可命名以便我们知道这些是什么状态和相关的转换。我们毫无疑问必要一个开始状态,如下图:

图4-2 有限状态机肇端状态符号

这个状态表示机械所处的这样一个位置:等待有人来投入一个硬币。是以看看当有人来投入一个硬币,但它还不敷买一个商品的环境,我们经由过程创建一个新状态来进行模拟,这个状态叫WaitCoins(等待硬币)状态,经由过程CoinInserted(投入硬币)事故转换到该状态,如图4-3:

图4-3 转换到WaitCoins状态

在用户投入足够金额的钱以能购买此中的商品之前,机械不停处在WaitCoins状态,并吸收CoinInserted事故,否则会触发SufficientCoins(金额足够)事故使我们的机械转到WaitSelection(等待选择)状态。在这里我们的自动售货时机耐心地等待用户选择一个商品。(在实际生活中,用户也能在任何时刻要回投入的硬币,为了简单起见,本例照样不斟酌它吧。)

当用户选择商品后,商品会被分发给用户,我们的(状态)转换也就停止了。完成状态,或者称作停止状态,由二个圆圈来指明,拜见图4-4。

图4-4

只管这个自动售货机在现实天下中或许太过于简单,但此处只是期望为你供给一个的简要描述,使你明白状态机是若何事情的。当我们设计状态机时,我们指明其离散的状态,或者逻辑位置来等待事故发生,然后我们指明转换机械状态的事故。有些事故可让机械返回到同一状态,如开始状态。其它事故则会在一个新的事故被处置惩罚后使机械转换到一个新的状态。没有事故被触发就没有状态的转换,抱负环境下应没有无法预感的事故或非常。

这种模型和我们用过的顺序事情流模型有很大年夜的不合。在顺序事情流里,活动以指定的顺序依次履行。一旦在该顺序链上的一个活动履行完它的义务,在该链上的下一个活动就开始履行它的事情。在workflow处置惩罚中或许有事故介入此中,但它们在workflow义务的处置惩罚(如准时器事故)上相对简单。

但状态时机花费大年夜量光阴在等待上。它们等待事故,依附变糊弄使它们的状态进行转换。状态自身不会引发事故(只管它们可能会调用外部代码)。它们便是事故处置惩罚,是以它们会耐心地等待它们必要的变糊弄进行状态的转换。寄托事故,它完全可能从一个状态切换到任何一个离散的不合的状态。要是我们的自动售货机处在WaitCoins状态,当吸收一个CoinInserted事故、RefundRequested事故或ImminentPowerdown事故时会分手做不合的工作。但我并未在图4-4中这个颠末简化的模型里画出这些事故,但我信托你能看懂不合的事故是如何驱动你的有限状态机转换到不合状态的。

在WF里,基于状态的workflow内的个别状态由State活动创建。State活动是一个复合(组合)活动,但它对容纳的子活动有限定。你将在14章进修到基于状态的workflow的更多器械。

备注:正如顺序事情流应用一个特其余Sequence活动来容纳全部事情流一样,基于状态的事情流也有一个特其余root活动做这事,这便是StateMachineWorkflow活动,它是一个特其余State活动。分外之处是它是必须的,这样当初始化履行时root活动就能吸收初始化参数。

创建一个状态机事情流利用法度榜样

如何创建一个基于状态的workflow呢?创建一个基于状态的事情流和创建一个顺序事情流一样轻易。我们现在就来看看如何创建一个状态机事情流。然而我们现在不会添加任何代码——虽然本书后亚游官方网址是多少面有很多时刻需我们这样去做,但我们现在只要必要懂得如何创建一个状态机事情流就行了。

创建一个状态机事情流利用

1.启动Microsoft Visual Studio 2008。

2.在文件菜单上,选择新建一个项目,这将打开新建项目对话框。

3.展开项目类型面板中的Visual C#节点,这将显示所有应用C#说话的项目类型。

4.在Visual C#节点下点击Workflow节点,这将显示所有基于事情流的项目模板。

5.在模板面板内,点击状态机事情流节制台利用法度榜样或状态机事情流库。如下图所示:

6.输入法度榜样或项目的名称。

7.输入或选择项目文件要保存的位置。

8.点击确定。Visual Studio 2008将为你创建一个包孕workflow视图设计器用户界面的项目,如下图:

我们必要去触发激发事情流改变状态的事故,是以,我们需理解workflow实例是如何和它们的宿主利用法度榜样进行通信的。我们将在第八章(“调用外部措施”)看到宿主和workflow之间的通信,在第十章(“事故活动”)中我们将进修状态机事情流的事故驱动。

相关文章:

WF从入门到精晓(第一章):WF简介

WF从入门到精晓(第二章):workflow运行时

WF从入门到精晓(第三章):workflow实例

WF从入门到精晓(第四章):活动及workflow类型先容

WF从入门到精晓(第五章):workflow跟踪

WF从入门到精晓(第六章):加载和卸载实例

WF从入门到精晓(第七章):基础活动的操作

WF从入门到精晓(第八章):调用外部措施及事情流(一)

WF从入门到精晓(第八章):调用外部措施及事情流(二)

WF从入门到精晓(第九章):逻辑流活动

WF从入门到精晓(第十章):事故活动

WF从入门到精晓(第十一章):并交活动

WF从入门到精晓(第十二章):策略和规则

WF从入门到精晓(第十三章):打造自定义活动(一)

WF从入门到精晓(第十三章):打造自定义活动(二)

WF从入门到精晓(第十四章):基于状态的事情流

WF从入门到精晓(第十五章):事情流和事务

WF从入门到精晓(第十六章):声明式事情流

WF从入门到精晓(第十七章):关联及本地主机通信(上)

WF从入门到精晓(第十七章):关联及本地主机通信(下)

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

您可能还会对下面的文章感兴趣: