科技行者

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

知识库

知识库 安全导航

至顶网软件频道为 Lotus Domino Document Manager 构建 RSS 提要

为 Lotus Domino Document Manager 构建 RSS 提要

  • 扫一扫
    分享文章到微信

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

为 Lotus Domino Document manager 中的活页夹设置 RSS 提要,以便在添加或修改内容时通知用户。使用新的视图并修改数据库中现有设计元素,就可以轻松创建 RSS 提要。

作者:www.ibm.com 来源:www.ibm.com 2007年9月14日

关键字: RSS Domino IBM lotus Office

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

RSS 作为一种通知内容更新的方法迅速得到普及,当新内容被添加到网站或应用程序时,可以使用该方法通知用户。通过添加几个新的设计元素并微调某些现有元素,您可以向 Lotus Domino Document Manager 中的活页夹提供 RSS 提要,Lotus Domino Document Manager 用户会发现这是一种跟踪所喜欢的活页夹的简便方法。

本文简要介绍了 RSS,以便您大致了解其创建过程。如果您是一个 RSS 新手,可以浏览 Web,Web 上提供了更好的 RSS 参考资料。文章的其余部分分步指导您设置 Lotus Domino Document Manager 的 RSS 提要。本文假设您是一位有经验的 Lotus Notes/Domino 应用程序开发人员,并且熟悉 Lotus Domino Document Manager。

RSS 概述

基本 RSS 提要由经过格式化的 XML 组成。提要的前几行对它进行了描述。这些行包含提要的标题、源的 URL 和提要描述。

<rss version="2.0">
	<channel>
	<title>Another binder</title>
	<link>http://server.hostname.com/database/view/document</link>
	<description>Another binder</description>

接下来的几行可以认为是提要的实际内容。关于提要中每一项的详细信息都用 <item> 标记括起来。本文中,为简单起见,在每对 <item> 标记中只添加必需的信息。每项包含标题、链接、描述、发布日期和惟一标识符。列出所有项之后,仅需多加几行即可结束 XML 提要。

	<item>
		<title>Bold red.doc</title>
		<link>http://server.hostname.com/database/view/document</link>
		<description>
		<html><table><tr><td><b>Description:</b></td></tr>
		<tr><td>imported</td></tr><tr><td>&nbsp;</td></tr>
		<tr><td><b>Comments:</b></td></tr>
		<tr><td></td></tr></table></html>
		</description>
		<pubDate>02/08/2006 03:10:25 PM</pubDate>
		<guid>68446C2B10B8DEB58525710F006EBDFC</guid>
	</item>

因为您要在活页夹中提供文档的提要,所以最好的方法是使用视图创建 XML。可以使视图为每个文档创建 <item> 对象,然后将其他 XML 放置在视图模板中。因为多数 RSS 阅读器需要每几个小时更新一次提要,所以您要确保用于创建 XML 的方法不干扰服务器性能。请求提要更新时,视图已经创建其索引,所以影响不大。

视图还提供文档级的安全性,以确保用户只看到他们访问的文档。可以使用其他方法,如代理或 Java servlet。但是,他们的执行效果可能不太好,或者不能提供所需的文档级安全性。在下载的 Domino 数据库中提供了本文介绍的设计元素,所以无需重新创建。





回页首


创建视图

首先,在文件柜模板数据库(filecab.ntf 是默认数据库)中创建空白视图。对视图进行命名(rssBinderView),并赋予它一个别名 rssBinderView。在“View”属性框的“Advanced”选项卡上,选择选项“Treat view contents as HTML”(如果还没有选择)(参见图 1)。此选项可以阻止 Lotus Domino 创建 HTML,它会破坏您创建的 XML。


图 1. View 属性框
View 属性框

视图的选择公式为:

SELECT ObjectType = "Document" & IsLatest = "1" & ISWIPVer != "1" & ShouldBeDeleted != "1" & BinderID != ""

此公式选择了数据库中所有当前文档。

隐藏视图中的第一列,按升序进行排序,并对其进行分类。视图不应有标题,因为标题会破坏 XML。列值显示 BinderID 字段,以确保提要只显示一个活页夹的文档。本文稍后部分将介绍关于第一列的更多信息。

还应隐藏匿视图中的第二列,但要按降序排序。同样,视图不应有标题。列值应是 Last Modified 日期。此列会确保最近编辑的文档是提要中的第一个文档。

第三列也是最后一列,应是可视的,不排序,没有标题。此列为单个文档创建 RSS XML。以下代码片段会生成 XML:

url := "http://servername.domain.com/";
"<item>" + @Char(10) +
"<title>" + @ReplaceSubstring(Title; "&"; "&") + "</title>" + @Char(10) +
"<link>" + url + @Left(@ReplicaID; 8) + @Right(@ReplicaID; 8) 
+ "/(DDMAutoLaunch)?OpenAgent&DocID=" + DocID 
+ "&LaunchType=0</link>" + @Char(10) + "<description><html><table>
<tr><td><b>Description:</b>
</td></tr><tr><td>" + DescriptionOfDocument +
"</td></tr><tr><td>&nbsp;</td>
</tr><tr><td><b>Comments:</b></td>
</tr><tr><td>" + VerComment + "</td></tr>
</table></html></description>" + @Char(10) +
"<pubDate>" + @Text(@Modified) + "</pubDate>" + @Char(10) +
"<guid>" + @Text(@DocumentUniqueID) + "</guid>" + @Char(10) +
"</item>" +  @Char(10)

在第一行上,基本 URL 是生成连接到文件的 URL 的硬编码。可以对 URL 进行硬编码,因为在视图的列中无法执行 @DbLookup。通常,您可以从 HTTP 头部中提取此信息,但是 HTTP 头部不可使用,因为视图构建在服务器上。如果不想对此 URL 进行硬编码,则可以在服务器的 Notes.ini 文件中创建一个设置,以查找该值。使用 Notes.ini 方法可以在多台服务器进行部署,无需对信息进行硬编码。

接下来的几行将创建提要中的项。可对 Title 字段使用 @ReplaceSubstring,因为如果任何文档在标题中有 ampersand(“&”符号)字符,那么 XML 会破坏。通过使用实体 & 替换 ampersand(“&”符号)字符,可以解决此问题。另外,在 <description> 标记中,已转义了许多字符(例如, < 现在是 <)。执行此操作可以在描述标记中提供 HTML,而不会破坏 XML。您可以修改 <description> 标记,以包含喜欢的任何内容。上面的代码会创建一个表,表中有文档描述和检查文档时输入的注释。

关于视图就说这么多。保存并关闭它,让我们继续。





回页首


创建视图模板

您需要为刚才创建的视图创建一个视图模板。此模板用于过滤活页夹的视图,并提供包装视图创建的<item>值的 XML。要创建模板,请创建一个新表单,并将其命名为 $$ViewTemplate for rssBinderView。在 Form 属性框的 Defaults 选项卡上,将 Content type 设置为 Other ,在选项旁的字段中,输入 text/xml(参见图 2)。这会防止 Lotus Domino 在为 HTTP 用户生成 HTML 时,将本身的 HTML 添加到表单中。它还会通知 RSS 阅读器您正在提供 XML。


图 2. Form 属性框
Form 属性框

在表单的顶部添加一些隐藏字段。这些字段包含查询字符串和 HTTP 头部的值,并解析查询字符串。在提要的 URL 查询字符串中包含 BinderID,使您能够对所有活页夹使用一个视图。如果文件柜较大,则可以为每个活页夹创建一个视图。使用大文件柜视图会对性能产生负面影响,因为该视图在构建、更新和过滤时会花费很长时间。

隐藏字段后接下来的几行开始了提要的 XML。在此示例中,请注意,我们使用活页夹标题作为提要的标题。您可以对它进行自定义。例如,您可以添加库和文件柜名称,使标题更具描述性(例如,Library::File Cabinet::Binder)。下一行提供直接指向的活页夹的 URL。嵌入视图前的最后一行包含对提要的描述。这是您喜欢的一些内容。在此示例中,我们使用的是活页夹标题。

以下代码片段可获取活页夹标题。变量 qsBinderID 表示表单顶部的字段,它可以从 URL 的查询字符串解析活页夹的 ID。

BinderRepID := @DbLookup(""; ""; "Maintenance"; 
_"GlobalProfile"; "BinderDBReplicaID");
@If(
	@IsError(BinderRepID);
		"Error getting BinderRepID - " + @Text(BinderRepID);
	@Text(
		@DbLookup(""; @Left(BinderRepID; 8) + ":" + 
		_@Right(BinderRepID; 8); "(BinderLookup)"; qsBinderID; "Title")
	)
)

接下来,您将嵌入按照前面的步骤创建的视图。您需要更改几个属性,以便正确地显示此视图。在“Embedded View”属性框上,您必须使用 HTML 而不是 Java applet 来显示视图。使用 Java applet 会破坏 XML。也有必要将 Show single category 的值设置为 qsBinderID,以便只显示所请求活页夹的文档。

在嵌入视图的后面有两行,用来结束 RSS 提要: </channel>和</rss>。保存并关闭表单。结合使用视图和模板,就可以成功地构建提要。





回页首


修改现有设计元素

完成视图之后,您可以添加图标,以便用户能够访问 RSS 提要,您还可以修改一些其他设计元素,以便提要中的链接可以正常工作。首先,修改代理(DDMAutoLaunch), 它可以启动向其提供 ID 的文档配置文件和版本号。对此代理修改后,它能够启动文档的文件及其配置文件。还可以更改代码,以使用 Option Explicit,所以,在使用之前要声明所有的变量。可以很容易地移除现有代理。然后,从提供的数据库对它进行复制并将其粘贴到模板。粘贴该代理之后,一定要打开,并保存它,确保可以正确地编译。

其次,更改现有文件柜 HTML 表单。对表单更改后,它能够启动在查询字符串中向其提供 ID 的活页夹视图。将新的字段添加到表单(htmlBinderUNID),以便从 URL 查询字符串解析活页夹的 UNID(如果存在)。对 HTMLTags 字段进行其他更改。更改字段,以便在 htmlBinderUNID 包含值时,它可以创建 URL,以启动该活页夹。下面是 HTMLTags 字段的新代码:

titleTemp := "Document Manager";
DbName:= @ReplaceSubstring(@Subset(@DbName;-1);"\\";"/");
LibReplicaID:= @DbLookup("";"";"(InternalAdmin)";"GlobalProfile";"LibraryReplicaID");
varPath:=@If( htmlDocUNID!="";
	"/AllByUnid/" + htmlDocUNID + "?OpenDocument\">";
	htmlBinderUNID != "";
	"/(WebFindTOCUNID)?OpenAgent&BinderID=" + htmlBinderID + 
	_"&BinderUNID=" + htmlBinderUNID + "\">";
	"/Web+All+Binders?OpenView\">");
"<Title>" + titleTemp + "</Title>
<FRAMESET FRAMEBORDER=1 BORDER=1 bordercolor = \"white\" FRAMESPACING=3 COLS=\"175,*\">
<frameset frameborder=0 border=1 framespacing=0 rows=\"134,*\">
<FRAME NAME=\"Left\" SRC=\"/" + LibReplicaID + "/WebNavigationPanel?OpenForm\" 
MARGINWIDTH=0 MARGINHEIGHT=0 SCROLLING=\"NO\"><FRAME NAME=\"Tree\" SRC=\"/" + 
LibReplicaID + "/BlankForm?ReadForm\" MARGINWIDTH=0 MARGINHEIGHT=0 ></frameset>
<FRAMESET FRAMEBORDER=0 BORDER=0 FRAMESPACING=0 ROWS=\"53,*\"><FRAME NAME=\"Header\" 
SRC=\"/" + LibReplicaID + "/WebHeaderPanel?OpenForm\"  MARGINWIDTH=0 MARGINHEIGHT=0 
SCROLLING=\"NO\"><FRAME NAME=\"Bottom\"  MARGINWIDTH=0 MARGINHEIGHT=0 SRC=\"/" + 
DbName + varPath + "</FRAMESET></FRAMESET>"

同样,合并这些更改的最简便方法是复制并粘贴表单。一定要先移开或重命名现有 HTML 表单。

最后,您需要显示到提要的链接。在活页夹视图中添加标准提要图标(例如 Feed Icons 网站 提供的 RSS feed icon)。要进行此操作,请修改 WebTaskBarBinder 子表单。在子表单的底部,您会看到一个表。此表包含活页夹视图中显示的 breadcrumb trail(浏览路径记录)。向此表添加一列,并添加一个字段,该字段生成提要的 URL。您需要将新的列右对齐,以便图标显示在浏览器窗口的右侧。要进行此操作,请确保指针位于新的单元格中,并打开表属性框。

在 Table Programming 选项卡上,将 Cell HTML Tags 部分的 Other 字段设置为 Align=right(参见图 3)。


图 3. Table 属性框
Table 属性框

还必须修改 BinderTitleDisplay 字段。该更改设置父框架中的 BinderID。这是必需的,因为如果用户在视图的多个页面之间导航,BinderID 将会丢失。如果 BinderID 丢失,则不能再生成提要的正确 URL。新字段 rssIcon 会生成到提要的链接。可以使用 JavaScript 创建链接,因为您需要引用父框架中由 BinderTitleDisplay 字段设置的 BinderID 变量,图像实际上放置在图标目录(通常为 data\domino\icons)的 Domino 服务器上。

下面是 rssIcon 字段的值,它使用 Javascript 创建到提要的链接:

DbFilename:= @ReplaceSubstring(@Subset(@DbName;-1);"\\";"/");
"<script>document.write(\"<a href='/" + DbFilename + "/(rssBinderView)?OpenView&binderid=\" 
+ parent._BinderID + \"'><img src='/icons/xmlrss2.jpg' border=0></a>\")</script>"

此时,已完成所需的所有设计更改。现在,一定要使用正确的 ID 标记设计元素,然后从服务器的控制台加载设计。图 4 显示了活页夹视图中新图标的图像。


图 4. Binder 视图
Binder 视图

图 5 显示了 RSS 阅读器中提要的图像。


图 5. RSS 阅读器
RSS 阅读器




回页首


访问提要

访问提要非常简单。在 Web 浏览器中,导航到活页夹以查看其内容。右侧有一个您提供的提要图标。单击它,以加载 RSS 数据。要使它更加用户友好,您可以添加一个页面,描述提要的内容。例如,您可以在图标旁添加一个文本链接,如“关于此图标”。链接页面可以描述提要是什么以及它如何帮助用户跟踪活页夹,并且可以为用户推荐一个 RSS 阅读器让用户试一试。这是一个好方法,因为用户在单击图标后看到原始 XML 时可能会不知所措。

要将 URL 添加到 RSS 阅读器,只需复制并粘贴它。根据 Domino 身份验证方案,您可以查看活页夹内容,或者提示输入密码。

关于身份验证的注释

多数 RSS 阅读器可以处理基本身份验证。但是,许多人使用某种形式的单点登录(SSO)。通常,RSS 阅读器不理解 SSO,所以他们不能正确地加载提要。解决此问题的方法是将提要的 URL 粘贴到阅读器的浏览器窗口(如果存在)。这样应该会显示 SSO 登录页面。身份验证之后,提要就应该正确加载了。您还可以禁用 SSO。

另一种方法是设置副本 Lotus Domino Document Manager 服务器,并使用基本身份验证对它进行配置。然后修改 WebTaskbarBinder 上的 rssIcon 字段生成的 URL,以指向其他服务器。





回页首


结束语

通过添加设计元素并修改三个其他元素,可以为 Lotus Domino Document Manager 中的活页夹提供简单的 RSS 提要。此提要向用户提供了一种简便方法,使用该方法用户可以得到何时添加或修改新内容的通知。您可以扩展这个简便方法,以便提供文件柜级的提要,甚至为其他非 Lotus Domino Document Manager 数据库提供提要。

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

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

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