U9 研发体系(有效性开发说明) U9 研发体系 有效性开发说明 文 件 编 号 :U9-研发-有效性开发 版 本 号 :V1.5 修 改 状 态 : 编 写 人 :刘伟、朱慧 审 核 人 : 批 准 人 : 批 准 时 间 :2008.06.27 第 1 页 共 4 页 U9 研发体系(有效性开发说明) 版本记录 版本 修改与参与人 修改时间 修改原因 修改概述 审核人1.5 刘伟 2008-06-26 原始文档建立 前台处理部分 1.5 朱慧 2008-06-26 增加后台处理部分 1.5 朱慧 2008-08-22 评审不过,修改 重新组织结构 一. 问题域说明 由于档案在设计的时候,提供了有效性的支持(是否生效、生效日期、失效日期),所以在前台参照或后台校验时,都要考虑档案的有效性,确保单据使用的档案在有效期范围之内。 二.基本原理 后台校验原理:校验档案的 Effective 属性在给定的日期下是否是效。IsEffective=True 并且 EffectiveDate 小于给定日期,DisableDate 大于给定日期。 前台有效性开发原理:在 UBF 上增加有效性的使能控件,由平台代码完成档案有效性的过滤。 三.关键代码及说明 1. 后台 BE 开发 一般在实体的扩展方法 OnValidate()上要校验各种档案的有效性,无论前台是否做过有效性过滤。 用档案的 Effective.GetIsEffective()方法来进行校验,该方法有一个重载的方法:public bool GetIsEffective(DateTime date);第一个方法用默认登录日期来校验。 例如校验组织是否有效的代码如下: if (!bill.Org.Effective.GetIsEffective(bill.BusinessDate)) { 第 2 页 共 4 页 U9 研发体系(有效性开发说明) throw new EffectiveException(bill.Org.Name)); } 2. UI 开发 一般直接在 UBF 设计器上直接添加有效性的使能控件 或 在 WebPartUIFormExtend.cs 文 件 的 AfterUIModelBinding() 函 数 中 注 册CodeBlock private void SetEffectiveCodeBlock() { AssociationControl _asso = new AssociationControl(); _asso.SourceServerControl = this.Effective_IsEffective; _asso.SourceControl.EventName = "onchange"; string IsEffective = new UFWebClientBaseAdapter(this.Effective_IsEffective).ClientInstance; //第一个 CodeBlock CodeBlock cb1 = new CodeBlock(); string exp1 = string.Empty; exp1 += " if ("; exp1 += IsEffective; exp1 += ".get_Checked()==true"; exp1 += " ) "; 第 3 页 共 4 页 U9 研发体系(有效性开发说明) cb1.Condition = exp1; cb1.TargetControls.addControl(this.lblEffective_EffectiveDate, "Enabled", "true"); cb1.TargetControls.addControl(this.Effective_EffectiveDate, "Enabled", "true"); cb1.TargetControls.addControl(this.lblEffective_DisableDate, "Enabled", "true"); cb1.TargetControls.addControl(this.Effective_DisableDate, "Enabled", "true"); _asso.addBlock(cb1); //第二个 CodeBlock CodeBlock cb2 = new CodeBlock(); string exp2 = string.Empty; exp2 += " if ("; exp2 += IsEffective; exp2 += ".get_Checked()==false"; exp2 += " ) "; cb2.Condition = exp2; cb2.TargetControls.addControl(this.lblEffective_EffectiveDate, "Enabled", "false"); cb2.TargetControls.addControl(this.Effective_EffectiveDate, "Enabled", "false"); cb2.TargetControls.addControl(this.lblEffective_DisableDate, "Enabled", "false"); cb2.TargetControls.addControl(this.Effective_DisableDate, "Enabled", "false"); _asso.addBlock(cb2); } 注:根据需要在 UBF 设计器里把“在服务器端运行”打上钩。 四.源代码使用说明 后台代码放在 BE 组件**Extend.cs 的 OnValidate 中,前台代码放在 UI 组件 WebPart中的**Extend.cs 的 AfterUIModelBinding()中。 第 4 页 共 4 页