zoukankan      html  css  js  c++  java
  • 学习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 自定义活动验证结果

  • 相关阅读:
    ASP.NET 页生命周期
    TextBox只输入数字和event.keyCode的键码值
    正则表达式30分钟入门教程
    240多个jQuery插件
    编写高性能的SQL语句(二)
    利用sp_addlinkedserver與sp_addlinkedsrvlogin來做DBLink
    C# 格式串
    sql查询优化(一),not in及详细讲解提高数据库查询效率
    抽象方法与虚方法(转)
    Gridview表头(跨行、跨列)显示样式!
  • 原文地址:https://www.cnblogs.com/meiweijun/p/1609945.html
Copyright © 2011-2022 走看看