看完跟我一起学Windows Workflow Foundation系列文章后总结
这是开博第一篇文章,先祝自己身体健康,万事如意,WF能贯通!很感谢星宿.net,让我有机会学习workflow!同样祝星宿兄身体健康,万事如意!
切入正题(跟我一起学Windows Workflow Foundation:http://www.cnblogs.com/zhuhee/archive/2007/01/20/625266.html):
1.首先是环境:(1)vs2008直接就可以开发WF;(2)vs2005需要打个扩展包;
2.WF中活动的属性值是通过 Dictionary<string, object> 来指定的,前者是活动中的属性名,后者是指定的值;
例如:在workflow1中定义:
private string firstName ;
public string FirstName
{
get{ return firstName; }
set {firstName = value; }
}
给工作流中属性赋值:
Dictionary<string, object> parameters = new Dictionary<string, object>();
parameters.Add("FirstName", txtFirstName.Text);
实例化workflow的时候传递参数
WorkflowInstance instance = wr.CreateWorkflow(typeof(HelloWorldWorkflow.Workflow1), parameters);
3.看明白了expenseworkflows4这个例子,真是感触好深啊!架构实在是太帅了!佩服中!建议大家可以耐心去看看这个例子!
4.listenactivity一端必须有一个计时器(也就是delayActivity),要不侦听没有什么作用。
5.在学“跟我一起学Windows Workflow Foundation(6)”的时候
(1)自定义的Activity总是通不过编译,老出错,说“检查源文件是否存在。”原来是自定义Activity的属性出错了。自定义Activity的DependencyProperty在注册的时候需要在名后面加个Property,例如:你想叫的属性名是FirstName,则应该改成FirstNameProperty。具体如下:
public static DependencyProperty To= System.Workflow.ComponentModel.DependencyProperty.Register("To", typeof(string), typeof(SendEmailActivity1.SendEmailActivity));(错误)
public static DependencyProperty ToProperty = System.Workflow.ComponentModel.DependencyProperty.Register("To", typeof(string), typeof(SendEmailActivity1.SendEmailActivity));(正确)
(2)当自己写一个Activity的时候,必须重写父类的Excute方法,这样在添加自定义Activity的时候才会执行Excute中的代码;
(3)当发邮件的时候出异常,需要看看是不是自己机器上的防火墙的事!我的就是麦咖啡的事,老出异常,改后就好了!
(4)原来.net已经智能到可以自动为你添加代码的地步了!在添加DependencyProperty的时候,可以在你想添加的地方,点右键插入代码段---windowsworkflow----DependencyProperty 就Ok了,.net会自动把繁杂的DependencyProperty 代码给你添加上去!
(5)想自定义一个activity的时候,这个activity的父类应该是System.Workflow.ComponentModel.Activity,当想一下定义多个Activity的时候,需要继承自System.Workflow.ComponentModel.CompositeActivity
6.自定义活动的属性添加验证。要验证单个活动的Validator需要继承自ActivityValidator,要验证组合活动的Validator应继承自CompositeActivityValidator。验证属性,需要重写父类的ValidateProperties方法,活动的ValidateProperties方法是在进行编译时执行的验证方法。
在活动的顶部添加属性。如下所示:
[ActivityValidator(typeof(ParametersValidator))] (ParametersValidator是我们自定义的Validator)
public partial class SendMailActivity: System.Workflow.ComponentModel.Activity (SendMailActivity是我们自定义的Activity ,也是要验证控件ParametersValidator验证的Activity)