这是一个 Windows Form 的通过汉语著者号表取号的小前端程序,它通过 Restful API 访问 dp2003.com 这台服务器上的 dp2library 服务器
直接安装运行 GcatLite:http://dp2003.com/gcatlite/v3/publish.htm
- Gcat Restful Server URL:
在这里输入著者号码表 Restful Server 的 URL,一般为
http://dp2003.com/dp2library/rest
表示直接使用数字平台公司服务器(dp2003.com)上的本项服务。
如果用户自己安装了 dp2library 服务器软件,此 URL 则为用户自己的 dp2library 服务器的实际 URL。(注:dp2library 服务器若要支持著者号取号功能,需要增配著者号码数据库等附加资源,详情可联系数字平台)
要了解自己安装的 dp2library 服务器的可用 URL,方法是:在 dp2library 所在服务器机器上启动 dp2Installer,然后打开 dp2library 实例管理对话框,可以看到它当前绑定的协议 URL。
当用于 GcatLite 的时候,只能使用其中的以 rest.http 开头的一个 URL ,并且注意输入 GcatLite 界面的时候这个 URL 字符串开头的 rest.
部分要去掉(如果发现当前 dp2library 没有绑定 rest.http 协议,要添加一个绑定)。
而如果是用于内务前端(dp2Circulation)的时候,所有的协议 URL 都可用,并且协议 URL 开头的部分要保持原样。
- 著者
在这个文本框输入要取著者号码的著者字符串。
- 剪贴板活动敏感
如果这个checkbox被勾选时,软件将处于一种对Windows剪贴板的敏感状态,一旦Windows剪贴板内容有任何改变,软件将自动从剪贴板中复制文字到著者文本框中,并自动执行取著者号的操作。
这个功能可用于本软件和编目软件协同操作。比方说,在编目软件的MARC窗中,选定著者字符串,然后用编目软件的“复制(Copy)”功能将著者字符串复制到Windows剪贴板中,本软件就能立即感知到剪贴板的变化,就会自动进行取号操作。
不过,这个敏感功能对剪贴板的任何内容变化都会响应,如果我们进行的是和取著者号无关的一般复制粘贴操作,本软件也会响应。所以,在不需要这个功能的时候,可以把本checkbox的勾选状态清除。
这个敏感功能只有在软件保持运行状态时才有。如果本软件退出后,敏感功能也就无效了。如果暂时不想看到本软件的窗口,可以将其最小化。
- 输出调试信息
如果这个checkbox被勾选时,当取号操作进行时,会自动获得有关取号过程的调试信息。调试信息详细列出了取号的每一步骤和相关数据,可以用来核对取号过程是否正确。对于不熟悉汉语著者号码表取号原理的用户,经常查看调试信息,有顺便学习取号原理的好处。
- 遇多音字提示选择
决定取号过程中,遇到多音字是否要提示选择。
如果这个checkbox处于off状态,软件会自动取多音字的第一个音。然而这通常并不是适当的策略。因此最好令其处于on状态。
- 遇多个条目提示选择
著者的姓氏汉字若为多音(多义)字,著者号码表就有多个条目对应这个汉字。本checkbox的状态如果为on,则表示要操作者选择条目,然后软件根据选择结果取号。如果本checkbox的状态为off,则软件自动使用第一个条目。
例如“华山”。
- 著者号
取号的结果字符串放入本文本框。
- 结果自动复制到剪贴板
如果本checkbox为on,则表示当取号结果放入著者号文本框后,还会自动复制到Windows剪贴板,以便用户在其他窗口(例如编目软件的MARC编辑窗)中用“Paste”功能将著者号粘贴下来。
结合“剪贴板活动敏感”checkbox为on状态,可以形成一种非常方便的操作模式:在编目软件中,复制著者字符串到剪贴板,稍后剪贴板中自动就有了著者号字符串,只需从剪贴板中粘贴到编目软件窗口适当位置即可。整个操作,不必从编目软件窗口切换到本软件窗口。
- 调试信息
放入取号中返回的调试信息。
这个 Project 示范了如何用 C# 调用取号所需的两个 Restful API (Login() 和 GetAuthorNumber()),实现 通用汉语著者号码表(刘湘生主编) 的取号功能。
它没有采用其他通讯 DLL Project,而是直接把调用 Restful API 的代码写在了本 Project 中。这样方便第三方借鉴使用这些代码
它实现了一个 RestChannel 类,这个类本身包含 CookiesContainer,只要在一轮完整的通讯过程中持续使用这个类的同一个对象, 就可以维持服务器方所要求的 Session 状态持续
所谓“完整的通讯过程”,一般由一次 Login() API 调用,若干次 GetAuthorNumber() API 调用构成。要多次调用 GetAuthorNumber() API 是因为有时候服务器在取号过程中,需要前端回答一些问题,才能继续取号。服务器此时会通过 result.Value 返回一个整数值 -3,然后前端 要弹出一个对话框,和操作者交互,操作者输入答案,程序将之放入 List 结构的最后一个元素 Answer 属性,然后程序继续重新调用 GetAuthorNumber() API。
为了让概念简单,GetAuthorNumber() API 的 questions 参数(也就是 List 类型)专门写成 ref 方式。这样调用者就能意识到,一直要保持这个对象,对象会用于反复调用同一 API
代码中还示范了两种不同的 JSON Serialize/Deserialize 方法。一种是需要定义响应数据结构类的方法(而请求已经用了匿名类创建对象);另外一种是利用 dynamic 类型的方法,不需要定义各种数据接口类。用条件编符号 DYNAMIC 来控制编译。当 DYNAMIC 符号被定义时,是使用的 dynamic 类型的方法。在 VS 中 Project 属性的“生成”页面定义。
第三方开发者只需要选择自己喜欢的一种方法加以模仿即可。
email:
QQ群:
源代码和开发 -- 开源dp2系统开发 163251536
产品使用咨询 -- 数字平台产品 487513826
最后修改日期: 2018/8/17