-
Notifications
You must be signed in to change notification settings - Fork 54
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 增加了新的读者同步接口 #1198
Comments
某用户单位部署新型同步接口的步骤(2024/11/21 编写) 一、升级 dp2installer 到最新测试版在服务器上,先卸载 dp2installer,然后重新安装 dp2installer 测试版。 安装页面地址为: 二、升级 dp2circulation 到最新测试版在用户单位老师的前端电脑上,先卸载 dp2circulation,然后重新安装 dp2circulation 测试版: 安装页面地址为; 三、启动 dp2circulation 访问 dp2library 服务器进行一些基本的检索操作,观察系统是否运行正常。 dp2library 在启动以后,会花一定时间自动处理读者库和实体库中的所有记录,修改某些字段。要等待自动升级数据完成,再进行其它配置和修改系统的操作。 如何观察自动升级数据是否完成?到 dp2library 模块所在的服务器上,检查当天错误日志文件,里面有文字表明升级数据完成。 (注: 当时的 dp2library 版本有个小 bug,错误日志文件中显示的处理读者记录数为零。已改正) 四、创建“同步读者”读者库利用内务的系统管理窗,创建一个新的,专用于存储从企业微信同步过来的读者记录的读者库。 五、为所有读者库增配 qywx 字段注意,也包括刚才新创建的“同步读者”读者库。 建议利用内务的系统管理窗的“内核”属性页进行。 为所有读者库增配一个“企业微信”检索点:
为所有读者库的 browse 配置文件增加一列 qywx:
(建议加在“证条码号”后面) 六、第一次修改 library.xml 配置文件6.1 请先停止 dp2library 实例。(dp2installer 的实例对话框可以完成此操作) 6.2 在服务器上,利用记事本修改 dp2library 数据目录下的 library.xml 文件。 library.xml 中 circulation 元素内增加或修改属性值:
修改完成后,保存 library.xml。 (注: 这一步在实际操作的时候踩坑了。维护人员没有意识到用户单位服务器上的文件管理器界面隐藏了所有文件的扩展名显示,因此误把 library.xml.bak 当作 library.xml 进行编辑修改,然后走到合并读者记录一步的时候,发现保存回读者库的记录中,qywx 元素没有保存进去) 6.3 然后在 dp2installer 实例对话框中重新启用唯一的 dp2library 实例。 七、给现有读者记录合并增添企业微信 ID在内务前端中打开一个读者查询窗。 最后保存全部修改到读者库。(注: 如前注释的,这一步实际上保存后发现 qywx 元素没有保存进去) 八、第二次修改 library.xml 配置文件,启用读者同步8.1 请先停止 dp2library 实例。(dp2installer 的实例对话框可以完成此操作) 8.2 把(从企业微信同步读者信息的)接口程序 xxxPatronReplication.exe 拷贝到 C: 盘一个专门的文件夹,比如 c:\interface。 8.2 在服务器上,利用记事本修改 dp2library 数据目录下的 library.xml 文件。 library.xml 中根元素下增加:
library.xml 中 monitors 元素下添加:
注意 patronReplication 元素名里面没有 Monitor 字样。 修改完成后,保存 library.xml。 8.4 然后在 dp2installer 实例对话框中重新启用唯一的 dp2library 实例。 8.5 在前端电脑上用内务的批处理任务窗,启动读者同步任务,并观察一下读者同步任务的输出信息。确认同步任务正常进行。 8.6 等一轮读者同步任务完成后,在内务中用读者查询窗可以检索到“同步读者”库中新增了一批记录。检查一下这些记录的内容,应该有 qywx 姓名 单位 电话号码这几个字段和内容。 九、配置内务前端,以允许读者窗编辑 qywx 字段内容为了让内务读者窗的编辑器中可以直接编辑扩展的 qywx 字段,需要
(注:实际操作中这一步也踩坑了,由于文件夹显示文件名时隐藏了扩展名,实际上用记事本创建的文件的文件名是 patron_extend.xml.txt) 然后打开一个读者窗,观察“企业微信”字段是否可以编辑了。 十、复盘10.1 一定要注意用户服务器桌面上 Windows 文件管理器里面显示的文件名,要确认显示了扩展名。 10.2 如果可能,尽量用内务访问 dp2library 服务器,用内务的“系统管理窗”的“内核”属性页观察、编辑修改 library.xml 文件,这样也可以规避 Windows 文件管理器中操作的一些坑。不过前提条件是 dp2library 是正常启动状态。 10.3 使用 Windows 的 notepad 创建 XML 文件的时候,注意保存的时候,对话框里面的文件类型一定要选择 .,这样可以有效避免 notepad 在保存时偷偷给输入的文件名后面添加 .txt 部分。 10.4 利用 notepad 创建 XML 文件的时候,最好带上 prolog,并小心指定正确的 encoding(notepad 本身并没有针对 XML 文件格式确保 prolog 中 encoding 正确的能力)。如果没有 prolog,所产生的不带 BOM 的 UTF-8 编码方式的文件和 ANSI 编码方式的文件,一些应用程序可能无法准确区分。 10.5 内务前端的读者窗在保存时遇到部分字段被拒绝的情况会弹出对话框报错,然而读者查询窗在保存修改时遇到同样情况则不会报错。建议改进读者查询窗中的保存修改功能,遇到同样情况要弹出对话框显示错误,允许操作者选择后续处理方式。 10.7 从卡中心获取的 XML 读者记录文件中,每条读者记录,有些元素是卡中心缺乏的,从卡中心过来的 XML 记录覆盖到读者库中的读者记录上时,可能会覆盖掉读者记录中原有的这些元素。如果要保留这些元素,可以有两个办法:1) 一个是在从卡中心获取的 XML 读者记录中,为不打算覆盖的、卡中心空缺的元素,放一个空内容元素,包含一个属性 dprms:missing,意思是卡中心缺乏这个元素、但想保留读者库中的这个同名元素内容。2) 为 library.xml 的 patronReplication 元素增配一个 mergeStyle="simple" 属性,这样凡是从卡中心过来的 XML 记录中缺乏的元素,都会保留读者库记录中同名的元素内容。 |
dp2library 目前版本中,已经提供了一种向卡中心请求读者数据的接口,要求第三方提供一个 .NET Remoting 服务器,然后 dp2library 在 library.xml 通过配置 patronReplication 元素,让 dp2library 在需要的时候调用这个 .NET Remoting 接口(每轮一次或多次请求),获得卡中心的全部当前读者数据。
这个接口对第三方要求较高:首先要熟悉 .NET Remoting 概念,另外也限制了能使用的编程语言;并且要组织好每轮 API 前后次之间的分页。另外 dp2library 这一端请求的时候也比较复杂,要处理分页。
最新版增加了一种新的读者同步接口,要求第三方提供一个 Console 程序即可,按照调用参数约定,在一个 XML 文件中返回全部读者数据即可。对第三方的要求降低了,dp2library 这一端也不需要处理分页问题。
这种新型接口在 library.xml 的配置方法如下:
注意 exePath 属性取代了旧的接口方式的 interfaceUrl 属性。
(patronReplication 元素还增加了一个属性 mergeStyle,属性值为空或者 "simple")
接口调试的一种方法
把 interface.exe 获取成功的 XML 文件,比如名叫 test.xml 文件,拷贝到 dp2library 数据目录下的 patronReplication 子目录下。
然后配置 library.xml:
这样当 dp2library 有关模块请求同步数据的时候,不会真正调用 interface.exe 接口程序,而是利用上述 test.xml 文件里面的内容,进行同步写入相关读者库的操作。这个方法用于验证 test.xml 文件中的内容被程序正常理解和处理。
第三方在开发接口程序 interface.exe 的过程中,首先应当确认它需要输出的确切数据格式,可以用上述方法来验证确认。
XML 数据文件中的特殊属性
dprms:missing 属性表示这个元素卡中心原本没有提供。dp2library 在遇到有这样属性的元素时,会对当前读者库内对应的记录,做删除此元素的操作。
dprms:default 属性表示当同步过来的数据用于第一次创建一条新读者记录的时候,使用这个元素的内容(需去掉 dprms:default 属性再用到记录中)。然而当读者库中已经有一条这样的记录(打算从卡中心获得的数据中更新某些字段)时,带有 dprms:default 属性的元素会被弃用,不会更新到读者库中对应的记录里。
(注: 上述两个属性,都是用“存在此属性”表达一种状态。有没有属性值、属性值是什么,dp2library 不会在意。也就是说最好的用法是只有属性名,不要有属性值)
The text was updated successfully, but these errors were encountered: