VS2008 WorkFlow使用CodeActivity添加工作流逻辑

来源:互联网 发布:mac微信接收的文件 编辑:程序博客网 时间:2024/04/30 18:05
这一部分中,我们来看一看如何向工作流添加自定义逻辑。自定义逻辑在这里指的是向工作流添加我们自己的代码。完成这一目标,可以有两种机制:使用CodeActivity和开发自定义活动。在后面我们会看到这两种方法是如何实现的。这里用到的示例,是一个订货的流程。我们假定它包含了下述的几个步骤:

l 验证发送订单的帐号ID,并且查询它的信用卡余额;

l 验证待购商品的ID,并获取它的价格;

l 如果帐号和商品都是有效的,并且帐户余额足以支付商品的价格,那么就执行这份订单。


使用CodeActivity

首先建立一个Sequential Workflow Console Application项目,命名为OrderEntryCode。

为了处理一个订单,此工作流需要两个参数:AccountId和SalesItemId,分别标识下单者和待售商品。这些参数可以有两种方法在工作流中定义,即通常的.NET类属性(前面已经使用过),或者一个从属属性(dependency property)。从属属性的属性值集中存放在一起,而不是作为一个普通的成员变量定义在类中。这样做的好处就在于允许在运行时将属性值绑定到实例。

为了支持从属属性,这个类必须派生自DependencyObject类。所幸的是我们的System.Workflow.ComponentModel.Activity根类就是派生自它,因此所有的工作流和活动类都支持从属属性。

实际操作一下,我们定义AccountId属性作为此工作流的从属属性,添加下面的代码到Workflow1.cs文件中:

    public static DependencyProperty AccountIdProperty = System.Workflow.ComponentModel.DependencyProperty.Register("AccountId", typeof(int), typeof(Workflow1));

    ///<summary>

    ///标识一个帐户

    ///</summary>

    [Description("标识帐户")]

    [Category("CodeActivity 示例")]

    [Browsable(true)]

    [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]

    public int AccountId

    {

        get

        {

            return ((int)(base.GetValue(Workflow1.AccountIdProperty)));

        }

        set

        {

            base.SetValue(Workflow1.AccountIdProperty, value);

        }

    }

可以看到,get和set通过调用GetValue和SetValue方法来获取和更新属性值。这些属性值都被存放在由静态的DependencyProperty域作为键值的库中。这个库很像一个Dictionary对象,基于一个唯一的键值来保存每一个属性。

Visual Studio还提供了专门的snippet来插入从属属性的代码。在你想要插入从属属性的地方右击编辑区,选择Insert SnippetàWorkflowàDependencyProperty – Property,然后一个模板似的代码段就为你准备好了。

0 0