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,然后一个模板似的代码段就为你准备好了。