Open DigitalPlatform opened 1 year ago
假如一个数据库的 keys 配置文件被系统管理员定制修改过,然而又用了(内务的系统管理窗“数据库”属性页的)刷新数据库定义功能,会自动把系统管理员定制过的 keys 配置文件内容覆盖为安装包内相应 keys 模板文件的内容。这样系统管理员定制过的内容就丢失了。
为了避免出现这种问题,保护系统管理员定制的内容不被刷新数据库定义功能破坏,最新版 dp2library 允许我们在 keys 配置文件中,为需要保护的(根下一级)元素添加 reserved="true" 属性,这样当刷新数据库定义的时候,这些元素就不会被覆盖。
一般主要会保护 key table script 三种元素。
注意 script 元素在旧版本中是不允许重复出现的,在最新版中允许重复出现。重复一般是为了给第二个 script 元素添加 reserved 属性,把它保护起来,而第一个 script 元素(它没有被保护)则由刷新功能支配。
下面举例说明用法。假设我们为中文图书库的 keys 配置文件末尾(root 元素以内)增加如下片段:
<key reserved="true"> <xpath nstable="">//marc:record/marc:datafield[@tag='991']/marc:subfield[@code='a']</xpath> <from>991</from> <table ref="991" /> </key> <table name="991" id="200" type="wkey" reserved="true"> <convert> <string style="#test,upper" /> </convert> <convertquery> <string style="upper" /> </convertquery> <caption lang="zh-CN">991</caption> <caption lang="en">991</caption> </table> <script reserved="true"><![CDATA[ partial class MyKeysHost { public void test() { this.ResultString = this.InputString + "append"; } } ]]></script>
然后把第一个 script 元素内的 MyKeysHost 定义行修改为:
public partial class MyKeysHost : KeysHost
(也就是说为 class 前增加了一个 partial 关键字)
最后,为实验考虑,需手动把安装包的 templates 目录中相应类型的 keys 模板文件内容也做修改,为第一个 script 元素内的 MyKeysHost 定义行增加 partial 关键字。
这样,当我们刷新这个数据库的定义的时候,上述带有 reserved 属性的元素就会得到保留。
由于保留的这个 table 元素中用到了脚本函数 #test,这才引出了第二个 script 元素存在的必要性。
#test
假如一个数据库的 keys 配置文件被系统管理员定制修改过,然而又用了(内务的系统管理窗“数据库”属性页的)刷新数据库定义功能,会自动把系统管理员定制过的 keys 配置文件内容覆盖为安装包内相应 keys 模板文件的内容。这样系统管理员定制过的内容就丢失了。
为了避免出现这种问题,保护系统管理员定制的内容不被刷新数据库定义功能破坏,最新版 dp2library 允许我们在 keys 配置文件中,为需要保护的(根下一级)元素添加 reserved="true" 属性,这样当刷新数据库定义的时候,这些元素就不会被覆盖。
一般主要会保护 key table script 三种元素。
注意 script 元素在旧版本中是不允许重复出现的,在最新版中允许重复出现。重复一般是为了给第二个 script 元素添加 reserved 属性,把它保护起来,而第一个 script 元素(它没有被保护)则由刷新功能支配。
下面举例说明用法。假设我们为中文图书库的 keys 配置文件末尾(root 元素以内)增加如下片段:
然后把第一个 script 元素内的 MyKeysHost 定义行修改为:
(也就是说为 class 前增加了一个 partial 关键字)
最后,为实验考虑,需手动把安装包的 templates 目录中相应类型的 keys 模板文件内容也做修改,为第一个 script 元素内的 MyKeysHost 定义行增加 partial 关键字。
这样,当我们刷新这个数据库的定义的时候,上述带有 reserved 属性的元素就会得到保留。
由于保留的这个 table 元素中用到了脚本函数
#test
,这才引出了第二个 script 元素存在的必要性。