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

点击:39365[回复顶层] [树状] [简明]


头衔: 总工
文章数: 539
积分: 5390
注册时间: 2005/9/5
[回复(需要先登录)] [引用(需要先登录)]普通文章第 1 楼
文章id: 33
dp2图书馆应用服务器参考手册

作者: xietao




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





头衔: 总工
文章数: 539
积分: 5390
注册时间: 2005/9/5
[回复(需要先登录)] [引用(需要先登录)]普通文章第 2 楼
文章id: 34
安装

作者: xietao




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





头衔: 总工
文章数: 539
积分: 5390
注册时间: 2005/9/5
[回复(需要先登录)] [引用(需要先登录)]普通文章第 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





头衔: 总工
文章数: 539
积分: 5390
注册时间: 2005/9/5
[回复(需要先登录)] [引用(需要先登录)]普通文章第 4 楼
文章id: 37
cfgs目录下的配置文件

作者: xietao




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





头衔: 总工
文章数: 539
积分: 5390
注册时间: 2005/9/5
[回复(需要先登录)] [引用(需要先登录)]普通文章第 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





头衔: 总工
文章数: 539
积分: 5390
注册时间: 2005/9/5
[回复(需要先登录)] [引用(需要先登录)]普通文章第 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





头衔: 总工
文章数: 539
积分: 5390
注册时间: 2005/9/5
[回复(需要先登录)] [引用(需要先登录)]普通文章第 7 楼
文章id: 40
.aspx命令参数规范

作者: xietao


 

login.aspx

=======

用于公共查询界面登录。

可用参数:

~~~

loginstyle 登录风格。

可用值如下:

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

librarian 图书馆工作人员。



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



页 1 / 1
 

在线用户
访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客
当前栏目在线用户数 41, 总在线用户数 48