和我们的脚本话题有关,我介绍一下dp2circulation V2中,对加拼音功能选择多音字情况下的缓存功能。
前文介绍的最新加拼音代码,它已经具备了一个功能,当您反复为一条书目记录加拼音的时候,以前选择的多音字,那些选择,会被缓存起来,记忆到书目记录的某个位置,后来当需要选择多音字的时候,程序就自动探寻是不是有以前的缓存符合要求,如果找到缓存,就不必让操作者选择多音字了。
提醒一下,dp2系统里面的书目记录本质上是用XML格式存储的。上述拼音选择信息,您是看不到它在MARC记录中的哪里存在的,它是以XML格式存储在MARC信息以外。当然,MARC信息本质上也是最后转化为XML格式存储的。两类信息虽然同在一条书目记录中,但是互不干扰。
也就是说如果您用ISO2709格式备份出书目记录,然后摧毁书目库重建,然后重新导入这些书目记录从ISO2709文件中,那么,上述拼音选择的缓存信息就被丢失了。因为MARC格式文件无法保存那些缓存的信息。
而如果您用XML格式来备份书目记录,则可以保留拼音选择的缓存信息。
~~~
选择拼音的阶段,有了缓存,操作起来省心了,这是好事。
但是,假如第一次选择多音字的时候,明明当时选错了,后来想要重新执行一次Ctrl+A加拼音的功能,程序却固执地用以前缓存的错误选择,而不给操作者重新选择的机会,这如何是好?
先说一个笨办法:将相关的汉字子字段内容随意增加一个汉字,然后重新加拼音。这时候,由于汉字内容发生了变化,缓存虽然依然存在,但是匹配不上了,就不起作用了,于是就出现了选择多音字的对话框,可以选择了。然后对相关汉字子字段内容和依据它创建的拼音子字段内容手工稍作修改即可。
下面给出一段脚本代码,可以实现清除当前记录现有拼音选择缓存信息的功能。
在Main()函数内适当位置增加一个功能入口:
// 清除拼音缓存
actions.NewItem("清除拼音缓存", "清除存储的以前选择过的汉字和拼音对照关系", "ClearPinyinCache", false);
然后在MyHost类中适当位置,增加函数ClearPinyinCache()的代码:
void ClearPinyinCache()
{
this.DetailForm.SetSelectedPinyin(null);
}
保存代码。然后在dp2circulation的种册窗中试验执行一下吧。
~~~
其实,为何不在种册窗的工具条上增加一个正经八百的功能按钮“清除拼音缓存”呢?
是的。常用功能需要这样考虑。
dp2circulation这个程序,魅力就在于无论是否常用的功能,都有二次开发的功能接口,能被脚本代码调用。它简直是为二次开发而生的。这些具体的功能本来就有用,组合起来可以发挥更大的作用。