Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

dp2library 流通双链改造 #23

Open
DigitalPlatform opened this issue Nov 18, 2017 · 0 comments
Open

dp2library 流通双链改造 #23

DigitalPlatform opened this issue Nov 18, 2017 · 0 comments

Comments

@DigitalPlatform
Copy link
Owner

DigitalPlatform commented Nov 18, 2017

dp2library 一直以来,在表达流通双链时,使用了读者证条码号和册条码号来定位读者记录和册记录。由于以下原因,这种定位方法不够稳定:

  1. 册条码号可能被改变。比如图书上面贴的册条码号标签可能会受损,需要更换。如果双链中用到了册条码号,就需要让程序专门去连带修改,比较麻烦;

  2. 在后面即将进行的对 dp2library 分馆之间允许册条码号重复的改造中,同一个 dp2library 实例内的不同分馆之间,册条码号是允许重复的,因此用它作为双链的连接点就不合理了。需要改为使用册记录的参考 ID。

  3. 读者借阅证上的条码标签也有可能会受损,需要更换。如果双链中用到了证条码号,就需要让程序专门去连带修改,比较麻。

因此,计划对双链所用的号码类型进行改造。用读者和册记录的参考 ID 来代替读者证条码号和册条码号。

实际上从概念上,读者证条码号和册条码号会演变成一种入口。类似读者姓名和册的其他某些特征,这样就从理论上理顺了关系,理论上我们认为这些入口字段内容都有可能发生重复,在发生重复的时候,出现界面让操作者选择,或者根据某些上下文条件自动进行选择即可。

对预约功能的影响

预约功能改造前主要使用记录路径,部分代码考虑了用参考 ID 的情况,但没有全面改造过。这次需要彻底改造。

这个过程中要考虑原有的预约队列记录在升级后是否还能使用的问题。如果不能兼容,是否要在升级的时候自动修改这些数据记录。

新旧版本数据兼容性,升级时候的考量

改造后,要求以前所使用的号码类型还可以继续使用。新的参考 ID 用法,加上前缀和以前的号码类型区分,比如 @refid:xxxxx。不过,当版本升级后,新版本会优先选用新的号码类型来写入数据记录;能继续使用旧的号码类型,只是出于兼容以前数据目的。

若不想让新版本兼容以前的号码类型用法,也就是说只用新的参考 ID 方法,也可以在升级时候自动遍历以前的所有相关数据记录,自动修改原来记录中的相关号码类型。如果这样运作,可能需要明确设立一个升级后自动修改数据的阶段,凡是不经过这个阶段的 dp2library 模板应在报错以后挂起不让运行,以避免损坏数据或者出现功能故障。

报表窗的本地数据库

改造对内务报表窗的本地数据库格式有一定冲击。原来版本都是用记录路径来定位相应的记录,改造后应可以用参考 ID 来定位。并且,原来的号码类型和新的号码类型混用,在书写统计用的 SQL 语句是否有解决方法目前还不清楚,还需要进行一些试验。如果试验表明不能混用,那就需要重构这部分程序代码,修改本地数据库的数据结构,然后让用户单位系统管理员重新创建本地存储。

报表窗用于创建报表的 SQL 语句也需要进行对应改进

操作日志

以前运行生成的操作日志记录是否能兼容,是否需要自动修改,也是一个问题。

一直以来,操作日志提供了快照恢复的方式,这个方式要求准确定位数据库记录,用的是记录路径。现在要增加通过参考 ID 定位的能力,而且优先使用这种方式。日志记录中常见的 record 元素的 recPath 属性,可能还要增加一个新的属性 refID,新版本要优先使用 refID 属性。

双链检查功能

系统的双链检查相关 API 和内务里面的界面需要做对应的改进

编程方式的考量

由于这次改造动作很大,可以考虑新开辟一个分支来进行改造。这样可以不影响原有代码继续修 bug 和发版本安装包

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant