Yesky首页| 产品报价| 行情| 手机 | 数码 | 笔记本 | 台式机 | DIY硬件 | 外设 | 网络 | 数字家庭 | 评测 | 软件 | e时代 | 游戏 | 图片 | 壁纸 | 群乐 | 社区 | 博客 | 下载
软件频道>程序开发>JavaVBVCDelphiC/C++Web开发微软专栏移动数据库程序人生软件工程|产品中心下载什么是软件架构
您现在的位置: 天极网 > 开发频道 > 在 Lotus Notes 8 中开发复合应用
全文
群乐:IBM

在 Lotus Notes 8 中开发复合应用

2008-01-10 08:55 作者: 陈 原 出处: 论坛整理 责任编辑:方舟
  NSF 组件的开发

  对一个复合应用的组件而言,最基本的部分是属性和操作。所以对组件的开发而言,最重要的部分也将围绕着属性和操作来进行,大体上可以分为三个步骤:定义属性和操作,属性的发布,操作的实现。

  下面我们将用上面这个复合应用中的两个组件为例,描述 NSF 组件开发的过程。

  这两个 NSF 组件一个是 Notes 视图(ImageNewsList),用于展示新闻列表。一个是 Notes 表单 (ImageDescForm),用于显示新闻具体内容。

  定义属性和操作

  属性和操作的定义过程首先是一个思考的过程:将一个 Notes 元素封装成一个组件,需要它对外发布什么属性,接收什么属性,完成什么操作。这个分析的过程与具体的编码实现同等重要。因为在设计组件时,模块化与可重用性是组件非常关键的要素,所以在构思一个组件时,考虑的不仅仅是实现功能,还应该考虑如何从一个特定功能中抽取出可通用的服务。

  ImageNewsList 是一个非常典型的 NSF 组件。作为一个 Notes 视图,它本身提供了将新闻文档列举的功能,现在考虑把它封装成 NSF 组件,我们希望它能够在单击视图中的每个新闻文档时,对外发送一个属性:该篇新闻的新闻号。

  图 5. NSF 组件——ImageNewsList

  图 5. NSF 组件——ImageNewsList

  为此,我们需要给这个视图所在的 NSF 数据库定义一个 WSDL,在 Domino Designer 8 中增加了这样一个名为“连线属性”的新设计元素。在这个 WSDL 中我们将描述可对外发布的属性 NewsIDChanged。作为一个 XML 文件,WSDL 可以通过文本编辑器直接编写(复合应用的熟练开发者一般青睐这种方式),也可以利用 Domino Designer 8 里附带的 WSDL 可视化编辑器 Property Broker Editor 进行编辑,后者会自动生成 XML 代码。

  图 6. Property Broker Editor——定义属性

  图 6. Property Broker Editor——定义属性

  如图,我们在 WSDL 中直接加入了一个叫 NewsIDChanged属性。该属性的类型是 ImageNewsIDType(这是一个自定义的类型),名称空间是com.ibm.xna。属性叫什么名称并不重要,重要的是名称空间和类型,因为这才是 Property Broker 在匹配属性和操作时的依据。

  该属性在 WSDL 文件中的代码片断如下:

  清单 1. WSDL 中对属性的定义

<message name="NewsIDChanged_Message">
<part name="NewsIDChanged_Part" type="cus:ImageNewsIDType"/>
</message> 

  接下来介绍如何在 WSDL 中定义操作。属性用于对外发布,而操作用于接收属性,所以每一个操作的定义都是和一个属性相关的。ImageDescForm 是一个 Notes 表单,该表单将接收前面定义的这个 NewsIDChanged 属性,并执行一个操作 ShowImageDesc,该操作将在表单中展现新闻号为 NewsIDChanged 的新闻文档的文字信息。

  图 7. NSF 组件——ImageDescForm

  图 7. NSF 组件——ImageDescForm

  这样一个操作在 Property Broker Editor 中的定义如下:

  图 8. Property Broker Editor——定义操作

  图 8. Property Broker Editor——定义操作

  如图,操作 ShowImageDesc 与属性 NewsIDChanged 关联,一旦组件接收到 NewsIDChanged 类型的属性 —— 再次提醒:名称不重要,重要的是类型和名称空间匹配——就会执行 ShowImageDesc 的操作,该操作的具体实现将在后文中提到。

  操作 ShowImageDesc 的定义在 WSDL 中的代码片断如下:

  清单 2. WSDL 中对操作的定义

<operation name="ShowImageDesc">
<portlet:action activeOnStartup="true" caption="ShowImageDesc"
description="Used in tutorial" name="ShowImageDesc"
selectOnMultipleMatch="false" type="standard"/>
<input>
<portlet:param boundTo="request-attribute"
caption="NewsIDChanged" name="NewsIDChanged" partname="NewsIDChanged"/>
</input>
</operation>
 

  在 WSDL 中定义好属性和操作之后,接下来的问题就是如何在 Notes 元素中实现属性的发布和操作的执行。

  NSF 组件中属性的发布

  对 ImageNewsList 这个 Note 视图组件而言,有两种方式实现属性 NewsIDChanged 的发布。我们先介绍最简单的一种做法,这也是在这个例子中我们所使用的方法。

  首先我们需要在这个视图中添加一个列,该列的值为新闻文档的新闻号。

  图 9. 在 Domino Desginer 中设计可发布属性的列

  图 9. 在 Domino Desginer 中设计可发布属性的列

  然后选择列属性窗口的 编程栏,赋予一个程序使用的列名称。最重要的是在 编写设置 中选择所要对应的属性:NewsIDChanged。然后保存整个视图即可。这样就可以实现 NewsIDChanged 属性的发布。无需编程,非常方便!

  图 10. 在编写设置中指定所要发布的属性

  图 10. 在编写设置中指定所要发布的属性

  很简单,不是吗?这种方法不需要写任何代码即可在 Notes 视图中实现属性的发布,但目前也只有 Notes 视图可以这样做。如果想在其他 Notes 元素中实现属性的发布,可以通过另一种更加通用的方法:编写 Lotusscript 代码来实现。

  在这个例子中,我们也可以通过 Lotusscript 代码来发布 NewsIDChanged 属性。我们只需在 ImageNewsList 的 Onselect 事件中添加如下的内容:

  清单 3. 发布属性的 Lotusscript 样例代码

Sub Onselect(Source As Notesuiview)
    ...
    获取选中的文档的 ImageNewsID 域值
    ...

    On Error 4719 Goto err4719 // 一旦不是复合应用环境,则跳至报错处
    Dim pb As NotesPropertyBroker // 定义 NotesPropertyBroker 对象

    Set pb = s.GetPropertyBroker()

    If Not (pb Is Nothing) Then
        Call pb.setPropertyValue("NewsIDChanged",ImageNewsID )
        // 指定要发布的属性名和属性值

        Call pb.Publish() // 发布属性
        Exit Sub

    End If

    Exit Sub

    err4719:
    Print "Error" & Str(Err) & ": " &Error$
    Messagebox "It's not run in a Composite context"

End Sub
 

  在代码中我们看到,Notes 8 中新增了一个 Notes 类 NotesPropertyBroker,通过该类,我们可以在 Lotusscript 中获得当前 Notes 8 客户端中的 Property Broker 对象,并执行相应的操作。在发布属性的时候,只要调用 propertyBroker 的 setPropertyValue 方法写入属性名和属性值,再调用 propertyBroker 的 publish方法即可完成属性的发布。同样非常简便!

  了解了如何在 NSF 组件中发布属性之后,下面我们再来看看 NSF 组件中操作是如何获取这些属性值的。

共5页。 9 1 2 3 4 5 :
网友关注
最新上市
编辑推荐
欢迎订阅天极网RSS聚合资讯:http://www.yesky.com/index.xml