关于
专题文章

  >  
 在 Lotus Notes 8 中开发复合应用(2)
文章作者:陈 原        发布时间:2008年4月7日        文章来源:开发者在线
版权申明:本站署名的原创文章,本站及作者享有版权,其他网站及传统媒体如需使用,转载时请注明出处和原作者。本站转载的文章如有侵犯到您的版权,请及时向本站提出。

  NSF 组件的开发

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

  下面我们将用上面这个复合应用中的两个组件为例,描述 NSF 组件开发的过程。
  这两个 NSF 组件一个是 Notes 视图(ImageNewsList),用于展示新闻列表。一个是 Notes 表单 (ImageDescForm),用于显示新闻具体内容。

  定义属性和操作

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

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

  图 5. NSF 组件——ImageNewsList


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

  图 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
  

  这样一个操作在 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 中设计可发布属性的列 


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

  图 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 组件中操作是如何获取这些属性值的。

联系我们
统讯科技
联系方式
了解统讯
统讯为您打造
个性化的服务
   联系我们 | 网站地图 | 错误链接报告