在WF3.x时代我们可以使用声明性的条件和代码方式的条件,也可以使用支持正向链接的RuleSet。当然我们还可以使用基于CodeDOM的API来用代码的方式声明。
在微软刚刚发布的WF4.0 Beta1中我们已经看不到这些了,WF4.0提供了统一的完全声明式的表达式(Expression)。现在的版本只支持使用VB来构建表达式(Expression),但是在设计上是可以支持任何语言的,微软也会在未来的版本中提供对其他语言的支持。
WF4.0中表达式是ValueExpression类型的,我们在VS中构造表达式的窗口是ExpressionTextBox类的实例,它也是可以再外部重新宿主的,只不过只有和VS结合的
时候才有智能感知和颜色的支持。在表达式中我们可以引用工作流中的变量和参数。这些信息都会被序列化到XAML中。提供了表达式(Expression)并不是就不
要原来的方式,微软在开发WF4.0一个很重要的部分就是对WF3.x全面兼容。在WF4.0中提供了一个Interop活动可以帮助我们很好的完成现有WF3.x程序的迁移,
我们只需要简单的设置它的Body Type属性即可,我们可以将WF4.0中的变量和参数绑定到WF3.x中的依赖属性上,如下图:
在WF4.0 beta1中没有提供对正向链接的RuleSet功能,官方已经声明会在将来的版本中加大这部分的投入。现在如果我们要想在WF4.0 Beta1使用类似的功能我们可以开发一个自定义活动来完成,下面的例子来源于WF Samples中,首先是活动的代码部分:
namespace Microsoft.Samples.Rules { using System; using System.Activities; using System.ComponentModel; using System.Workflow.Activities.Rules; using System.Workflow.ComponentModel.Compiler; [Designer(typeof(Microsoft.Samples.Rules.PolicyDesigner))] public sealed class Policy40Activity : NativeActivity { public RuleSet RuleSet { get; set; } [IsRequired] public InOutArgument TargetObject { get; set; } public OutArgument<ValidationErrorCollection> ValidationErrors { get; set; } protected override void OnOpen(DeclaredEnvironment environment) { if (this.RuleSet == null) { throw new System.ArgumentNullException("RuleSet property can't be null"); } } protected override void Execute(ActivityExecutionContext context) { // validate before running Type targetType = this.TargetObject.Get(context).GetType(); RuleValidation validation = new RuleValidation(targetType, null); if (!this.RuleSet.Validate(validation)) { // set the validation error out argument this.ValidationErrors.Set(context, validation.Errors); // throw a validation exception throw new ValidationException(string.Format("The ruleset is not valid. {0} validation errors
found (check the ValidationErrors property for more information).", validation.Errors.Count)); } // execute the ruleset object evaluatedTarget = this.TargetObject.Get(context); RuleEngine engine = new RuleEngine(this.RuleSet, validation); engine.Execute(evaluatedTarget); // update the target object this.TargetObject.Set(context, evaluatedTarget); } } }
下面是活动的设计器部分,在WF4.0中提供了对活动设计器的可视化支持:
<sad:WorkflowElementDesigner x:Class="Microsoft.Samples.Rules.PolicyDesigner" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:sad="clr-namespace:System.Activities.Design;assembly=System.Activities.Design" xmlns:sadv="clr-namespace:System.Activities.Design.View;assembly=System.Activities.Design"> <sad:WorkflowElementDesigner.Resources> <sadv:ArgumentToExpressionConverter x:Uid="sadv:ArgumentToExpressionConverter_1"
x:Key="argumentToExpressionConverter" /> </sad:WorkflowElementDesigner.Resources> <Grid> <Grid.RowDefinitions> <RowDefinition x:Uid="RowDefinition_1" /> <RowDefinition x:Uid="RowDefinition_2" /> </Grid.RowDefinitions> <Grid.ColumnDefinitions> <ColumnDefinition x:Uid="ColumnDefinition_1" Width="70*" /> <ColumnDefinition x:Uid="ColumnDefinition_2" Width="196*" /> </Grid.ColumnDefinitions> <Label Content="Target Object" Name="label1" Margin="0,5,0,7"/> <sadv:ExpressionTextBox x:Uid="ExpressionTextBox_1" Grid.Row="0" Grid.Column="1" AutomationProperties.AutomationId="TargetObject" Width="190" Margin="9,7,9,7" MaxLines="1" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto" Expression="{Binding Path=ModelItem.TargetObject, Mode=TwoWay, Converter={StaticResource
argumentToExpressionConverter}, ConverterParameter=InOut}" UseLocationExpression="True" OwnerActivity="{Binding Path=ModelItem, Mode=TwoWay}" /> <Button Content="Edit RuleSet" Name="button1" Width="190" Margin="9,9,9,9" Click="button1_Click"
Grid.Row="1" Grid.Column="1" /> </Grid> </sad:WorkflowElementDesigner> 效果如下图:
下面是当点击按钮后,会出现RuleSet的编辑器:
using System; using System.Activities; using System.Windows; using System.Windows.Forms; using System.Workflow.Activities.Rules; using System.Workflow.Activities.Rules.Design; namespace Microsoft.Samples.Rules { // Interaction logic for PolicyDesigner.xaml public partial class PolicyDesigner { public PolicyDesigner() { InitializeComponent(); } private void button1_Click(object sender, RoutedEventArgs e) { // verifiy that TargetObject property has been configured object targetObject = ModelItem.Properties["TargetObject"].ComputedValue; if (targetObject == null) { System.Windows.MessageBox.Show("TargetObject needs to be configured before adding the rules"); return; } // verify that target object is correctly configured InOutArgument arg = targetObject as InOutArgument; if (arg == null) { System.Windows.MessageBox.Show("Invalid target object"); return; } // open the ruleset editor Type targetObjectType = arg.ArgumentType; RuleSet ruleSet = ModelItem.Properties["RuleSet"].ComputedValue as RuleSet; if (ruleSet == null) ruleSet = new RuleSet(); RuleSetDialog ruleSetDialog = new RuleSetDialog(targetObjectType, null, ruleSet); DialogResult result = ruleSetDialog.ShowDialog(); // update the model item if (result == DialogResult.OK)
{ ModelItem.Properties["RuleSet"].SetValue(ruleSetDialog.RuleSet); } } } }
这样我们就可以再WF4.0中使用该活动了,如下图:
相关文章:
WF4.0 Beta1之旅(1):基本介绍
WF4.0 Beta1之旅(2):异常处理
WF4.0 Beta1之旅(3):全新的FlowChart
WF4.0 Beta1之旅(4):Bookmark的使用
发表评论
-
平淡的2007
2007-12-24 08:04 813早上起来,送女朋友去公交车站,然后回来赶紧打开电脑,先 ... -
DreamSpark发布,高校学生免费使用Visual Studio 2008 Professional Edition 等微软软件
2008-02-20 13:23 1410今天上网无意中搜索到学生可以免费使用VS2008专业版,后来又 ... -
坚持学习WF(1):从HelloWorld开始
2008-04-04 16:30 887[置顶]坚持学习WF文章索 ... -
坚持学习WF(2):WF创作模式和设计时工具
2008-04-05 17:19 633[置顶]坚持学习WF文章索 ... -
坚持学习WF(3):WF框架概览
2008-04-08 07:27 781[置顶]坚持学习WF文章索 ... -
坚持学习WF(4):活动(Activity)和依赖属性(DependencyProperty)
2008-04-12 00:01 1141[置顶]坚持学习WF文章索引 活动(Activity) 活动 ... -
坚持学习WF(5):自定义活动(CustomActivity)
2008-04-13 15:25 918当WF提供的标准活动不能满足我们的需求的时候,我们就需要定义自 ... -
MOSS点滴(1):如何开发和部署feature
2008-04-16 21:35 834Features 是MOSS 2007以开箱即用的一套新功能, ... -
MOSS点滴(2):自定义Application Page
2008-04-19 20:07 841在MOSS中后台管理的页面都是Application Pag ... -
坚持学习WF(6):开发可复用的宿主程序
2008-04-21 21:45 692我们之前写工作流宿主 ... -
MOSS点滴(3):说说MOSS中的母版页
2008-04-25 21:15 1176MOSS中有两种页面:Site P ... -
MOSS点滴(4):实现Form认证
2008-04-29 21:12 701本文主要参考了网上的一些文章,但有些文章有些地方说的不是很明确 ... -
坚持学习WF(7):流程控制(Flow Control)
2008-04-30 18:10 829本文主要说说WF中和流 ... -
坚持学习WF(8):本地服务之调用外部方法
2008-05-09 08:17 754WF提供了一组核心服务 ... -
MOSS中的WebPart开发
2008-05-10 13:53 1054由于在asp.net1.1的时候asp.net中还没有webp ... -
坚持学习WF(9):本地服务之事件处理
2008-05-28 07:49 792[置顶]坚持学习WF文章索引 一:先来介绍两个活动 Even ... -
坚持学习WF(10):在工作流中使用关联
2008-06-01 13:03 686[置顶]坚持学习WF文章索 ... -
坚持学习WF(11):工作流通信与队列
2008-06-07 15:45 729[置顶]坚持学习WF文章索引 WF 提供的通信模型是构建于 ... -
MOSS中创建自定义内容类型
2008-06-12 20:23 1098一:简要介绍 某类内容 ... -
.NET中IDisposable接口的基本使用
2008-06-15 12:01 944首先来看MSDN中关于这个接口的说明: [ComVisible ...
相关推荐
在这个“WF4.0 Beta1之旅(3)”中,我们将聚焦于FlowChart工作流模型的源码分析,这为我们提供了更深入理解WF4.0的工作方式和设计思想的机会。 FlowChart工作流模型是一种图形化的编程模型,它通过节点(如决策、...
- **规则引擎**: WF4.0中的决策可以通过条件活动或规则引擎来实现,这允许动态改变流程行为。 - **错误处理和异常处理**: 通过异常处理和补偿活动,可以优雅地处理流程中的错误和异常情况。 总之,"WF4.0入门系列...
5. **规则引擎**:WF4.0支持规则驱动的编程,允许动态修改工作流的行为。实例可能包含使用规则引擎来决定流程执行路径的代码。 6. **监控与调试**:WF4.0提供了强大的工具来监控和调试工作流,实例可能展示如何设置...
【Windows Server AppFabric 与 WF4.0 应用程序宿主】 Windows Server AppFabric 是微软推出的一个中间件平台,它提供了对分布式应用程序的支持,尤其是针对Windows Workflow Foundation (WF4.0) 和 WCF(Windows ...
AppFabric Hosting Services 则专注于简化WCF(Windows Communication Foundation)服务的管理和运行,尤其是与WF(Windows Workflow Foundation)服务配合的情况。它提供了一个框架,使得在AppFabric环境中托管和...
5. 工作流服务:创建基于WF4.0的工作流服务,与WCF集成实现服务间通信。 通过深入学习WF4.0网络教程,你将能够熟练运用WF4.0来设计、实现和维护高效、灵活的业务流程应用,从而提高工作效率,简化复杂的业务逻辑。...
这个系统利用了ASP.NET作为前端开发框架,提供用户交互界面,而WF4.0则作为后台的工作流引擎,负责处理请假流程的逻辑。 **ASP.NET** 是微软推出的用于构建动态网站、Web应用程序和Web服务的开源平台。它基于.NET ...
1. **WF4.0基础知识**:了解WF4.0的核心概念,如活动、工作流实例、触发器、变量和数据绑定。 2. **状态机工作流**:掌握状态机工作流的结构和设计原则,包括初始状态、最终状态、状态转换和事件触发。 3. **...
WF 4.0,全称为Windows Workflow Foundation 4.0,是微软.NET Framework 4.0中的一个核心组件,用于构建工作流驱动的应用程序。它提供了强大的工具和框架,允许开发者设计、执行和管理复杂的业务流程。Activity ...
WF4.0(Windows Workflow Foundation 4.0)是微软.NET Framework 4.0中引入的一个框架,用于构建和管理工作流应用。WF4.0提供了全新的架构和设计,简化了工作流的开发过程,提高了可维护性和灵活性。在本学习笔记中...
3. **规则引擎**:WF4.0集成了规则引擎,允许开发者在工作流中嵌入复杂的业务规则,使得流程可以根据这些规则动态改变行为。 4. **自定义活动**:开发者可以创建自己的活动,这些活动可以封装复杂的行为或者与其他...
1. **活动(Activity)**:这是WF 4.0的基本构建块,表示工作流中的一个操作或任务。可以是内置的简单动作,如赋值、条件判断,也可以是自定义的复杂逻辑。 2. **工作流(Workflow)**:由一系列活动组成,描述了...
7. **规则引擎(Rule Engine)**:WF4.0包含了内置的规则引擎,使得在工作流中添加基于规则的逻辑变得容易。 8. **工作流服务(Workflow Services)**:结合WCF(Windows Communication Foundation),WF4.0可以...
wf4.0应用asp.net 这个示例将包括WF4.0的大部分知识点。包括: 1、持久化服务 2、跟踪服务 3、自定义扩展 4、WCF Workflow Service 5、WorkflowServiceHost 6、使用Interop活动去调用WF3.0工作流程
.NET Framework 4.0 Beta 1是微软发布的一个重要的软件开发平台,用于构建、运行基于Windows操作系统的应用程序。这个版本的.NET Framework引入了许多新特性和改进,旨在提高开发者的工作效率和应用程序的性能。以下...
[Pro.ENGINEER.Wildfire.4.0多国语言正式版].ProE_WF4.0_crack.rar
[Packt Publishing] WF 4.0 经典实例 (英文版) [Packt Publishing] Microsoft Windows Workflow Foundation 4.0 Cookbook (E-Book) ☆ 出版信息:☆ [作者信息] Andrew Zhu [出版机构] Packt Publishing [出版...
WF4.0,全称Windows Workflow Foundation 4.0,是微软.NET Framework 4.0中引入的一个工作流框架,用于构建和执行流程化的应用程序。本篇将深入讲解WF4.0的基础知识,并以VS2012和C#为开发环境进行实战演示。 在WF...
WF4.0(Windows Workflow Foundation 4.0)是微软.NET Framework 4.0中引入的一个强大工作流引擎,用于构建高度灵活、可扩展的工作流应用程序。它为开发者提供了丰富的功能,使得创建复杂的业务流程变得更为简单。WF...