U9 档案挂起解除规范 版 本 号 :V1.1 作者:张固文 版本记录 【此部分要记录该文档形成过程中的历次版本变更过程及变更的内容】 版本 修改与参与人 修改时间 修改原因 修改概述 审批人1.0 张固文 2008/07/30 原始文档建立 1.1 张固文 2008/9/2 按照评审意见修改 一.问题域说明 档案的挂起: 因某种原因需要将档案暂时挂起,并冻结相关业务操作,比如客户挂起同时即将其相关业务操作冻结。 档案的解除: 挂起的原因已消失,重新激活该档案,并同步放开相关的冻结操作. 二.基本原理 1. 制作 3 个 BP 实现挂起解除相关操作; 2. 在客户挂起界面点确定时,调用 CustomerHoldBP 将客户挂起 3. 在客户挂起解除界面点确定时,调用 CustomerReleaseBP 将客户挂起解除。 4. 在客户状态界面,点击 Label 挂起日期的链接弹出客户挂起解除历史查询。 三.关键代码及说明 1、 在 CustomerExtend.cs 中添加两个方法: public void Hold(HoldReason holdReason) { // 冻结相关业务单据 HoldThis(holdReason); } public void Release(HoldReason holdReason, ReleaseReason releaseReason) { // 冻结相关业务单据 ReleaseThis(holdReason, releaseReason); } Customer使用了挂起解除版型,以下就是自动为其生成的HoldThis和ReleaseThis代码 protected void HoldThis(UFIDA.U9.Base.HoldRelease.HoldReason holdReason) { HoldThis(holdReason, System.DateTime.Now, UFIDA.U9.Base.UserRole.User.Finder.FindByID(UFIDA.U9.Base.Context.LoginUserID)); } protected void HoldThis(UFIDA.U9.Base.HoldRelease.HoldReason holdReason, DateTime holdDate, UFIDA.U9.Base.UserRole.User holdUser) { if (UFIDA.U9.Base.HoldRelease.HoldReleaseHis.Hold(this.Key, holdReason, holdDate, holdUser)) { ClearValue(); this.HoldReason = holdReason; this.HoldDate = holdDate; this.HoldUser = holdUser; this.NeedValidate = false; } } protected void ReleaseThis(UFIDA.U9.Base.HoldRelease.HoldReason holdReason, UFIDA.U9.Base.HoldRelease.ReleaseReason releaseReason) { ReleaseThis(holdReason, releaseReason, System.DateTime.Now, UFIDA.U9.Base.UserRole.User.Finder.FindByID(UFIDA.U9.Base.Context.LoginUserID)); } protected void ReleaseThis(UFIDA.U9.Base.HoldRelease.HoldReason holdReason, UFIDA.U9.Base.HoldRelease.ReleaseReason releaseReason, DateTime releaseDate, UFIDA.U9.Base.UserRole.User releaseUser) { if (UFIDA.U9.Base.HoldRelease.HoldReleaseHis.Release(this.Key, holdReason, releaseReason, releaseDate, releaseUser)) { this.ReleaseReason = releaseReason; this.ReleaseDate = releaseDate; this.ReleaseUser = releaseUser; this.NeedValidate = false; } } 2、 制作三个 BP,分别封装 Customer.cs 中的方法: public bool IsHold() GetCustomerHoldStateBP CustomerExtend.cs中的方法 internal class GetCustomerHoldStateBPImpementStrategy : BaseStrategy { public GetCustomerHoldStateBPImpementStrategy() { } public override object Do(object obj) { GetCustomerHoldStateBP bpObj = (GetCustomerHoldStateBP)obj; if (bpObj.CustomerKey != null && bpObj.CustomerKey.GetEntity() != null) { return ((Customer)bpObj.CustomerKey.GetEntity()).IsHold(); } return false; } } 注意IsHold(是否挂起)并非Customer的一个属性字段,需要根据一段业务逻辑来判断,以下就是判断的逻辑: public bool IsHold() { if (this.HoldReason != null && this.ReleaseReason == null) return true; else if (this.HoldReason != null && this.ReleaseReason != null) return this.HoldDate.CompareTo(...