Home  >  Article  >  php教程  >  XAF实现运行时填加验证规则并保存到数据库中

XAF实现运行时填加验证规则并保存到数据库中

WBOY
WBOYOriginal
2016-07-06 13:30:251412browse

有 几种 方法 可以 用来 声明 一个 验证 规则 。 最常用的方法是使用对应的Attribute来定义。详见这里。 验证 模块还 允许 您 通过 在 业务 类 实现 IRuleSource 接口 定义 自定义 的 验证 规则的来 源 。 IRuleSource 接口 公开 两个 成员 。 名称 属性 应

 

几种方法可以用来声明一个验证规则最常用的方法是使用对应的Attribute来定义。详见这里。验证模块还允许通过业务实现 IRuleSource 接口定义自定义验证规则的来 IRuleSource 接口公开两个成员名称属性返回自定义验证规则唯一名称CreateRules 方法实例化自定义验证规则 一个场景可能需要实现自定义验证规则来执行验证规则存储数据库可以使用种方法需要频繁地自定义验证规则已部署应用程序中不能重新部署应用程序自定义应用程序模型 下面示例阐释了方案  

示例的 RuleRequiredFieldPersistent 一个普通业务实现 IRuleSource 接口用于创建存储数据库的 RuleRequiredField 验证规则 CreateRules 方法实例化一个 RuleRequiredField 验证规则基于 RuleRequiredFieldPersistent 公共属性RuleRequiredFieldPersistent 标记 DefaultClassOptionsAttribute以便最终用户可以手动创建验证规则通过相应列表视图

 

[DefaultClassOptions]
public class RuleRequiredFieldPersistent : BaSEObject, 
    DevExPRess.Persistent.Validation.IRuleSource {
    public RuleRequiredFieldPersistent(session session) : base(session) { }
    public string RuleName {
        get { return GetPropertyValuestring>("RuleName"); }
        set { SetPropertyValue("RuleName", value); }
    }
    public string CustomMessageTemplate {
        get { return GetPropertyValuestring>("CustomMessageTemplate"); }
        set { SetPropertyValue("CustomMessageTemplate", value); }
    }
    public bool SkipNullOrEmptyValues {
        get { return GetPropertyValuebool>("SkipNullOrEmptyValues"); }
        set { SetPropertyValue("SkipNullOrEmptyValues", value); }
    }
    public string Id {
        get { return GetPropertyValuestring>("Id"); }
        set { SetPropertyValue("Id", value); }
    }
    public bool InvertResult {
        get { return GetPropertyValuebool>("InvertResult"); }
        set { SetPropertyValue("InvertResult", value); }
    }
    public string ContextIDs {
        get { return GetPropertyValuestring>("ContextIDs"); }
        set { SetPropertyValue("ContextIDs", value); }
    }
    public string Property {
        get { return GetPropertyValuestring>("Property"); }
        set { SetPropertyValue("Property", value); }
    }
    [Persistent("ObjectType")]
    protected string ObjectType {
        get {
            if(ObjectTypeCore != null) {
                return ObjectTypeCore.FullName;
            }
            return "";
        }
        set { ObjectTypeCore = ReflectionHelper.FindType(value); }
    }
    [NonPersistent]
    [TypeConverter(typeof(DevExpress.Persistent.Base.LocalizedClassInfoTypeConverter))]
    public Type ObjectTypeCore {
        get { return GetPropertyValue("ObjectTypeCore"); }
        set { SetPropertyValue("ObjectTypeCore", value); }
    }
    #region IRuleSource Members
    public System.Collections.Generic.ICollection CreateRules() {
        System.Collections.Generic.List list = new System.Collections.Generic.List();
        RuleRequiredField rule = new RuleRequiredField();
        rule.Properties.SkipNullOrEmptyValues = this.SkipNullOrEmptyValues;
        rule.Properties.Id = this.Id;
        rule.Properties.InvertResult = this.InvertResult;
        rule.Properties.CustomMessageTemplate = this.CustomMessageTemplate;
        rule.Properties.TargetContextIDs = new ContextIdentifiers(this.ContextIDs);
        rule.Properties.TargetType = this.ObjectTypeCore;
        if(rule.Properties.TargetType != null) {
            foreach(PropertyInfo pi in rule.Properties.TargetType.GetProperties()) {
                if(pi.Name == this.Property) {
                    rule.Properties.TargetPropertyName = pi.Name;
                }
            }
        }
        for(int i = Validator.RuleSet.RegisteredRules.Count - 1; i >= 0; i--) {
            if(Validator.RuleSet.RegisteredRules[i].Id == this.Id) {
                Validator.RuleSet.RegisteredRules.RemoveAt(i);
            }
        }
        list.Add(rule);
        return list;
    }
    [Browsable(false)]
    public string Name {
        get { return this.RuleName; }
    }
    #endregion
}

可以看到,这个示例中,只返回了一个规则,而在实际项目中,可以使用BO定义一个子集合,集合中定义N种规则。

不要定义N个BO并都实现 IRuleSource 那样有点浪费。


Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn