EPR类企业管理系统

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


定制
QQ:460-3528

开发
QQ群:3360-90194

源码
微信:136-3650-3721

实施自定义上下文

eXpressApp Framework中,在定义规则时,指定将在其中检查规则的上下文。您可以将操作指定为上下文,也可以使用内置的DefaultContexts.Save或DefaultContexts.Delete上下文。如果需要,您还可以实现自己的上下文,并使用它来检查应用程序中的“规则”。本主题阐明了实现上下文的技术。有关上下文验证概念的一般信息,请参阅“验证规则”主题。

在开始实现自己的上下文之前,您应该了解如何在内部表示上下文。实际上,没有“内置”上下文或表示上下文的对象(只有上下文标题字符串)。验证意味着将调用分配给静态Validator的Validator.RuleSet属性的RuleSet对象的RuleSet.Validate方法。要检查的对象和上下文标题作为参数传递。以下代码演示了如何在context1 Context中从objectSpace对象空间验证obj对象:

Validator.RuleSet.Validate(objectSpace, obj, "context1");

例如,要在DefaultContexts.SaveDefaultContexts.Delete Context中提供验证,内置的PersistenceValidationController订阅IObjectSpace.Committing事件并验证要修改的对象。因此,当删除或保存对象时,将在DefaultContexts.DeleteDefaultContexts.Save Context中自动检查所有持久对象。

为了在执行动作时提供验证,验证模块的ActionValidationController将处理程序添加到每个Action的ActionBase.Executing事件中。在此事件处理程序中,还将调用ValidateAll方法。

您会看到既没有上下文存储库,也没有注册。因此,如果要在自定义上下文中检查“规则”,请在代码中的任意位置调用ValidateValidateAll方法,并将Context指定为参数。验证模块的引擎将自动收集与此上下文关联的所有规则,并在规则“破损”的情况下引发异常。

RuleSet类的验证方法的完整列表如下:

  • 验证规则

    检查对象是否满足特定规则。返回RuleValidationResult类型的对象。

  • 验证目标

    检查特定对象是否满足与指定上下文关联的所有规则。返回RuleSetValidationResult类型的对象。如果满足所有规则,则此对象的IsValid属性设置为true。否则,将其设置为false

  • ValidateAllTargets

    ValidateTarget方法类似,不同之处在于可以检查多个对象。

  • 证实

    调用ValidateTarget方法,如果返回的RuleSetValidationResult对象的IsValid属性设置为false,则引发异常。

  • 验证全部

    调用ValidateAllTargets方法,如果返回的RuleSetValidationResult对象的IsValid属性设置为false,则引发异常。

这些方法应该从控制器和对象空间的事件中使用,而不是从持久类范围中使用(它们将对象空间实例作为参数)。若要访问RuleSet对象,请使用静态Validator类的Validator.RuleSet属性。

您可以处理静态RuleSet.CustomNeedToValidateRule事件,以根据特定条件打开和关闭验证。在检查目标对象类型之前检查验证上下文时,会引发此事件。将处理程序的NeedToValidateRule参数设置为false可在需要时禁用验证。

相关文章

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