EPR类企业管理系统

在我们现有系统基础上或全新开发,提供定制服务
为您的企业高效快速实施ERP,WMS,MES,CRM管理系统
全面管控物料仓库、销售业务、采购业务、仓库业务
生产过程、质量检验、组织架构、业务报表


定制
QQ:460-3528

开发
QQ群:3360-90194

源码
微信:136-3650-3721

声明验证规则

要将限制应用于业务类及其属性,eXpressApp框架使用“验证规则”的概念。有几种声明验证规则的方法。最常见的方法是用“验证规则”属性装饰业务类。您也可以在应用程序模型中声明验证规则。最后,您可以在代码中动态创建验证规则。本主题描述了可用的方法及其优缺点。

要了解XAF中验证的基础知识,请参阅验证规则主题。

使用代码中的规则属性应用验证规则

验证功能由验证模块提供。将此模块添加到MySolution.Module项目中。为此,请在“解决方案资源管理器”中显示的MySolution.Module项目中找到Module.csModule.vb)文件。双击该文件。该模块设计将被调用。在“工具箱”中,导航到DX。19.2:“ XAF模块”选项卡。将ValidationModule项目从此选项卡拖到设计器的“必需的模块”部分。重建您的解决方案。

您还可以将ValidationWindowsFormsModuleValidationAspNetModule添加到WinForms和ASP.NET应用程序中。此模块创建错误消息,这些错误消息在规则被破坏后被调用,这些消息更具有信息性和用户友好性。要添加此模块,请调用“应用程序设计器”,并将ValidationWindowsFormsModule / ValidationAspNetModule从“工具箱”拖到“模块”面板。

注意

您可以借助适当的属性直接在代码中声明验证规则。如果可以修改所需业务类别的源,则这是推荐的方法。要将特定规则应用于类或属性,请使用与所需规则同名的属性。使用属性的参数可以指定规则的属性。例如,可以使用属性的ContextIDs参数指定规则的上下文。

应用于业务类成员的规则属性仅适用于公共成员。在XPO持久性类中,还考虑了受保护成员的属性。

下面的代码将RuleCriteria规则应用于事件持久性类,并将RuleRequiredField规则应用于其Subject属性。保存该对象时,将同时检查这两个规则。对于RuleCriteria规则,条件由属性的参数指定。此外,您可以指定命名参数。在下面的代码中,SkipNullOrEmptyValues参数设置为false,以便在属性设置为null时检查规则(在VB中为Nothing)。

提示

可在http://www.devexpress.com/example=E249的DevExpress代码示例数据库中找到完整的示例项目。

using System.ComponentModel;
//...
[DefaultClassOptions]
[DefaultProperty(nameof(Subject))]
[RuleCriteria("RuleCriteria for Incident", DefaultContexts.Save, 
    "AssignedTo is not null", SkipNullOrEmptyValues = false)]
public class Incident : BaseObject {
    public Incident(Session session) : base(session) { }
    private Person assignedTo;
    private string subject;
    [RuleRequiredField("RuleRequiredField for Incident.Subject", 
       DefaultContexts.Save)]
    public string Subject { 
        get { 
            return subject; 
        }
        set { 
            SetPropertyValue(nameof(Subject), ref subject, value);
        }
    }
    public Person AssignedTo {
        get {
            return assignedTo;
        }
        set {
            SetPropertyValue(nameof(AssignedTo), ref assignedTo, value);
        }
    }
}
注意

验证规则也可以应用于非持久类。请参阅非持久对象验证主题以查看示例。

要调整规则,请使用PersistenceValidationController。在其说明中提供了如何使用此控制器的示例。

如果执行的操作不满足指定的规则,则规则破损的编辑器将带有Validation_SignWeb符号标记,并会调用一个弹出窗口。下图显示了一个示例,其中违反了上面代码中定义的规则。

  • 在Windows窗体应用程序中,如果检测到任何无效的验证规则,则将调用一个包含RuleSetValidationResultItem_ByTarget列表视图的弹出窗口。此列表视图中详细列出了所有不适用的规则。

    Validation_Save_Win

    可以使用DisplayableValidationResultItem详细信息视图显示每个无效的验证规则,以提供有关验证结果的更多详细信息。可以通过双击网格项目来调用此详细信息视图。

    Validation_Save_Win_Detail

  • 在ASP.NET应用程序中,有关违反规则的详细信息显示在编辑对象的“详细信息视图”中。

    Validation_Save_Web

    如果在使用“可编辑列表视图”编辑对象时检测到破坏规则,则破坏规则的详细信息将显示在网格行下方。

    Validation_Save_Web_Inplace

如上图所示,默认设置的消息模板用于定义破坏的规则。如果您已使用规则属性的CustomMessageTemplate参数在代码中设置了自定义消息模板,或者使用“规则” |在“模型编辑器”中设置了自定义消息模板。规则节点的CustomMessageTemplate属性,它将显示在默认消息的位置。

在模型编辑器中创建验证规则

可以使用模型编辑器在应用程序模型中声明规则。使用此方法为无法修改其源代码的业务类(在应用程序中使用的第三方模块中声明的业务类)声明验证规则。以下“应用程序模型”节点定义了上下文和规则:

  • ActionDesign | 动作| <Action>节点

    将所需的值设置为此节点的IModelActionValidationContexts.ValidationContexts属性。这将允许您将此操作用作具有指定ID的上下文。

  • 验证| 上下文节点

    使用此节点本地化上下文标题。上下文标题显示在绑定到“规则”对象的视图中。这些对象提供有关应用程序中使用的规则和上下文的信息。出于管理目的,您可能需要使这些对象在您的应用程序中可用。若要本地化特定的上下文,请在为“上下文”节点调用的上下文菜单中选择“添加上下文”项,然后指定ID和“标题”属性。

  • 验证| 规则节点

    您可以使用此节点定义规则。默认情况下,该节点已经包含来自其他模块的多个规则。如果在您的代码中指定了规则,则这些规则也将出现在此节点中。您可以从相应的“添加...”上下文菜单项中添加特定的规则(RuleRequiredFieldRuleRange等)。然后,您可以指定新规则的属性。任何类型的规则都具有ContextIDs属性。要指定此属性,请使用Action的ValidationContexts属性值或您在代码中实现的Context。您还可以将DefaultContexts.Save或DefaultContexts.Delete Contexts用于任何类型的规则。

  • 验证| ErrorMessageTemplates节点

    使用此节点,您可以默认更改用于特定规则类型的消息模板。当这种类型的规则被破坏时,新文本将在错误消息中使用。请注意,可以使用各个规则|中的CustomMessageTemplate属性来覆盖此文本。规则节点,或在代码中使用规则属性的CustomMessageTemplate参数。

有关代码中应用的规则(使用“规则”属性)的信息被加载到引用“验证”模块以及应用规则的模块的项目中的“应用程序模型”中。这使有权访问模型编辑器的用户(通常是业务应用程序管理员)可以使用模型编辑器添加和编辑规则和上下文。下图显示了如何在“应用程序模型”中表示“规则属性”部分中定义的规则。

Validation_ModelEditor

软验证

您可以定义最终用户可以忽略的验证规则。当您要警告用户数据无效但仍然允许用户提交更改时,此功能很有用。将IRuleBaseProperties.ResultType属性设置为WarningInformation,以在模型编辑器中定义可忽略的规则。要在代码中定义此规则,请将RuleBaseAttribute.ResultType参数传递给rule属性,然后将此参数设置为WarningInformation。有关规则结果类型的详细信息,请参见ValidationResultType枚举成员的描述。您可以在验证中尝试软验证| FeatureCenter演示的“软验证”部分。默认情况下,Feature Center演示安装在%PUBLIC%\ Documents \ DevExpress演示19.2 \ Components \ eXpressApp Framework \ FeatureCenter中。该演示的ASP.NET版本可从http://demos.devexpress.com/XAF/FeatureCenter/在线获得。

注意

定义自定义规则源

验证模块允许您定义自定义验证规则源。这些由实现IRuleSource接口的类表示。接口的IRuleSource.CreateRules方法允许您实现自定义逻辑,以实例化验证规则。

要查看自定义验证规则源的实现示例,请参考IRuleSource接口说明。

相关文章

转载保留此链接,注明出处