示例#1
0
文件: AppColumn.cs 项目: pxmarc/dp2
        // 检索顶层文章
        // return:
        //		-1	error
        //		其他 命中数
        private int SearchTopLevelArticles(
            SessionInfo sessioninfo,
            System.Web.UI.Page page,
            out string strError)
        {
            strError = "";

            if (page != null &&
                page.Response.IsClientConnected == false)       // 灵敏中断
            {
                strError = "中断";
                return(-1);
            }

            // 检索全部评注文章 一定时间范围内的?
            List <string> dbnames = new List <string>();

            for (int i = 0; i < this.ItemDbs.Count; i++)
            {
                ItemDbCfg cfg       = this.ItemDbs[i];
                string    strDbName = cfg.CommentDbName;
                if (String.IsNullOrEmpty(strDbName) == true)
                {
                    continue;
                }
                dbnames.Add(strDbName);
            }

            DateTime now           = DateTime.Now;
            DateTime oneyearbefore = now - new TimeSpan(365, 0, 0, 0);
            string   strTime       = DateTimeUtil.Rfc1123DateTimeString(oneyearbefore.ToUniversalTime());

            string strQueryXml = "";

            for (int i = 0; i < dbnames.Count; i++)
            {
                string strDbName      = dbnames[i];
                string strOneQueryXml = "<target list='" + strDbName + ":" + "最后修改时间'><item><word>" // <order>DESC</order>
                                        + strTime + "</word><match>exact</match><relation>" + StringUtil.GetXmlStringSimple(">=") + "</relation><dataType>number</dataType><maxCount>"
                                        + "-1"                                                      // Convert.ToString(m_nMaxLineCount)
                                        + "</maxCount></item><lang>zh</lang></target>";

                if (i > 0)
                {
                    strQueryXml += "<operator value='OR' />";
                }
                strQueryXml += strOneQueryXml;
            }

            if (dbnames.Count > 0)
            {
                strQueryXml = "<group>" + strQueryXml + "</group>";
            }

            RmsChannel channel = sessioninfo.Channels.GetChannel(this.WsUrl);

            Debug.Assert(channel != null, "Channels.GetChannel 异常");

            if (page != null)
            {
                page.Response.Write("--- begin search ...<br/>");
                page.Response.Flush();
            }

            DateTime time = DateTime.Now;

            long nRet = channel.DoSearch(strQueryXml,
                                         "default",
                                         out strError);

            if (nRet == -1)
            {
                strError = "检索时出错: " + strError;
                return(-1);
            }

            TimeSpan delta = DateTime.Now - time;

            if (page != null)
            {
                page.Response.Write("search end. hitcount=" + nRet.ToString() + ", time=" + delta.ToString() + "<br/>");
                page.Response.Flush();
            }


            if (nRet == 0)
            {
                return(0);       // not found
            }
            if (page != null &&
                page.Response.IsClientConnected == false)       // 灵敏中断
            {
                strError = "中断";
                return(-1);
            }
            if (page != null)
            {
                page.Response.Write("--- begin get search result ...<br/>");
                page.Response.Flush();
            }

            time = DateTime.Now;

            List <string> aPath = null;

            nRet = channel.DoGetSearchResult(
                "default",
                -1,
                "zh",
                null,   // stop,
                out aPath,
                out strError);
            if (nRet == -1)
            {
                strError = "获得检索结果时出错: " + strError;
                return(-1);
            }

            if (page != null)
            {
                delta = DateTime.Now - time;
                page.Response.Write("get search result end. lines=" + aPath.Count.ToString() + ", time=" + delta.ToString() + "<br/>");
                page.Response.Flush();
            }


            if (aPath.Count == 0)
            {
                strError = "获取的检索结果为空";
                return(-1);
            }

            if (page != null &&
                page.Response.IsClientConnected == false)       // 灵敏中断
            {
                strError = "中断";
                return(-1);
            }


            if (page != null)
            {
                page.Response.Write("--- begin build storage ...<br/>");
                page.Response.Flush();
            }

            time = DateTime.Now;


            this.CommentColumn.Clear(); // 清空集合

            // 加入新行对象。新行对象中,只初始化了m_strRecPath参数
            for (int i = 0; i < Math.Min(aPath.Count, 1000000); i++)    // <Math.Min(aPath.Count, 10)
            {
                Line line = new Line();
                // line.Container = this;
                line.m_strRecPath = aPath[i];

                nRet = line.InitialInfo(
                    page,
                    channel,
                    out strError);
                if (nRet == -1)
                {
                    return(-1);
                }
                if (nRet == 1)
                {
                    return(-1);  // 灵敏中断
                }
                TopArticleItem item = new TopArticleItem();
                item.Line = line;
                this.CommentColumn.Add(item);

                if (page != null &&
                    (i % 100) == 0)
                {
                    page.Response.Write("process " + Convert.ToString(i) + "<br/>");
                    page.Response.Flush();
                }
            }

            if (page != null)
            {
                delta = DateTime.Now - time;
                page.Response.Write("build storage end. time=" + delta.ToString() + "<br/>");
                page.Response.Flush();
            }

            return(1);
        }
示例#2
0
        void submit_button_Click(object sender, EventArgs e)
        {
            string strError = "";

            OpacApplication app         = (OpacApplication)this.Page.Application["app"];
            SessionInfo     sessioninfo = (SessionInfo)this.Page.Session["sessioninfo"];

            string strCreator = sessioninfo.UserID;

            // 先创建一条书目记录
            TextBox biblio_title     = (TextBox)this.FindControl("edit_biblio_title");
            TextBox biblio_author    = (TextBox)this.FindControl("edit_biblio_author");
            TextBox biblio_publisher = (TextBox)this.FindControl("edit_biblio_publisher");
            TextBox biblio_isbn      = (TextBox)this.FindControl("edit_biblio_isbn");
            TextBox biblio_price     = (TextBox)this.FindControl("edit_biblio_price");
            TextBox biblio_summary   = (TextBox)this.FindControl("edit_biblio_summary");

            // 检查必备字段
            if (String.IsNullOrEmpty(biblio_title.Text) == true)
            {
                strError = "尚未输入书名/刊名";
                goto ERROR1;
            }

            DropDownList store_dbname = (DropDownList)this.FindControl("store_dbname");

            string strBiblioDbName = store_dbname.SelectedValue;

            if (String.IsNullOrEmpty(strBiblioDbName) == true)
            {
                strError = "尚未选定目标库";
                goto ERROR1;
            }

            string strBiblioRecPath = "";
            string strMarcSyntax    = "";
            string strMARC          = "";

            // 得到目标书目库的MARC格式
            ItemDbCfg cfg = app.GetBiblioDbCfg(strBiblioDbName);

            if (cfg == null)
            {
                strError = "目标库 '" + strBiblioDbName + "' 不是系统定义的的书目库";
                goto ERROR1;
            }

            strMarcSyntax = cfg.BiblioDbSyntax;

            int nRet = BuildBiblioRecord(
                strMarcSyntax,
                biblio_title.Text,
                biblio_author.Text,
                biblio_publisher.Text,
                biblio_isbn.Text,
                biblio_price.Text,
                biblio_summary.Text,
                strCreator,
                out strMARC,
                out strError);

            if (nRet == -1)
            {
                goto ERROR1;
            }

            // 保存
            // 将MARC格式转换为XML格式
            nRet = MarcUtil.Marc2Xml(
                strMARC,
                strMarcSyntax,
                out string strXml,
                out strError);
            if (nRet == -1)
            {
                goto ERROR1;
            }

#if NO
            SessionInfo temp_sessioninfo = new SessionInfo(app);
            temp_sessioninfo.UserID   = app.ManagerUserName;
            temp_sessioninfo.Password = app.ManagerPassword;
            temp_sessioninfo.IsReader = false;
#endif

            string strOutputBiblioRecPath = "";

            LibraryChannel channel = sessioninfo.GetChannel(true);
            try
            {
                strBiblioRecPath = strBiblioDbName + "/?";


                long lRet = // temp_sessioninfo.Channel.
                            channel.SetBiblioInfo(
                    null,
                    "new",
                    strBiblioRecPath,
                    "xml",
                    strXml,
                    null,
                    "",
                    out strOutputBiblioRecPath,
                    out byte[] baOutputTimestamp,
                    out strError);
                if (lRet == -1)
                {
                    strError = "创建书目记录发生错误: " + strError;
                    goto ERROR1;
                }
            }
            finally
            {
#if NO
                temp_sessioninfo.CloseSession();
                temp_sessioninfo = null;
#endif
                sessioninfo.ReturnChannel(channel);
            }

            // 清除每个输入域的内容
            biblio_title.Text     = "";
            biblio_author.Text    = "";
            biblio_publisher.Text = "";
            biblio_isbn.Text      = "";
            biblio_summary.Text   = "";
            biblio_price.Text     = "";

            strBiblioRecPath = strOutputBiblioRecPath;

            CommentControl commentcontrol = (CommentControl)this.FindControl("commentcontrol");
            // 创建评注记录
            if (String.IsNullOrEmpty(commentcontrol.EditTitle) == false ||
                String.IsNullOrEmpty(commentcontrol.EditContent) == false)
            {
                string strWarning = "";
                commentcontrol.BiblioRecPath = strBiblioRecPath;

                nRet = commentcontrol.DoSubmit(
                    out strWarning,
                    out strError);
                if (nRet == -1)
                {
                    goto ERROR1;
                }
                if (String.IsNullOrEmpty(strWarning) == false)
                {
                    this.SetDebugInfo("warninginfo", strWarning);
                }
            }

            string strUrl = "./book.aspx?bibliorecpath="
                            + HttpUtility.UrlEncode(strBiblioRecPath);
            string strText = "新的荐购书目记录创建成功。点击此处可查看:<a href='"
                             + strUrl
                             + "' target='_blank'>"
                             + strUrl
                             + "</a>";
            SetInfo(strText);
            this.SetDebugInfo("succeedinfo", strText);
            return;

ERROR1:
            SetDebugInfo("errorinfo", strError);
        }