扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
作者:陈 原 来源:论坛整理 2008年1月10日
关键字: Lotus Notes lotus
Eclipse 组件的开发
当然很多情况下,只依靠 NSF 组件构建 Notes 8 复合应用是不够的。在做报表展现,图形处理,以及一些其他业务应用的时候,传统 Notes 开发会遇到一些瓶颈。在 Notes 8 中,我们可以通过 Eclipse 组件来弥补 NSF 组件功能上的不足。
开发复合应用的 Eclipse 组件需要具有 Eclipse 的插件(plug in)开发技能。关于 Eclipse 插件开发细则以及 Eclipse 组件开发环境的配置,请参考 http://www.eclipse.org 上的相关文档,此处不再赘述。
与 NSF 组件一样,Eclipse 组件的开发同样遵循着 定义属性和操作,属性的发布,操作的实现 三个步骤。
定义属性和操作
以 ImageView 组件为例,该组件接收 NewsIDChanged 属性(该属性值为新闻号),执行 ShowImage 操作:显示该新闻号对应的新闻的图片。要在 Eclipse 组件中定义该属性和操作,需要执行下列步骤。
图 13. Eclipse 组件——ImageView
首先,创建 WSDL。Eclipse 组件中同样使用 WSDL 来描述组件的属性和操作,并且其格式与 NSF 组件的完全一致。这意味着我们同样可以用前面提到的 Property Broker Editor 这个可视化工具来编写 Eclipse 组件的 WSDL(当你已经熟悉了 Eclipse 中复合应用组件的开发之后,你会更愿意使用文本编辑工具来编辑)。调用 Property Broker Editor 的方法是 \framework\rcp\rcplauncher.exe -config wsdledit。
图 14. 利用 Property Broker Editor 定义 Eclipse 组件的属性
利用上图的 Property Broker Editor 工具我们得到了一个描述文件 actions.wsdl。接下来,需要把得到的 action.wsdl 导入到 Eclipse 组件中。在 Eclipse 的项目中,新建一个名为 wsdl(该名称不做限定)的文件夹,把 WSDL 文件导入到该文件夹中。下面这步非常关键:在该 Eclipse 插件的扩展中加入 com.ibm.rcp.propertybroker.PropertyBrokerDefinitions,并在该扩展下新建一个 handler。
图 15. 扩展 PropertyBrokerDefinitions
在这里,此扩展将会把描述文件 WSDL 与具体实现类相结合。如下图所示。File 属性指定为我们刚刚生成的 actions.WSDL 文件,Type 处选择 SWT_ACTION,Class 属性则选定将会具体实现 Eclipse 组件的操作的类 com.ibm.xna.actions.ImageViewAction。
图 16. 扩展详细信息
保存后在 Eclipse 插件的 plugin.xml 中会多出如下代码:
清单 5. Eclipse 组件的 Plug.xml 片断
<extension
id= "com.ibm.xna.properties"
name= "xnapbdefs"
point= "com.ibm.rcp.propertybroker.PropertyBrokerDefinitions" >
……
<handler
class= "com.ibm.xna.actions.ImageViewAction"
file= "wsdl/actions.wsdl"
type= "SWT_ACTION" />
……
</extension>
至此,我们就完成了 Eclipse 组件属性和操作的定义工作。需要强调的是,对某些之前没有接触过 Eclipse 插件开发的 Notes 开发者而言,上述内容也许比较陌生,因为要掌握 Eclipse 中的扩展,扩展点等概念通常需要一些时间。但从长远来看,考虑到这门技术在未来给他们带来的价值,这种技术上的投入毫无疑问是值得的。
属性的发布
在 Eclipse 组件中,属性的发布同样也非常简单。这里我们以另一个 Eclipse 组件 SnapshotView 为例,该组件用于展示若干篇新闻的图片缩略图。一方面,它可以接受 ImageNewsList 传递给它的属性,执行缩略图展现的操作;另一方面,当用户点击某篇新闻的缩略图时,它会把该新闻的 NewsID 作为属性发布出去。在这里我们只介绍 SnapshotView 组件中属性发布的实现。
图 17. 扩展详细信息
在双击某张缩略图时,我们会执行如下的代码:
PropertyBrokerUtil.publishProperty("com.ibm.xna",viewID, "NewsIDChanged", id);
其中 PropertyBrokerUtil.publishProperty 方法是我们自定义的一个函数,通过该函数,SnapshortView(视图号为viewID)将发送名称空间为 com.ibm.xna,名称为 NewsIDChanged 的属性,值为某篇新闻的编号 id。
该方法的实现代码如下:
清单 6. 发布属性的 Eclipse 代码
public void publishProperty(String namespace,String viewID,
String property, String value) {
PropertyBroker pb = PropertyBrokerFactory. getBroker ();
// 获取 PropertyBroker 实例
PropertyValue[] values = new PropertyValue[1];
try {
Property prop = pb.getProperty(namespace, property);
// 根据名称空间和属性名获取属性
if (prop != null ) {
values[0] = PropertyFactory. createPropertyValue (prop, value);
// 生成属性值
pb.changedProperties(values, viewID);// 发布属性
}
} catch (PropertyBrokerException e) {
e.printStackTrace();
}
}
在上面这个函数中,我们首先获取一个 Property Broker 的实例,再通过名称空间和属性名获取 Property 实例。实际用来发布属性的方法是 PropertyBroker 的 changedProperties 函数,此函数有两个参数,一个是 PropertyValue 数组,用于存放多个要发布的属性值对;另一个是字符串,用于标志属性变化时的上下文,应该与连接(Wiring)源组件的 EntityID 匹配。本例中,该 viewID 是通过 snapShotView.getViewSite().getId() + ":" + snapShotView.getViewSite().getSecondaryId() 拼接而成的。
如果觉得拼接这个 viewID 麻烦,还有一种做法更加简单。可以使用 SWTHelper (com.ibm.rcp.propertybroker.swt.api.SWTHelper) 类的 changedProperties 函数发布属性。该函数的函数头为:SWTHelper.changedProperties(PropertyValue[] arg0, IViewPart arg1),与 PropertyBroker 的同名函数的不同之处在于,该函数的第二个参数是指向 ViewPart 的指针。如果是在 ViewPart 类内部调用该方法的话,那么很多情况下你只需要简单写一个 this 即可。
共5页。 912345:
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者