EPR类企业管理系统

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


定制
QQ:460-3528

开发
QQ群:3360-90194

源码
微信:136-3650-3721

非持久对象验证

声明验证规则”主题描述了如何验证持久对象属性。但是,也可以验证非持久对象。这些对象不会保存或删除,因此无法在“保存”或“删除”上下文中进行验证。当执行特定动作时(在动作上下文中),可以执行非持久对象验证。本主题提供有关如何验证非持久对象的示例:

验证报告参数

当使用过滤后的数据源查看报告时,最终用户可能需要指定报告参数:

Validation_NonPersistent

可以使用下面描述的方法来验证这些参数。

以下代码段说明了ReportParametersObjectBase类的后代。它的ShowTasksAssignedTo属性由RuleRequiredFieldAttribute装饰。

[DomainComponent]
public class MyReportParametersObject : ReportParametersObjectBase {
    public MyReportParametersObject(IObjectSpaceCreator provider) : 
        base(provider) { }
    public override CriteriaOperator GetCriteria() {
        return CriteriaOperator.Parse("[FullName] = '"   showTasksAssignedTo.FullName   "'");
    }
    public override SortProperty[] GetSorting() {
        List<SortProperty> sorting = new List<SortProperty>();
        return sorting.ToArray();
    }
    protected override IObjectSpace CreateObjectSpace() {
        return objectSpaceCreator.CreateObjectSpace(typeof(Contact));
    }
    private Contact showTasksAssignedTo;
    [RuleRequiredField("RuleRequiredField for MyReportParametersObject", "PreviewReport", 
        "Assigned To cannot be empty")]
    public Contact ShowTasksAssignedTo {
        get {
            return showTasksAssignedTo;
        }
        set {
            showTasksAssignedTo = value;
        }
    }
}

下图说明了模型编辑器中规则的节点。

Validation_NonPersistent_ME

下图说明了违反规则的检测。

Validation_NonPersistent_Report

验证密码复杂度

所述ChangePasswordByUser当标准认证类型在使用动作是由最终用户访问XAF应用。默认情况下,最终用户可以更改其密码并设置简单甚至空密码。但是,生产环境可能具有严格的安全性,因此可能仅要求使用复杂的密码。解决方案是在最终用户尝试更改密码时验证新的密码值。

更改我的密码”对话框包含ChangePasswordParameters详细信息视图。

Tutorial_SS_Lesson1_3

所述ChangePasswordParameters类是一个非持久类,通过所提供的是SecuritySystem模块。

NEWPASSWORD是要验证的属性。由于此属性是在“安全性”模块中实现的,因此验证该属性的最佳方法是通过“模型编辑器”应用规则。

重点

确保将安全模块添加到执行此自定义的模块的模块设计器中的必需列表中

  • 右键单击验证| 规则节点。选择添加... | RuleRegularExpression。将新规则的ID属性设置为“密码很复杂”。将TargetType设置为“ DevExpress.ExpressApp.Security.ChangePasswordParameters”,将TargetPropertyName设置为“ NewPassword”,将TargetContextIDs设置为“ ChangePassword”,并将SkipNullOrEmptyValues设置为“ False”。将Pattern属性设置为“ ^(?=。* [a-zA-Z])(?=。* \ d)。{6,} $ ”。只有包含6个或更多字符和数字的密码才能匹配此正则表达式。值,以易于使用的消息形式描述密码要求。例如,您可以键入“新密码必须至少包含6个字符和数字。”

    Validation_NonPersistent_ME2

    注意

    您可以编写自己的模式以适合您的密码要求。如果您不熟悉正则表达式,可以访问regexlib.com网站以搜索适当的正则表达式。如果需要限制使用空密码,请创建RuleRequiredField规则,而不是RuleRegularExpression

  • 更改密码对话框包含OK按钮。此按钮是具有DialogOK ID的动作。导航到ActionDesign | 动作| DialogOK并将ValidationContexts属性设置为“ ChangePassword”。结果,“ ChangePassword”验证上下文标识符将与DialogOK操作相关联。

  • 在用户登录到应用程序之前,验证系统尚未完全初始化。要初始化Validation系统,请编辑Module.csModule.vb)文件,重写ModuleBase.Setup方法并处理XafApplication.SetupComplete事件。在事件处理程序中,访问Validation Module并调用其ValidationModule.InitializeRuleSet方法。这将确保在“首次登录时更改密码”屏幕中选中验证规则。

using DevExpress.ExpressApp.Validation;
//...
public override void Setup(XafApplication application) {
    base.Setup(application);
    application.SetupComplete  = application_SetupComplete;
}
void application_SetupComplete(object sender, EventArgs e) {
    ValidationModule module = ((XafApplication)sender).Modules.FindModule<ValidationModule>();
    if (module != null) module.InitializeRuleSet();
}

应用程序管理员仍然可以通过ResetPassword操作为特定用户分配不安全的密码。但是,您可以使用上述方法来验证ResetPasswordParameters.Password属性。

当最终用户提供不符合复杂性要求的新密码时,将显示以下窗口。

Validation_NonPersistent_Password

相关文章

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