国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

XAF實(shí)現(xiàn)運(yùn)行時(shí)填加驗(yàn)證規(guī)則并保存到數(shù)據(jù)庫(kù)中

2019-11-14 13:29:40
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

 

幾種方法可以用來(lái)聲明一個(gè)驗(yàn)證規(guī)則最常用的方法是使用對(duì)應(yīng)的Attribute來(lái)定義。詳見(jiàn)這里。驗(yàn)證模塊還允許通過(guò)業(yè)務(wù)實(shí)現(xiàn) IRuleSource 接口定義自定義驗(yàn)證規(guī)則的來(lái)
IRuleSource 接口公開(kāi)兩個(gè)成員名稱屬性應(yīng)返回自定義驗(yàn)證規(guī)則唯一名稱CreateRules 方法應(yīng)實(shí)例化自定義驗(yàn)證規(guī)則
一個(gè)場(chǎng)景可能需要實(shí)現(xiàn)自定義驗(yàn)證規(guī)則來(lái)執(zhí)行驗(yàn)證規(guī)則存儲(chǔ)數(shù)據(jù)庫(kù)可以使用種方法當(dāng)需要頻繁地自定義驗(yàn)證規(guī)則已部署應(yīng)用程序中不能重新部署應(yīng)用程序自定義應(yīng)用程序模型
下面示例闡釋了方案
 

示例的 RuleRequiredFieldPersistent 一個(gè)普通業(yè)務(wù)實(shí)現(xiàn) IRuleSource 接口用于創(chuàng)建存儲(chǔ)數(shù)據(jù)庫(kù)的 RuleRequiredField 驗(yàn)證規(guī)則 CreateRules 方法實(shí)例化一個(gè) RuleRequiredField 驗(yàn)證規(guī)則基于 RuleRequiredFieldPersistent 公共屬性RuleRequiredFieldPersistent 標(biāo)記 DefaultClassOptionsAttribute以便最終用戶可以手動(dòng)創(chuàng)建驗(yàn)證規(guī)則通過(guò)相應(yīng)列表視圖

 

[DefaultClassOptions]public class RuleRequiredFieldPersistent : BaSEObject,     DevExPRess.Persistent.Validation.IRuleSource {    public RuleRequiredFieldPersistent(session session) : base(session) { }    public string RuleName {        get { return GetPropertyValue<string>("RuleName"); }        set { SetPropertyValue("RuleName", value); }    }    public string CustomMessageTemplate {        get { return GetPropertyValue<string>("CustomMessageTemplate"); }        set { SetPropertyValue("CustomMessageTemplate", value); }    }    public bool SkipNullOrEmptyValues {        get { return GetPropertyValue<bool>("SkipNullOrEmptyValues"); }        set { SetPropertyValue("SkipNullOrEmptyValues", value); }    }    public string Id {        get { return GetPropertyValue<string>("Id"); }        set { SetPropertyValue("Id", value); }    }    public bool InvertResult {        get { return GetPropertyValue<bool>("InvertResult"); }        set { SetPropertyValue("InvertResult", value); }    }    public string ContextIDs {        get { return GetPropertyValue<string>("ContextIDs"); }        set { SetPropertyValue("ContextIDs", value); }    }    public string Property {        get { return GetPropertyValue<string>("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<Type>("ObjectTypeCore"); }        set { SetPropertyValue("ObjectTypeCore", value); }    }    #region IRuleSource Members    public System.Collections.Generic.ICollection<IRule> CreateRules() {        System.Collections.Generic.List<IRule> list = new System.Collections.Generic.List<IRule>();        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}

可以看到,這個(gè)示例中,只返回了一個(gè)規(guī)則,而在實(shí)際項(xiàng)目中,可以使用BO定義一個(gè)子集合,集合中定義N種規(guī)則。

不要定義N個(gè)BO并都實(shí)現(xiàn) IRuleSource 那樣有點(diǎn)浪費(fèi)。


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 石台县| 收藏| 潞西市| 开鲁县| 常熟市| 象州县| 大同县| 合阳县| 苍梧县| 改则县| 双牌县| 潞城市| 广灵县| 漳平市| 沙坪坝区| 余江县| 德化县| 嘉禾县| 牡丹江市| 滨州市| 平阳县| 六盘水市| 巴中市| 栾城县| 牡丹江市| 柳河县| 板桥市| 荔波县| 三亚市| 治县。| 蓝山县| 安仁县| 伊川县| 石城县| 武城县| 堆龙德庆县| 金寨县| 绵竹市| 湘乡市| 建始县| 寿光市|