科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件在 Lotus Notes 8 中开发复合应用(2)

在 Lotus Notes 8 中开发复合应用(2)

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

在 WSDL 中定义好属性和操作之后,接下来的问题就是如何在 Notes 元素中实现属性的发布和操作的执行。了解了如何在 NSF 组件中发布属性之后,下面我们再来看看 NSF 组件中操作是如何获取这些属性值的。

作者:陈 原 来源:论坛整理 2008年1月10日

关键字: lotus Lotus Notes

  • 评论
  • 分享微博
  • 分享邮件

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

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章