想象一下,现在,您能够像导航一个 Web 页面那样轻松地导航一个 Rich Client Platform (RCP) 应用程序的丰富功能。跟随本文的学习,您将能够通过单击一个 URL 来打开 Eclipse RCP 应用程序中的特定业务对象。
Eclipse Rich Client Platform (RCP) 为富客户机提供了一个极为灵活且功能丰富的框架。但是它的一个缺点是不能轻松地从其他源链接 RCP 应用程序中的业务对象。如果用户能够在其他应用程序中单击某个链接并被带到 RCP 应用程序中,并且已经打开了该链接所引用的业务对象,那将十分有帮助。例如,假定有一个用于处理费用申请的 RCP 应用程序。可能生成有关过期偿付的报表并以电子表格的形式发布(或者是在内部网中,或者作为富文本文档,或者作为电子邮件,或者其他形式等等)。该报表可能对每个过期申请使用一个引用编号。报表不会强制使用者把该引用编号复制并粘贴到 RCP 应用程序的搜索对话框中,而是包含启动 RCP 应用程序的超级链接 URL,该 URL 将把用户直接引导到对应的费用申请。本文将说明如何完成上述过程。
读者应当拥有编写 Eclipse 插件的经验,以及 Windows® 注册表和 TCP 协议的一般知识。虽然本文提供的示例针对 Windows 操作系统,但是在其他操作系统中也可以实现相同的功能。有关更多信息,请参阅 参考资料。
让我们从整体上查看解决方案的工作原理,然后进行细分并讨论如何实现各个部分。
遵循图 1 中的流程:
- 假定用户已经在桌面中打开 RCP 应用程序。
- 然后假定此用户在他的常用邮件客户机中收到了一封电子邮件,该邮件中包含链接 rcp://claim=25222 — 这是指向过期申请的引用 (1) 。
- 该用户单击链接,这将启动该用户的默认浏览器以处理请求 (2)。
- 该浏览器知道它不能在本机打开此 URL,因此它将查询 Windows 注册表以确定应当怎样委托该操作 (3)。
- 注册表将查找 rcp:// 协议并确定有一个与它绑定在一起的批处理文件 (4)。
- 此批处理文件将被执行 (5),这将触发独立的 Java™ 客户机 (6),捕捉 URL 的参数,并因此向 RCP 应用程序中内嵌的 TCP 服务器发出一个本地 TCP 调用 (7)。
- 该 TCP 服务器将解析来自该 URL(即,claim=25222)的参数并请求 RCP 应用程序打开相应的业务对象 (8)。
- 然后将在 RCP 应用程序 UI 中向用户呈现所请求的业务对象 (9)。
此过程涉及到许多步骤,但幸运的是,每个步骤都相对简单并且可以根据您的环境和应用程序进行调整。最后几步将帮助解决如何使 RCP 应用程序获得 Windows 焦点之类的细节。
|
Windows 使用注册表中的条目识别有效的 URL 协议和确定应当向哪个应用程序发送带有特定协议的请求。要使我们的 RCP 应用程序能够响应 URL,必须在 HKEY_CLASSES_ROOT
hive 下创建一个键。键名必须匹配正在创建的协议。在本文中,我们将使用 “rcp://” URL 协议,因此必须把键命名为 “rcp”。该键下的默认字符串值与新协议的显示名称相对应。在 “rcp” 键下,还必须创建带有一个字符串值的 shell/open/command 键,该字符串值包含在收到 “rcp://” 请求时 Windows 应当打开的应用程序的路径。
在本文中,我们将把 Windows 指向一个批处理文件(请参阅 “批处理文件”)。该键的字符串值应当在其末尾附加了 %1
,这将告诉 Windows 把该 URL 查询字符串传递给您的应用程序。这是我们把上下文信息(例如要打开的特定业务对象)传递给 RCP 应用程序的方法。
下面的 Windows 批处理文件代码片段将在注册表中创建相应的键,该键带有将启动记事本的 “rcp://” 协议。要自定义该脚本,请用需要使用的协议替换 rcp
的所有实例,并使用需要 Windows 执行的文件的完整路径替换 C:/Windows/Notepad.exe
。
本文转自IBM Developerworks中国