Exemple #1
0
        // 根据 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);
        }
Exemple #2
0
        // 获得指定一期的封面图片 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);
        }
Exemple #3
0
        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;
        }