<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;
}
}