Skip to content

Latest commit

 

History

History

GcatLite

GcatLite (通用著者号码表取号前端)使用和代码分析

这是一个 Windows Form 的通过汉语著者号表取号的小前端程序,它通过 Restful API 访问 dp2003.com 这台服务器上的 dp2library 服务器

直接安装运行 GcatLite:http://dp2003.com/gcatlite/v3/publish.htm

界面用法

  1. 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 开头的部分要保持原样。

  1. 著者

在这个文本框输入要取著者号码的著者字符串。

  1. 剪贴板活动敏感

如果这个checkbox被勾选时,软件将处于一种对Windows剪贴板的敏感状态,一旦Windows剪贴板内容有任何改变,软件将自动从剪贴板中复制文字到著者文本框中,并自动执行取著者号的操作。

这个功能可用于本软件和编目软件协同操作。比方说,在编目软件的MARC窗中,选定著者字符串,然后用编目软件的“复制(Copy)”功能将著者字符串复制到Windows剪贴板中,本软件就能立即感知到剪贴板的变化,就会自动进行取号操作。

不过,这个敏感功能对剪贴板的任何内容变化都会响应,如果我们进行的是和取著者号无关的一般复制粘贴操作,本软件也会响应。所以,在不需要这个功能的时候,可以把本checkbox的勾选状态清除。

这个敏感功能只有在软件保持运行状态时才有。如果本软件退出后,敏感功能也就无效了。如果暂时不想看到本软件的窗口,可以将其最小化。

  1. 输出调试信息

如果这个checkbox被勾选时,当取号操作进行时,会自动获得有关取号过程的调试信息。调试信息详细列出了取号的每一步骤和相关数据,可以用来核对取号过程是否正确。对于不熟悉汉语著者号码表取号原理的用户,经常查看调试信息,有顺便学习取号原理的好处。

  1. 遇多音字提示选择

决定取号过程中,遇到多音字是否要提示选择。

如果这个checkbox处于off状态,软件会自动取多音字的第一个音。然而这通常并不是适当的策略。因此最好令其处于on状态。

  1. 遇多个条目提示选择

著者的姓氏汉字若为多音(多义)字,著者号码表就有多个条目对应这个汉字。本checkbox的状态如果为on,则表示要操作者选择条目,然后软件根据选择结果取号。如果本checkbox的状态为off,则软件自动使用第一个条目。

例如“华山”。

  1. 著者号

取号的结果字符串放入本文本框。

  1. 结果自动复制到剪贴板

如果本checkbox为on,则表示当取号结果放入著者号文本框后,还会自动复制到Windows剪贴板,以便用户在其他窗口(例如编目软件的MARC编辑窗)中用“Paste”功能将著者号粘贴下来。

结合“剪贴板活动敏感”checkbox为on状态,可以形成一种非常方便的操作模式:在编目软件中,复制著者字符串到剪贴板,稍后剪贴板中自动就有了著者号字符串,只需从剪贴板中粘贴到编目软件窗口适当位置即可。整个操作,不必从编目软件窗口切换到本软件窗口。

  1. 调试信息

放入取号中返回的调试信息。

代码剖析

这个 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

dynamic 反序列化 JSON 的方法

代码中还示范了两种不同的 JSON Serialize/Deserialize 方法。一种是需要定义响应数据结构类的方法(而请求已经用了匿名类创建对象);另外一种是利用 dynamic 类型的方法,不需要定义各种数据接口类。用条件编符号 DYNAMIC 来控制编译。当 DYNAMIC 符号被定义时,是使用的 dynamic 类型的方法。在 VS 中 Project 属性的“生成”页面定义。

第三方开发者只需要选择自己喜欢的一种方法加以模仿即可。


email:

QQ群:

    源代码和开发 -- 开源dp2系统开发 163251536
    
    产品使用咨询 -- 数字平台产品 487513826

最后修改日期: 2018/8/17