技术开发 频道

在Lotus Notes复合应用中集成Lotus Symphony

Notes 8 中的 Symphony 组件

当然很多情况下,只依靠 NSF 组件构建 Notes 8 复合应用是不够的。在做报表展现,图形处理,以及一些其他业务应用的时候,传统 Notes 开发会遇到一些瓶颈。在 Notes 8 中,我们可以通过 Eclipse 组件来弥补 NSF 组件功能上的不足。Notes 8 中新加入的文档编辑工具 Lotus Symphony 源自 Open Office 1.1 ,是基于 Lotus Expeditor 平台的一个 Eclipse 的插件应用。换句话说,本质上 Lotus Symphony 就是一个大的 Eclipse 插件包。因为 Lotus Symphony 是基于 Eclipse 插件结构 ,所以我们可以把它做成一个 Eclipse 组件来丰富复合应用的功能。开发复合应用的 Eclipse 组件需要具有 Eclipse 的插件(plug-in)开发技能。关于 Eclipse 插件开发细则以及 Eclipse 组件开发环境的配置,请参考 http://www.eclipse.org 上的相关文档,此处不再赘述。

与 NSF 组件一样,Eclipse 组件的开发同样遵循着 定义属性和操作,属性的发布,操作的实现 三个步骤。在最新版本的 Notes 8 中 Lotus Symphony 已经为复合应用提供了一个默认的 Symphony 组件 Symphony View 如 图 12 所示。


图 12. 默认的 Symphony 组件 Symphony View
图 12. 默认的 Symphony 组件 Symphony View

如果你所得到的 Notes 8 不是最新版,你所看到的组件选用板会和上图不一样,不过那也没有关系,默认的 Symphony View 还是存在的,大家可以参照下面的复合应用组装章节,来添加默认的 Symphony 组件到我们的复合应用中去。

Eclipse 组件中同样使用 WSDL 来描述组件的属性和操作,并且其格式与 NSF 组件的完全一致。默认的 Symphony 组件属性和操作的定义文件位于 <notes install directory>\framework\shared\eclipse\plugins\ com.ibm.productivity.tools.ui.views_1.0.0.20071130-2008\views.wsdl 这里我们定义了四个属性,其中两个属性为对外发布,另外两个属性为接收其他组件传来的消息。

当我们保存当前编辑文档时对外发送一个属性:文档保存的路径(FileSaved_Message),该属性的类型为统一资源定位符(URL),对应操作 FileSaved_Operation;当我们对文档里的文本对象做选择时对外发送一个属性:当前选择的文本(SelectionChanged_Message),该属性类型为字符串(String)对应操作 SelectionChanged_Operation;当我们要打开其它组件指定的文档时要接收一个属性:指定文档的路径(LoadFile_Message),该属性的类型为统一资源定位符(URL),对应操作 LoadFile_Operation;当我们要往当前文档光标位置插入指定字符串时要接收一个属性:指定的字符串(Insert_Message),该属性类型为字符串(String)对应操作Insert_Operation。

作为一个 Notes 视图,它本身提供了将所有客户按公司名列举的功能,我们希望它能够在单击视图中的每个客户文档时,对外发送一个属性:该客户的公司名称,该属性的类型为字符串(String)。同时我们希望它能够在单击视图中一个按钮时, 对外发送一个属性:非常好的客户列表的模板的路径,该属性的类型为统一资源定位符(URL)。Symphony 组件定义的属性如 清单 3 所示。Symphony 组件定义的操作如 清单 4 所示。


清单 3. Symphony 组件定义的属性
            <message  name="FileSaved_Message">
            <part name="FileSaved_Part" type="idt:url"/>
            </message>
            <message  name="Insert_Message">
            <part name="Insert_Part" type="xsd:string"/>
            </message>
            <message  name="LoadFile_Message">
            <part name="LoadFile_Part" type="idt:url"/>
            </message>
            <message  name="SelectionChanged_Message">
            <part name="SelectionChanged_Part" type="xsd:string"/>
            </message>
            


清单 4. Symphony 组件定义的操作
            <operation  name="FileSaved_Operation">
            <portlet:action name="FileSaved" caption="FileSaved.caption"
            description="FileSaved.description"/>
            <output>
            <portlet:param name="FileSaved" partname="FileSaved_Part"
            caption="FileSaved.caption" description="FileSaved.description"/>
            </output>
            </operation>
            <operation  name="SelectionChanged_Operation">
            <portlet:action  name="SelectionChanged" caption="SelectionChanged.caption"
            description="SelectionChanged.description"/>
            <output>
            <portlet:param name="SelectionChanged" partname="SelectionChanged_Part"
            caption="SelectionChanged.caption"
            description="SelectionChanged.description"/>
            </output>
            </operation>
            <operation  name="Insert_Operation">
            <portlet:action name="Insert" caption="Insert.caption"
            description="Insert.description"/>
            <input>
            <portlet:param name="Text" partname="Insert_Part"
            caption="InsertText.caption" description="InsertText.description"/>
            </input>
            </operation>
            <operation  name="LoadFile_Operation">
            <portlet:action  name="LoadFile" caption="LoadFile.caption"
            description="LoadFile.description"/>
            <input>
            <portlet:param name="FileLocation" partname="LoadFile_Part"
            caption="FileURLType.caption" description="FileURLType.description"/>
            </input>
            </operation>
            

相应的操作实现代码都已经封装在了 Lotus Symphony 插件包里。Lotus Symphony 通过这些属性和操作为复合应用提供了简单接口,给复合应用提供了简单的文档编辑能力:打开,保存文档,插入字符串,获取当前选择文本。当我们要更加紧密地实现 NSF 组件和 Lotus Symphony 组件之间的集成时我们就需要通过 Lotus Symphony API 来编写 Eclipse 组件定制 Lotus Symphony,从而提供更多的接口与功能给其他复合应用的组件。我们会在另一篇文章里介绍如何使用 Lotus Symphony API 来开发定制 Lotus Symphony。

0
相关文章