欢迎您来到 数字平台。 您尚未登录。[登录] [注册新用户]
当前位置: 论坛首页 / 栏目 文档与手册 / 文章 39

点击:34141[回复顶层] [树状] [详细]
[回复(需要先登录)] [引用(需要先登录)]普通文章第 1 楼
文章id: 33
dp2图书馆应用服务器参考手册

作者: xietao




发表时间: 2006-12-24 16:18:00



[回复(需要先登录)] [引用(需要先登录)]普通文章第 2 楼
文章id: 34
安装

作者: xietao




发表时间: 2006-12-24 16:18:23



[回复(需要先登录)] [引用(需要先登录)]普通文章第 3 楼
文章id: 36
配置circulation.xml

作者: xietao


<amerce> -- 违约金配置参数

    <amerce dbname="违约金" overdueStyle="includeNoneworkingDay" />

dbname 违约金库名

overdueStyle 计算超期违约金的办法。如果为空,则表示排除借期末尾的非工作日天数;如果为includeNoneworkingDay,则表示把借期末尾的非工作日也计算在内。注:如果读者在宽限日还书,当然不会发生违约金问题;但一旦在宽限日后一天还书,超期违约金就要算上前面的若干个连续的非工作日。

 

<rightstable> -- 读者借阅权限配置参数

一个片断如下:

    <rightstable>
        <!-- 所有类型的缺省参数 -->
        <param name="可借总册数" value="5" />
        <param name="可借册数" value="3" />
        <param name="借期" value="30day,15day,14day,13day,12day" />
        <param name="工作日历名" value="基本开馆日历" />
        <param name="超期违约金因子" value="CNY0.1yuan/day" />
        <param name="丢失违约金因子" value="3.0" />


        <type book="原版西文">
            <param name="可借册数" value="1" />
        </type>
        <type reader="本科生">
            <param name="可借总册数" value="5" />
            <param name="可借册数" value="5" />
            <param name="借期" value="30day,15day" />
            <type book="普通图书">
                <param name="可借册数" value="6" />
            </type>
            <type book="小说">
                <param name="可借册数" value="1" />
            </type>
        </type>
        <type reader="讲师" book="*">
            <param name="可借册数" value="15" />
            <param name="借期" value="30day" />
        </type>
    </rightstable>

解释:

每个域中可以配置的参数名为如下几个:

                    "可借总册数",
                    "可借册数",
                    "借期" ,
                    "超期违约金因子",
                    "丢失违约金因子",
                    "工作日历名",

根据<type>元素的嵌套关系,内层域中缺乏的参数,继承外层的参数。如果多个外层都有同类参数定义,则依最近的一个。

<type>元素有两个属性:reader和book,分别定义了<type>元素作用的读者类型和图书类型层面。如果缺某个属性,或者属性值为“*”,表示不在乎这个因素。

<browseformats> -- 公共查询浏览显示格式配置

片断如下:

    <browseformats>
        <database name="中文图书">
            <format name="详细" type="biblio" />
        </database>


       <database name="中文期刊篇名">
           <format name="详细" scriptfile="./cfgs/opac_detail.fltx" />
       </database>


    </browseformats>

上例中,“中文图书”的“详细”格式采用了“biblio”类型,这种类型会自动找数据库的opac_biblio.fltx角色配置文件,创建书目数据显示格式(因此可以通过修改opac_biblio.fltx角色文件重构显示格式)。并且,“biblio”类型会自动找出相关实体库中的册信息进行显示,册信息的显示格式是系统内部固化定义的(不能被重构)。

而“中文期刊篇名”的“详细”格式采用了数据库的指定角色配置文件来创建显示格式。在例子中,是“="./cfgs/opac_detail.fltx”,也就是数据库下cfgs目录中的opac_detail.fltx角色文件。注意,在这种定义模式下,不会显示该库的实体库中的册信息(或者该库根本就不具备对应的实体库)。

scriptfile参数,其形式有以下几种:

scriptfile="./cfgs/opac_detail.fltx" 这是指数据库下的相对路径

scriptfile="/cfgs/opac_detail.fltx" 这是指数据库所在服务器(根)下的绝对路径。也就是那个服务器下的cfgs目录中的公共角色文件。

scriptfile="/中文图书/cfgs/opac_detail.fltx" 这也是一个绝对路径,表示同服务器下固定名字数据库下的配置文件。

配置文件的扩展名有一些讲究。如果为.fltx,则图书馆服务器只获取这个配置文件即可。而对于.cs扩展名的配置文件,应当在相同目录下,还要准备好一个.cs.ref的配置文件(前面部分名字相同),因图书馆服务器需要两个文件配套才能完成任务。也就是说,虽然scriptfile参数仅指定了一个配置文件,但如果这个配置文件的扩展名为.cs,则软件暗含了一个要求,需要准备同名的.cs.ref配置文件。之所以作这样的规定,是由.cs文件的特点决定的,它无法独立定义所连接的库文件信息,必须要有其他文件帮助定义。

<arrived> -- 预约到书参数配置

dbname属性是预约到书队列库的库名。

reserveTimeSpan属性是预约到书后图书馆为读者保留的时间长度。例如“2day”。

样例:

    <arrived dbname="预约到书" reserveTimeSpan="2day" />

<message> -- dpMail邮件系统的配置参数

dbname属性是消息库的库名。

reserveTimeSpan属性是消息保留在信箱中的时间长度。例如“180day”。

样例:

<message dbname="消息" reserveTimeSpan="180day" />

<mailTemplates> -- 邮件模板配置参数

配置通过内置邮件系统针对读者进行各种业务通知的邮件模板。

其中的<template>用于配置模板。

样例如下:

    <mailTemplates>
        <template name="预约到书通知">
尊敬的读者:
您预约的图书%item%已经到书,请尽快来图书馆办理借书手续。图书馆将为您保留%reservetime%,如果您未能在保留期限内来馆办理借阅手续,图书馆将把优先借阅权转给后面排队等待的预约者,或做归架处理。

%today%
 </template>
    </mailTemplates>

<traceDTLP> -- 跟踪dt1000/dt1500参数

样例如下:
<traceDTLP>
 <origin serverAddr="test" UserName="root" Password="" >

  <databaseMap>
   <item targetDatabase="跟踪流通库" originDatabase="流通库" marcSyntax="unimarc"/>
   <item targetDatabase="跟踪中文图书" originDatabase="图书总库" marcSyntax="unimarc" />
   <item targetDatabase="跟踪英文图书" originDatabase="English Books" marcSyntax="usmarc" />
  </databaseMap>

 </origin>
</traceDTLP> 

升级dt1000读者数据(连同流通信息)到dp2的配置办法:

               <item targetDatabase="读者" originDatabase="读者库" marcSyntax="xmlreader" />

升级dt1000书目中流通信息到dp2的配置办法:

               <item targetDatabase="中文图书" originDatabase="图书总库" marcSyntax="unimarc" targetEntityDatabase="中文图书实体" noBiblio="false" />

升级dt1000书目中流通信息到dp2时,只跟踪实体库,而保留书目库不加以初始化和写入的特殊配置办法:

               <item targetDatabase="中文图书" originDatabase="图书总库" marcSyntax="unimarc" targetEntityDatabase="中文图书实体" noBiblio="true" />

 

<locationtypes> -- 馆藏地点类型配置

这个配置体系决定了哪些馆藏地点的图书可以外借。

<item>元素的文本是馆藏地点名文字,而canborrow属性定义了是否可以外借。

样例如下:

    <locationtypes>
        <item canborrow="yes">流通书库</item>"
        <item>阅览室</item>
    </locationtypes>

如果图书馆的外借政策比较复杂,不能单纯依靠册信息中的<location>元素值来决定,那么就可以采用脚本来定义是否外借的规则。这是靠在LibraryHost派生类中书写一个如下函数来实现的:

 public bool ItemCanBorrow(XmlDocument itemdom,
  out string strMessageText)
 {
  string strBookType = DomUtil.GetElementText(itemdom.DocumentElement,
   "bookType");
  string strLocation = DomUtil.GetElementText(itemdom.DocumentElement,
   "Location");
  if (strBookType == "内阅图书")
  {
   strMessageText = "不可借。";
   return false;
  }
  strMessageText = "";
  return true;
 }

函数在两个场合起作用:一个是在类似book.aspx的bookitem控件界面上决定册每行左边的checkbox是否Enable和“状态”栏内的文字;另外是在借书操作中作为判断是否能够外借的一个环节。

这个函数如果返回true,表示可以相关册可以外借,否则就不可外借。参数itemdom提供了完整的册记录,可以利用其中的任何数据元素来进行综合判断。strMessageText返回一个状态理由。在bookitem显示控件界面上,strMessageText会出现在“状态”栏内容中;在借书操作中,如果调用上述脚本函数后发现不可外借,strMessageText的内容会出现在操作返回信息中,表明不可外借的具体原因。

可能需要在类定义前面加入:

using System.Xml;

using DigitalPlatform.Xml;

在<script>元素尾部(内侧,CDATA节后面)加入:

<refs>
<ref>system.dll</ref>
<ref>system.xml.dll</ref>
<ref>%bindir%\digitalplatform.xml.dll</ref>
</refs>

以便可以引用必要的外部类库(DomUtil类)。

如果没有配置上述ItemCanBorrow()函数,则<locationtypes>中的配置会起作用。

获取书目局部的功能

 public int GetBiblioPart(XmlDocument bibliodom,
  string strPartName,
  out string strResultValue)
 {
  strResultValue = "";

  XmlNamespaceManager mngr = new XmlNamespaceManager(new NameTable());
  mngr.AddNamespace("dprms", DpNs.dprms);


  if (bibliodom.DocumentElement.NamespaceURI == Ns.usmarcxml)
  {

   mngr.AddNamespace("usmarc", Ns.usmarcxml); // "http://www.loc.gov/MARC21/slim"

   string strXPath = "";

   if (strPartName == "price")
    strXPath = "//usmarc:record/usmarc:datafield[@tag='020']/usmarc:subfield[@code='c']";
   else
   {
    strResultValue = "不能识别的 strPartName 值 '" + strPartName + "'";
    return -1;
   }

   XmlNode node = bibliodom.SelectSingleNode(strXPath, mngr);
   if (node == null)
    return 0;

   strResultValue = node.InnerText;
   return 1;
  }
  else if (bibliodom.DocumentElement.NamespaceURI == DpNs.unimarcxml)
  {
   mngr.AddNamespace("unimarc", DpNs.unimarcxml); // "http://dp2003.com/UNIMARC"

   string strXPath = "";

   if (strPartName == "price")
    strXPath = "//unimarc:record/unimarc:datafield[@tag='010']/unimarc:subfield[@code='d']";
   else
   {
    strResultValue = "不能识别的 strPartName 值 '" + strPartName + "'";
    return -1;
   }

   XmlNode node = bibliodom.SelectSingleNode(strXPath, mngr);
   if (node == null)
    return 0;

   strResultValue = node.InnerText;
   return 1;
  }
  else {
   strResultValue = "无法识别的MARC格式";
   return -1;
  }

 }

 

 



发表时间: 2006-12-24 16:19:34
最后修改时间: 2007-04-11 15:56:00



[回复(需要先登录)] [引用(需要先登录)]普通文章第 4 楼
文章id: 37
cfgs目录下的配置文件

作者: xietao




发表时间: 2006-12-24 16:20:09



[回复(需要先登录)] [引用(需要先登录)]普通文章第 5 楼
文章id: 38
readerxml2html.cs

作者: xietao


该脚本程序的作用是,把XML格式的读者数据创建为HTML格式的文本。用于为流通前端服务的,负责创建读者信息HTML格式的API中。

还需要配套一个readerxml2html.cs.ref的文件。 

ReaderConverter类的数据成员如下:

    public class ReaderConverter
    {
        public LibraryApplication App = null;
        public SessionInfo SessionInfo = null;

        public string[] BorrowedItemBarcodes = null;
        public string CurrentItemBarcode = "";  // 当前正在操作的条码
        public OperType OperType = OperType.None;

    } 

App为图书馆应用对象。

SessionInfo为Session信息对象。

CurrentItemBarcode是当前正在操作的一个册条码。

OperType是操作类型。定义如下:

    public enum OperType
    {
        None = 0,
        Borrow = 1,
        Return = 2,
    }

 ReaderConverter类含有的方法如下:

        public static string LocalTime(string strRfc1123Time)

将RFC1123格式的时间字符串转换为本地时间字符串格式。


        public static string LocalDate(string strRfc1123Time)

将RFC1123格式的时间字符串转为本地日期字符串格式。


        public string GetParam(string strReaderType,
            string strBookType,
            string strParamName)

获得流通读者权限配置参数。

        public bool IsRecentBorrowedItem(string strBarcode)


看看一个条码是否为最近已经借阅过的册条码。该方法是根据BorrowedItemBarcodes成员进行的判断。

~~~

LibraryApplication类的一些函数,也常用到:

        // 获得和一个特定读者类型相关联的日历
        // return:
        //      -1  error
        //      0   succeed
        public int GetReaderCalendar(string strReaderType,
            out Calendar calendar,
            out string strError)

        // 检查超期情况。
        // return:
        //      -1  数据格式错误
        //      0   没有发现超期    strError也有未来到期的提示信息
        //      1   发现超期   strError中有提示信息
        public int CheckPeriod(
            Calendar calendar,
            string strBorrowDate,
            string strPeriod,
            out string strError)

 

readerxml2html.cs样例如下: 

 

using System;
using System.Xml;

using DigitalPlatform.LibraryServer;
using DigitalPlatform.Xml;

public class MyConverter : ReaderConverter
{

 public override string Convert(string strXml)
 {
  XmlDocument dom = new XmlDocument();

  try {
   dom.LoadXml(strXml);
  }
  catch (Exception ex)
  {
   return ex.Message;
  }
  string strLink = "<LINK href='"+App.LibraryServerUrl+"/readerhtml.css' type='text/css' rel='stylesheet'>";

  string strResult = "<html><head>"+strLink+"</head><body>";

  // 左右分布的大表格
  strResult += "<table class='layout' width='100%' cellspacing='0' cellpadding='0'>";
  strResult += "<tr class='content'><td class='left' valign='top'>";

  // 识别信息表格
  strResult += "<table class='readerinfo' width='100%' cellspacing='1' cellpadding='4'>";

  // 标题
  // strResult += "<tr class='columntitle'><td class='name'>名</td><td class='value'>值</td></tr>";

  string strReaderBarcode = DomUtil.GetElementText(dom.DocumentElement, "barcode");

  // 证条码
  strResult += "<tr class='content'><td class='name' nowrap>读者证条码</td><td class='value' nowrap>"
 + strReaderBarcode + "</td><tr>";

  // 读者类别  
  string strReaderType = DomUtil.GetElementText(dom.DocumentElement, "readerType");

  strResult += "<tr class='content'><td class='name' nowrap>读者类别</td><td class='value' nowrap>" + strReaderType + "</td><tr>";

  // 发证日期
  strResult += "<tr class='content'><td class='name' nowrap>发证日期</td><td class='value' nowrap>" + LocalDate(DomUtil.GetElementText(dom.DocumentElement, "createDate")) + "</td><tr>";

  // 失效日期
  strResult += "<tr class='content'><td class='name' nowrap>失效日期</td><td class='value' nowrap>" + LocalDate(DomUtil.GetElementText(dom.DocumentElement, "expireDate")) + "</td><tr>";

  // 姓名
  strResult += "<tr class='content'><td class='name' nowrap>姓名</td><td class='value' nowrap>" + DomUtil.GetElementText(dom.DocumentElement, "name") + "</td><tr>";

  // 证状态
  strResult += "<tr class='content'><td class='name' nowrap>证状态</td><td class='value' nowrap>"
 + DomUtil.GetElementText(dom.DocumentElement, "state") + "</td><tr>";

   strResult += "<tr class='content'><td class='name' nowrap> </td><td class='value'>"
 + "</td><tr>";

  strResult += "</table>";

  strResult += "</td><td class='middle'>&nbsp;";

  strResult += "</td><td class='right'>";


  // 其他信息表格
  strResult += "<table class='readerinfo' width='100%' cellspacing='1' cellpadding='4'>";


  strResult += "<tr class='content'><td class='name' nowrap>性别</td><td class='value' nowrap>"
 + DomUtil.GetElementText(dom.DocumentElement, "gender") + "</td><tr>";

  strResult += "<tr class='content'><td class='name' nowrap>出生日期</td><td class='value' nowrap>"
 + LocalDate(DomUtil.GetElementText(dom.DocumentElement, "birthday")) + "</td><tr>";

  strResult += "<tr class='content'><td class='name' nowrap>身份证号</td><td class='value' nowrap>"
 + DomUtil.GetElementText(dom.DocumentElement, "idCardNumber") + "</td><tr>";

  strResult += "<tr class='content'><td class='name' nowrap>单位</td><td class='value'>"
 + DomUtil.GetElementText(dom.DocumentElement, "department") + "</td><tr>";

  strResult += "<tr class='content'><td class='name' nowrap>地址</td><td class='value'>"
 + DomUtil.GetElementText(dom.DocumentElement, "address") + "</td><tr>";

  strResult += "<tr class='content'><td class='name' nowrap>电话</td><td class='value' nowrap>"
 + DomUtil.GetElementText(dom.DocumentElement, "tel") + "</td><tr>";

  strResult += "<tr class='content'><td class='name' nowrap>Email地址</td><td class='value' nowrap>"
 + DomUtil.GetElementText(dom.DocumentElement, "email") + "</td><tr>";

  strResult += "</table>";

  strResult += "</td></tr>";

  // 注释
  // 表格
  strResult += "<tr class='content'><td colspan='3' class='left' valign='top'>";
  strResult += "<table class='readerinfo' width='100%' cellspacing='1' cellpadding='4'>";

   strResult += "<tr class='content'><td class='name' nowrap>注释</td><td class='value'>"
 + DomUtil.GetElementText(dom.DocumentElement, "comment") + "</td><tr>";
  strResult += "</table>";
  strResult += "</td></tr>";


  // 大表格收尾
  strResult += "</table>";

 

  // 超期记录
  XmlNodeList nodes = dom.DocumentElement.SelectNodes("overdues/overdue");
  
  if (nodes.Count > 0)
  {


  strResult += "超期信息<br/>";
  strResult += "<table class='overdue' width='100%' cellspacing='1' cellpadding='4'>";
  strResult += "<tr class='columntitle'><td>册条码</td><td>超期情况</td><td>罚款额</td><td>借阅日期</td><td>期限</td><td>还书日期</td><td>ID</td></tr>";

  for(int i=0;i<nodes.Count;i++)
  {
   XmlNode node = nodes[i];
   string strBarcode = DomUtil.GetAttr(node, "barcode");
   string strOver = DomUtil.GetAttr(node, "reason");
   string strBorrowDate = LocalTime(DomUtil.GetAttr(node, "borrowDate"));
   string strBorrowPeriod = DomUtil.GetAttr(node, "borrowPeriod");
   string strReturnDate = LocalTime(DomUtil.GetAttr(node, "returnDate"));
   string strID = DomUtil.GetAttr(node, "id");
   string strPrice = DomUtil.GetAttr(node, "price");

                 string strBarcodeLink = "<a href='"+App.LibraryServerUrl+"/book.aspx?barcode=" + strBarcode + "&forcelogin=userid' target='_blank'>" + strBarcode + "</a>";

   strResult += "<tr class='content'>";
   strResult += "<td class='barcode' nowrap>" + strBarcodeLink + "</td>";
   strResult += "<td class='reason' nowrap>" + strOver + "</td>";
   strResult += "<td class='price' nowrap>" + strPrice + "</td>";
   strResult += "<td class='borrowdate' nowrap>" + strBorrowDate + "</td>";
   strResult += "<td class='borrowperiod' nowrap>" + strBorrowPeriod + "</td>";
   strResult += "<td class='returndate' nowrap>" + strReturnDate + "</td>";
   strResult += "<td class='id' nowrap>" + strID + "</td>";
   strResult += "</tr>";
  }
  strResult += "</table>";

  }

  // 获得日历
  string strError = "";
  Calendar calendar = null;
  int nRet = this.App.GetReaderCalendar(strReaderType, out calendar, out strError);
  if (nRet == -1)
  {
   strResult += strError;
   calendar = null;
  }


  // 借阅的册
  strResult += "<br/>借阅信息<br/>";
  strResult += "<table class='borrowinfo' width='100%' cellspacing='1' cellpadding='4'>";
  strResult += "<tr class='columntitle'><td nowrap>册条码</td><td nowrap>续借次</td><td nowrap>借阅日期</td><td nowrap>期限</td><td nowrap>操作者</td><td nowrap>是否超期</td><td nowrap>备注</td></tr>";
  nodes = dom.DocumentElement.SelectNodes("borrows/borrow");
  for(int i=0;i<nodes.Count;i++)
  {
   XmlNode node = nodes[i];
   string strBarcode = DomUtil.GetAttr(node, "barcode");
   string strNo = DomUtil.GetAttr(node, "no");
   string strBorrowDate = DomUtil.GetAttr(node, "borrowDate");
   string strPeriod = DomUtil.GetAttr(node, "borrowPeriod");
   string strOperator = DomUtil.GetAttr(node, "operator");
   string strRenewComment = DomUtil.GetAttr(node, "renewComment");

   string strColor="bgcolor=#ffffff";

   if (strBarcode == this.CurrentItemBarcode)
   {
    strColor = "bgcolor=#ff9999"; // 当前正在借阅的册
   }
   else if (IsRecentBorrowedItem(strBarcode) == true)
   {
    strColor = "bgcolor=#ffff99"; // 先前借阅过的册
   }

 

   string strOverDue = "";
         // 检查超期情况。
          // return:
          //      -1  数据格式错误
          //      0   没有发现超期
          //      1   发现超期   strError中有提示信息
          nRet = App.CheckPeriod(
    calendar,
    strBorrowDate,
    strPeriod,
    out strError);
   if (nRet == -1)
    strOverDue = strError;
   else if (nRet == 1)
    strOverDue = strError; // "已超期";
   else
    strOverDue = strError; // 可能也有一些必要的信息,例如非工作日

                 string strBarcodeLink = "<a href='"+App.LibraryServerUrl+"/book.aspx?barcode=" + strBarcode + "&borrower=" + strReaderBarcode  +"&forcelogin=userid' target='_blank'>" + strBarcode + "</a>";


   strResult += "<tr class='content' "+strColor+" nowrap>";
   strResult += "<td class='barcode' nowrap>" + strBarcodeLink + "</td>";
   strResult += "<td class='no' nowrap align='right'>" + strNo + "</td>";
   strResult += "<td class='borrowdate' >" + LocalTime(strBorrowDate) + "</td>";
   strResult += "<td class='period' nowrap>" + strPeriod + "</td>";
   strResult += "<td class='operator' nowrap>" + strOperator + "</td>";
   strResult += "<td class='overdue' >" + strOverDue + "</td>";
   strResult += "<td class='renewcomment' nowrap>" + strRenewComment.Replace(";", "<br/>") + "</td>";
   strResult += "</tr>";
  }
  
  strResult += "<tr class='content'><td colspan='7'>";

  string strMaxItemCount = GetParam(strReaderType, "", "可借总册数");
  strResult += "最多可借:" + strMaxItemCount + " ";

  int nMax = 0;
  try {
   nMax = System.Convert.ToInt32(strMaxItemCount);
  }
  catch
  {
   strResult += "当前读者 可借总册数 参数 '" + strMaxItemCount + "' 格式错误";
   goto CONTINUE1;
  }

  strResult += "当前可借:" + System.Convert.ToString(nMax - nodes.Count) + "";


  strResult += "</td></tr>";
  strResult += "</table>";

CONTINUE1:


  // 预约请求
  strResult += "<br/>预约请求<br/>";
  strResult += "<table class='reservation' width='100%' cellspacing='1' cellpadding='4'>";
  strResult += "<tr class='columntitle'><td nowrap>册条码</td><td nowrap>到达情况</td><td nowrap>摘要</td><td nowrap>请求日期</td><td nowrap>操作者</td></tr>";
  nodes = dom.DocumentElement.SelectNodes("reservations/request");
  
  for(int i=0;i<nodes.Count;i++)
  {

   XmlNode node = nodes[i];

   string strBarcodes = DomUtil.GetAttr(node, "items");
   string strRequestDate = LocalTime(DomUtil.GetAttr(node, "requestDate"));

   string strOperator = DomUtil.GetAttr(node, "operator");

                 string strSummary = this.App.GetBarcodesSummary(
                     this.SessionInfo,
                     strBarcodes,
    "html,forcelogin",
       "target='_blank'");

   string strClass = "content";

                 // 状态
                 string strArrivedDate = DomUtil.GetAttr(node, "arrivedDate");
                 string strState = DomUtil.GetAttr(node, "state");
                 if (strState == "arrived")
                 {
                     strArrivedDate = ItemConverter.LocalTime(strArrivedDate);
                     strState = "已于 "+strArrivedDate+" 到书";
       strClass = "content_active";
                 }


   strResult += "<tr class='"+strClass+"'>";
   strResult += "<td class='barcode' width='10%'>" + MakeBarcodeListHyperLink(strBarcodes, ", ") + "</td>";
   strResult += "<td class='barcode' width='10%'>" + strState + "</td>";
   strResult += "<td class='summary' width='70%'>" + strSummary + "</td>";
   strResult += "<td class='requestdate' width='5%'>" + strRequestDate + "</td>";
   strResult += "<td class='operator' width='5%'>" + strOperator + "</td>";
   strResult += "</tr>";

  }
  strResult += "</table>";

 

  strResult += "</body></html>";

  return strResult;
 }

        string MakeBarcodeListHyperLink(string strBarcodes,
            string strSep)
        {
            string strResult = "";
            string[] barcodes = strBarcodes.Split(new char[] { ',' });
            for (int i = 0; i < barcodes.Length; i++)
            {
                string strBarcode = barcodes[i];
                if (String.IsNullOrEmpty(strBarcode) == true)
                    continue;

                if (strResult != "")
                    strResult += strSep;
                strResult += "<a href='"+App.LibraryServerUrl+"/book.aspx?barcode=" + strBarcode + "&forcelogin=userid' target='_blank'>"
                    + strBarcode + "</a>";
            }

            return strResult;
        }

}

readerxml2html.cs.ref样例如下:

<?xml version="1.0" encoding="utf-8"?>
<root>
  <ref>system.dll</ref>
  <ref>system.xml.dll</ref>
  <ref>system.windows.forms.dll</ref>
</root>

~~~~~

GetBarcodeSummary()函数有变动,修改后的形式如下:

                 string strSummary = this.App.GetBarcodesSummary(
                     this.SessionInfo,
                     strBarcodes,
    "html,forcelogin",
       "target='_blank'");



发表时间: 2006-12-24 17:08:04
最后修改时间: 2006-12-30 22:30:26



[回复(需要先登录)] [引用(需要先登录)]普通文章第 6 楼
文章id: 39
itemxml2html.cs

作者: xietao


该脚本负责把XML格式的读者记录转换为HTML的字符串。用于为流通前端服务的,负责创建册信息HTML格式的API中。

脚本程序通过继承宿主的ItemConverter类实现具体功能。

    public class ItemConverter
    {
        public LibraryApplication App = null;

        public ItemConverter()
        {

        }

        public virtual void Begin(object sender,
    ItemConverterEventArgs e)
        {

        }

        public virtual void Item(object sender,
            ItemConverterEventArgs e)
        {

        }

        public virtual void End(object sender,
            ItemConverterEventArgs e)
        {

        }

        public static string LocalTime(string strRfc1123Time)
        public static string LocalDate(string strRfc1123Time)
    }

其中ItemConverterEventArgs类的定义如下:

    public class ItemConverterEventArgs : EventArgs
    {
        public string Xml = "";
        public int Index = -1;
        public int Count = 0;
        public string ActiveBarcode = "";

        public string ResultString = "";
        public Control ParentControl = null;
    }

注: 在itemxml2html.cs中,方法Begin()和End()不起作用,只有Item()起作用。

 

 

 

itemxml2html.cs样例如下:

using System;
using System.Xml;

using DigitalPlatform.LibraryServer;
using DigitalPlatform.Xml;

public class MyConverter : ItemConverter
{

 public override void Item(object sender, ItemConverterEventArgs e)
 {
  XmlDocument dom = new XmlDocument();

  try {
   dom.LoadXml(e.Xml);
  }
  catch (Exception ex)
  {
   e.ResultString = ex.Message;
   return;
  }

  string strResult = "";

  strResult += "册条码:" + DomUtil.GetElementText(dom.DocumentElement, "barcode") + "<br/>";

  strResult += "状态:" + DomUtil.GetElementText(dom.DocumentElement, "state") + "<br/>";

  strResult += "馆藏地点:" + DomUtil.GetElementText(dom.DocumentElement, "location") + "<br/>";

  strResult += "价格:" + DomUtil.GetElementText(dom.DocumentElement, "price") + "<br/>";

  strResult += "注释:" + DomUtil.GetElementText(dom.DocumentElement, "comment") + "<br/>";

  strResult += "借者条码:" + DomUtil.GetElementText(dom.DocumentElement, "borrower") + "<br/>";

  strResult += "借阅日期:" + DomUtil.GetElementText(dom.DocumentElement, "borrowDate") + "<br/>";

  strResult += "借阅期限:" + DomUtil.GetElementText(dom.DocumentElement, "borrowPeriod") + "<br/>";

  strResult += "从属种记录id:" + DomUtil.GetElementText(dom.DocumentElement, "parent") + "<br/>";

  e.ResultString = strResult;
 }

}



发表时间: 2006-12-24 17:50:53
最后修改时间: 2006-12-24 18:21:35



[回复(需要先登录)] [引用(需要先登录)]普通文章第 7 楼
文章id: 40
.aspx命令参数规范

作者: xietao


 

login.aspx

=======

用于公共查询界面登录。

可用参数:

~~~

loginstyle 登录风格。

可用值如下:

reader 读者。这是缺省的风格。

librarian 图书馆工作人员。



发表时间: 2006-12-25 11:39:08



页 1 / 1
 

在线用户
(无) 
当前栏目在线用户数 0, 总在线用户数 0