学习WF笔记9-自定义活动的验证方式(4)

在使用WF进行工作流设计时,假如某些属性没有设置或设置错误,那么WF将会给出相应的提示,在进行自定义活动时同样可以实现对属性值进行验证的功能。用户首先要建议一个专门用于对属性值进行验证的类,例子中命名“CustomActivityValidator”,然后令其继承“System.Workflow.ComponentModel.Compiler.ActivityValidator”父类,并重载“ValidationErrorCollection”方法。

       在该方法中用户可以对所需要验证的属性值进行逐一判断,如果验证失败,则可以通过“ValidationError”将错误的信息进行收集,最后一起返回给用户。

       例如对字符串属性“Para1进行非空判断。

       if(String.IsNullOrEmpty(activity.Para1))

{

       validationErrors.Add(ValidationError.GetNotSetValidationError(Para1Property.Name));

}

例如对字符串是否包含”!”符号进行判断

if(!activity.Para1.Contains(“!”))

{

validationErrors.Add(new     ValidationError(“没有包含感叹号”,1,false,Para1Property.Name);
}
用于属性验证的类开发完毕后,就可以在自定义活动的类名上对它进行引用,以实现对属性值的验证功能。

              [ActivityValidator(typeof(CustomActivityValidator))]

              public partial class Validator:System.Workflow.ComponentMode.Activity

              {}

创建自定义活动

       创建一个自定义活动,并定义两个字符类型的属性“Para1和“Para2。“Para1的默认值为“你好!”,“Para2的默认值为“恭喜发财!”,其代码如下所示。

public static DependencyProperty Para1Property=DependencyProperty.Register(“Para1”, typeof(System.String),typof(Activity1),new PropertyMetadata(“你好!”));

[DescriptionAttribute(“输入一个字符串”)]

[BrowsableAttribute(true)]

[DesignerSerializationVisibility(DesignerSerializationVisibility.Visible]

public string Para1

{

get

{

return ((String)(base.GetValue(Activity1.Para1Property)));
}

       set

       {

              base.setValue(Activity1.Para1Property,value);

       }

}

 

public static DependencyProperty Para2Property = DependencyProperty.Register("Para2", typeof(String), typeof(Activity1), new PropertyMetadata("恭喜发财!"));

        [DescriptionAttribute("输入一个字符串")]

        [BrowsableAttribute(true)]

        [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]

        public string Para2

        {

            get

            {

                return ((String)(base.GetValue(Activity1.Para2Property)));

            }

            set

            {

                base.SetValue(Activity1.Para2Property, value);

            }

        }

然后创建一个用于验证的类,命名为CustomActivityValidator,在该类中验证属性“para1”和“para2”必须不能为空,而且属性“para1”必须包含感叹号,属性“para2”必须包含“恭喜”两字,代码如下。

 

public class CustomActivityValidator:System.Workflow.ComponentModel.Compiler.ActivityValidator

     {

        public override System.Workflow.ComponentModel.Compiler.ValidationErrorCollection ValidateProperties(System.Workflow.ComponentModel.Compiler.ValidationManager manager, object obj)

        {

            ValidationErrorCollection validationErros = base.ValidateProperties(manager, obj);

            Activity1 activity = obj as Activity1;

            if (activity != null)

            {

                if (string.IsNullOrEmpty(activity.Para1))

                {

                    validationErros.Add(ValidationError.GetNotSetValidationError(Activity1.Para1Property.Name));

                }

                else if (!activity.Para1.Contains(""))

                {

                    validationErros.Add(new ValidationError("没有包含感叹号", 1, false, Activity1.Para1Property.Name));

                }

                if (string.IsNullOrEmpty(activity.Para2))

                {

                    validationErros.Add(ValidationError.GetNotSetValidationError(Activity1.Para2Property.Name));

                }

                else if (!activity.Para2.Contains("恭喜"))

                {

                    validationErros.Add(new ValidationError("没有包含感叹号", 1, false, Activity1.Para2Property.Name));

                }

            }

            return validationErros;

        }

     }

 

代码写完后,在Activity1的代码上加上[ActivityValidator(typeof(CustomActivityValidator))]特性才能进行验证。

 

自定义活动编译通过后将它添加到工作流的设计界面,在属性窗口中将属性“Para1”和“Para2”的默认值去掉,如图1所示,系统给出不能为空的错误提示。

1 自定义活动验证结果

 

在属性窗口中将属性“Para1”和“Para2”的默认值分别进行修改,系统也将会给出相应的错误提示。

    

2 自定义活动验证结果

posted on 2009-11-24 23:32  梅卫军  阅读(387)  评论(5编辑  收藏  举报