From 4dcdbcb75ef8aca145d4a74c1625873f47261413 Mon Sep 17 00:00:00 2001 From: xietao Date: Wed, 8 Aug 2018 18:47:17 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=20dp2library=20=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E5=8F=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../LibraryApplication.cs | 3 +- dp2Circulation/Order/OrderControl.cs | 74 ++++++++++++++++++- dp2Circulation/dp2Circulation.csproj | 2 +- 3 files changed, 75 insertions(+), 4 deletions(-) diff --git a/DigitalPlatform.LibraryServer/LibraryApplication.cs b/DigitalPlatform.LibraryServer/LibraryApplication.cs index 3f0a3a605..4a2a5852c 100644 --- a/DigitalPlatform.LibraryServer/LibraryApplication.cs +++ b/DigitalPlatform.LibraryServer/LibraryApplication.cs @@ -167,7 +167,8 @@ public partial class LibraryApplication : IDisposable // 3.1 (2018/7/1) GetSearchResult() API 在返回 -1 的时候,ErrorCode 的错误码不再是 CommonError,而是具体的错误码值。比如 NotFound 表示结果集不存在 // 3.2 (2018/7/17) GetSystemParameter() API 增加了 system/expire 获取 dp2library 失效日期的功能 // 3.3 (2018/7/28) SetBiblioInfo() API 增加了格式 marc(或 marcquery),机内格式 MARC 字符串 - public static string Version = "3.3"; + // 3.4 (2018/8/7) SetOrders() API 所保存的订购记录里面增加了 fixedPrice 和 discount 元素。早先版本如果保存时候提交这两个元素,会被 dp2library 过滤掉 + public static string Version = "3.4"; internal static DateTime _expire = new DateTime(2018, 9, 15); // 上一个版本是 2018/7/15 2018/5/15 2018/3/15 2017/1/15 2017/12/1 2017/9/1 2017/6/1 2017/3/1 2016/11/1 diff --git a/dp2Circulation/Order/OrderControl.cs b/dp2Circulation/Order/OrderControl.cs index 61fb6327f..9da08d47d 100644 --- a/dp2Circulation/Order/OrderControl.cs +++ b/dp2Circulation/Order/OrderControl.cs @@ -816,10 +816,80 @@ void dlg_GetDefaultRecord(object sender, DigitalPlatform.CommonControl.GetDefaul throw new Exception(strError); } + public override int DoSaveItems(LibraryChannel channel) + { + if (StringUtil.CompareVersion(Program.MainForm.ServerVersion, "3.4") < 0) + { + // 检查订购记录里面是否含有 fixedPrice 和 discount 元素,dp2library 是否在 3.4 版以上 + if (ExistingFixedPrice(out string strError) != 0) + { + MessageBox.Show(this, "保存操作无法进行。订购记录中含有码洋或折扣字段信息,必须在 dp2library 服务器 3.4 版以上才能无损保存。请系统管理员尽快升级 dp2library 到最新版本"); + return -1; + } + } + return base.DoSaveItems(channel); + } + + // 检查即将保存的订购记录里面是否有 fixedPrice 和 discount 元素 + // return: + // -1 检查过程出错 + // 0 不存在 + // 1 存在 + int ExistingFixedPrice( + out string strError) + { + strError = ""; + int nRet = 0; + + Debug.Assert(this.Items != null, ""); + + List entityArray = new List(); + + foreach (OrderItem bookitem in this.Items) + { + if (bookitem.ItemDisplayState == ItemDisplayState.Normal) + continue; + + if (bookitem.ItemDisplayState == ItemDisplayState.Deleted) + continue; + + nRet = bookitem.BuildRecord( + true, // 要检查 Parent 成员 + out string strXml, + out strError); + if (nRet == -1) + return -1; + + XmlDocument dom = new XmlDocument(); + try + { + dom.LoadXml(strXml); + } + catch(Exception ex) + { + strError = "订购记录装入 XMLDOM 失败: " + ex.Message; + return -1; + } + + string strFixedPrice = DomUtil.GetElementText(dom.DocumentElement, "fixedPrice"); + string strDiscount = DomUtil.GetElementText(dom.DocumentElement, "discount"); + + if (string.IsNullOrEmpty(strFixedPrice) == false + || string.IsNullOrEmpty(strDiscount) == false) + { + strError = "订购记录中存在 fixedPrice(码洋) 或者 discount(折扣) 元素"; + return 1; + } + } + + return 0; + } + + // 根据XML记录恢复一些不重要的其他字段值 int RestoreOtherFields(string strXml, - OrderItem item, - out string strError) + OrderItem item, + out string strError) { strError = ""; diff --git a/dp2Circulation/dp2Circulation.csproj b/dp2Circulation/dp2Circulation.csproj index 5d1a21501..cc23fb86c 100644 --- a/dp2Circulation/dp2Circulation.csproj +++ b/dp2Circulation/dp2Circulation.csproj @@ -21,7 +21,7 @@ true 458DBD8488B5B2A4FD0653A590D3F6E2BC38DA9F dp2003.pfx - true + false true nei.ico v4.6.1