// 根据 query string,获得指定一期的期记录数量 // query string 是调用前从册记录中 volume 等字段综合取得的 // parameters: // strBiblioPath 书目记录路径 // strQueryString 检索词。例如 “2005|1|1000|50”。格式为 年|期号|总期号|卷号。一般为 年|期号| 即可。 public static int GetIssueCount(this LibraryChannel channel, DigitalPlatform.Stop stop, string strBiblioRecPath, string strQueryString, out string strError) { strError = ""; string strBiblioRecordID = StringUtil.GetRecordId(strBiblioRecPath); string strStyle = "query:父记录+期号|" + strBiblioRecordID + "|" + strQueryString; DigitalPlatform.LibraryClient.localhost.EntityInfo[] issueinfos = null; long lRet = channel.GetIssues(stop, strBiblioRecPath, 0, 1, strStyle, channel.Lang, out issueinfos, out strError); if (lRet == -1) { return(-1); } return((int)lRet); }
// 获得指定一期的封面图片 URI // parameters: // strBiblioPath 书目记录路径 // strQueryString 检索词。例如 “2005|1|1000|50”。格式为 年|期号|总期号|卷号。一般为 年|期号| 即可。 public static int GetIssueCoverImageUri(this LibraryChannel channel, DigitalPlatform.Stop stop, string strBiblioRecPath, string strQueryString, string strPreferredType, out string strUri, out string strError) { strUri = ""; strError = ""; string strBiblioRecordID = StringUtil.GetRecordId(strBiblioRecPath); string strStyle = "query:父记录+期号|" + strBiblioRecordID + "|" + strQueryString; DigitalPlatform.LibraryClient.localhost.EntityInfo[] issueinfos = null; long lRet = channel.GetIssues(stop, strBiblioRecPath, 0, 1, strStyle, channel.Lang, out issueinfos, out strError); if (lRet == -1) { return(-1); } if (lRet == 0) { return(0); // not found } EntityInfo info = issueinfos[0]; string strXml = info.OldRecord; string strIssueRecordPath = info.OldRecPath; if (string.IsNullOrEmpty(strXml)) { strError = "期记录 '" + strIssueRecordPath + "' 的 strXml 为空"; return(-1); } XmlDocument dom = new XmlDocument(); try { dom.LoadXml(strXml); } catch (Exception ex) { strError = "期记录 '" + strIssueRecordPath + "' XML 装入 DOM 时出错: " + ex.Message; return(-1); } string strObjectID = dp2StringUtil.GetCoverImageIDFromIssueRecord(dom, strPreferredType); if (string.IsNullOrEmpty(strObjectID)) { return(0); } strUri = strIssueRecordPath + "/object/" + strObjectID; return(1); }
public static int OutputEntities( Stop stop, LibraryChannel channel, string strBiblioRecPath, string strDbType, XmlTextWriter writer, out string strError) { strError = ""; bool bBegin = false; long lPerCount = 100; // 每批获得多少个 long lStart = 0; long lResultCount = 0; long lCount = -1; for (; ; ) { if (stop != null && stop.State != 0) { strError = "用户中断"; return -1; } EntityInfo[] entities = null; long lRet = 0; channel.Timeout = new TimeSpan(0, 5, 0); if (strDbType == "item") { lRet = channel.GetEntities( stop, strBiblioRecPath, lStart, lCount, "", // "onlygetpath", "zh", out entities, out strError); } if (strDbType == "order") { lRet = channel.GetOrders( stop, strBiblioRecPath, lStart, lCount, "", // "onlygetpath", "zh", out entities, out strError); } if (strDbType == "issue") { lRet = channel.GetIssues( stop, strBiblioRecPath, lStart, lCount, "", // "onlygetpath", "zh", out entities, out strError); } if (strDbType == "comment") { lRet = channel.GetComments( stop, strBiblioRecPath, lStart, lCount, "", // "onlygetpath", "zh", out entities, out strError); } if (lRet == -1) return -1; lResultCount = lRet; if (lRet == 0) return 0; Debug.Assert(entities != null, ""); foreach (EntityInfo info in entities) { if (info.ErrorCode != ErrorCodeValue.NoError) { strError = "路径为 '" + info.OldRecPath + "' 的册记录装载中发生错误: " + info.ErrorInfo; // NewRecPath return -1; } if (bBegin == false) { writer.WriteStartElement("dprms", strDbType + "Collection", DpNs.dprms); bBegin = true; } XmlDocument item_dom = new XmlDocument(); item_dom.LoadXml(info.OldRecord); writer.WriteStartElement("dprms", strDbType, DpNs.dprms); writer.WriteAttributeString("path", info.OldRecPath); writer.WriteAttributeString("timestamp", ByteArray.GetHexTimeStampString(info.OldTimestamp)); DomUtil.RemoveEmptyElements(item_dom.DocumentElement); item_dom.DocumentElement.WriteContentTo(writer); writer.WriteEndElement(); } lStart += entities.Length; if (lStart >= lResultCount) break; if (lCount == -1) lCount = lPerCount; if (lStart + lCount > lResultCount) lCount = lResultCount - lStart; } if (bBegin == true) writer.WriteEndElement(); return 1; }