dp2 icon indicating copy to clipboard operation
dp2 copied to clipboard

dp2library 允许分馆之间互相借书

Open DigitalPlatform opened this issue 3 years ago • 1 comments

dp2library 最新版经过改造,允许同一个实例内的不同分馆之间互相借书。

值得关注的技术点如下:

  1. 需要在流通借阅权限 XML 定义中,立足于图书所在的一个分馆,为来自另一些分馆的读者类型,定义各项权限。

注意,权限是定义在图书所在的分馆。从这个视角,读者是外来的,服从本分馆的管理。

原先借阅权限定义中的读者类型是这样的“普通读者",而为外来读者增加的读者类型规定采用”西城分馆/普通读者“这样的形态。为简化定义,可以使用通配符,比如”西城分馆/*“代表西城分馆的所有读者类型都适用此项参数。

  1. 借阅权限中的”可借总册数“,是有馆代码语境的。如果一个外来读者,他既借阅了他所在分馆的图书,又借阅了目标分馆的图书,那么这个”可借总册数“应该按照两类不同的图书册数分别计算。

  2. 还书时要检查是否超期,超期测算要用到开馆日历。那么是用图书所在分馆的开馆日历么?如果读者是亲自还书到图书所在分馆,这是合理的。并且,读者还应当关注图书所在分馆是否开馆,如果是闭馆日可能还无法还书,所以牵涉到图书所在分馆的日历是有道理的。

但如果读者只是还书到自己所属的分馆呢?首先开馆日历和图书所在分馆可能不同,若按照图书所在分馆的日历来计算超期豁免期似乎不太合理。

综上所述,似乎应该是当时读者还书实际去到的那个分馆的日历。这样,还书 API 实际上还需要一个(除了读者证条码号和册条码号以外的)第三参数即”实际还书的分馆“。

  1. 从属于分馆的馆员账户,需要根据馆际互借需求,自动在 GetReaderInfo() API 中临时扩大可见的分馆范围,这样允许馆员查看有互借关系的其它分馆的读者记录。内务快捷出纳窗扫入(其它分馆)读者证条码号的时候需要显示读者信息,需要这个能力。但并不是全面默认扩大这个馆员账户的分馆馆代码范围,只是和借还操作直接相关的部分临时放开这个范围。

需要一个从 library.xml 中流通借阅权限定义中抽取出相关馆代码(列表)的函数。

  1. 从属于分馆的馆员账户,需要根据馆际互借需求,让 SearchReader() API 和 SearchItem() API 扩大可见的分馆范围,这样允许馆员利用内务前端检索有互借关系的其它分馆的读者记录和册记录。

注意内务的实体查询窗,在系统参数对话框的“检索”属性页可以配置是否过滤管辖馆以外的册,在馆际互借情况下,要选择不过滤才能在浏览列表中看到这些册。(TODO: 平时过滤的时候应该有地方可以看到过滤掉多少条的提示)

  1. SessionInfo 对象里面增加了一个 ExpandLibraryCodeList 成员,表示因为馆际互借可能扩大了范围的馆代码列表。它是第一次会自动从 library.xml 的 rightsTable 中提取产生。每当 library.xml 的 rightsTable 被改变时,每个 SessionInfo 对象的 ExpandLibraryCodeList 都会被迫刷新一次。

如果用内务观察,可以先修改借阅权限 XML(做出一些可能会导致来访馆代码变化的修改),然后清除一次内务的配置文件缓存,然后重新打开读者查询窗,可能会观察到数据库名列表内容的变化。

DigitalPlatform avatar Mar 02 '22 08:03 DigitalPlatform

对内务的一些优化和改进

  1. 当“参数配置”对话框的“种册”属性页中“显示其他分馆的册记录”checkbox 为 off 状态时,在实体查询窗中双击一个来自无法管辖的分馆的册记录行,装入种册窗(并自动选择“册”属性页列表中的这一个册行),会到在种册窗“册”属性页列表中无法显示这一个册的情况。最新版内务此时会自动 MessageBox 提示(建议用户去修改参数配置对话框的 checkbox 状态)。

  2. 实体查询窗有可能会从浏览列表中自动过滤掉不是当前账户管辖的分馆的册行。这个行为受到参数配置对话框“检索”属性页的“只看本分馆册”checkbox 控制。在馆际互借的情况下要避免进行过滤。TODO 这里是否可以考虑更自动一些,比如不过滤,用特殊颜色显示管辖范围外的册行。

  3. 借阅权限编辑界面,如果增添了类似“海淀分馆/*”这样的读者类型,不会自动添加到 readerType 元素下的 item 元素中。从编辑界面附近的 XML 代码界面能看到和确认这一点

DigitalPlatform avatar Mar 08 '22 03:03 DigitalPlatform