Поддержка валидации XAF в DynamicPropertiesObject

При необходимости, к объектам типа DynamicPropertiesObject можно применять механизм валидации. Для этого в Динамическом Реквизите, подлежащем проверке, должны присутствовать специальные аттрибуты-правила, наследники RuleBaseAttribute.

 

public class DynamicPropertiesValidationSupport : BaseObject

{

public DynamicPropertiesValidationSupport(Session session) : base(session){}

             

 public CreateDynamicObjectWithValidationRule()

{

             var dpl = new DynamicPropertyList();

             var rule = new List<Attribute>();

 //Add validation rule to list of attributes

             rule.Add(new RuleRequiredFieldAttribute());

 //Add new Dynamic Property to list

             dpl.Add(new DynamicProperty("RuleRequiredField", typeof (string), "1", true,

/*rule contains added validation rule*/ rule));

//Create dynamic object, pass Dynamic properties collection

this.Dpo = DynamicPropertiesObject.CreateObject<DynamicPropertiesObject>(dpl);

}

 

public DynamicPropertiesObject Dpo { get; private set; }

}

 

Таким образом, при создании Динамического Реквизита достаточно задать параметрах конструктора, следует указать такую коллекцию IDynamicProperty.Attributes, которая будет содержать атрибуты валидации. Никаких дополнительных манипуляций для инициализации Динамических Реквизитов делать не нужно. Если стандартные Actions валидации по каким-то причинам не активны, то для проверки валидности объекта достаточно воспользоваться одним из методов валидации класса DevExpress.Persistent.Validation.RuleSet. Чтобы получить доступ к классу RuleSet воспользуйтесь статическим свойством класса DevExpress.Persistent.Validation.Validator. Нижеприведенный фрагмент кода демонстрирует, как вызвать RuleSet.Validate для объекта Dpo:

 

Validator.RuleSet.Validate(this.ObjectSpace, obj.Dpo, ContextIdentifier.Save);

 

obj представляет DynamicPropertiesValidationSupport, а Dpo - DynamicPropertiesObject.