级别: 中级 Jon Brunn, 软件架构师, Federated Integration Test team, IBM China Development Lab Zhi Hua Pan, 软件工程师, IBM Xiao Pei Lui, 软件工程师, IBM Da (Longda) Teng, 软件工程师, IBM Zhi Jun Chen, 软件工程师, IBM Li Dong Du, 软件工程师, IBM
2009 年 6 月 30 日 本文介绍 IBM® Lotus® Quickr™ for WebSphere® Portal 服务的定制团队空间组件示例 Photo Book。这个组件使用 Lotus Quickr 文档库存储内容和实现富桌面集成,使用 Lotus Web Content Management 功能在 Web 上显示照片库和幻灯片风格的照片。
IBM Lotus Quickr 是基于 Web 2.0 的团队协作软件,可以帮助团队更快地共享内容、协作和在线工作。它包含内容存储库、内容管理和团队协作功能。
团队成员在 Lotus Quickr 团队空间中一起工作。可以用标准组件轻松地定制 Lotus Quickr,比如库、团队日历、讨论论坛、博客、wiki 和用于管理项目的其他协作工具。还可以为 Lotus Quickr 创建全新的组件。
简介
Lotus Quickr 内容库帮助您轻松地组织和共享项目和团队的文档。可以使用 Lotus Quickr 库轻松地管理所有类型的文档,其功能包括版本管理、工作流和定制的文档类型等。可以使用 Lotus Quickr 内容服务创建、管理、更新、搜索、查询和删除 Lotus Quickr 内容。通过使用这些服务,开发人员可以使用 REST 和基于 SOAP 的协议访问和操作 Lotus Quickr 中的内容。
Lotus Quickr 使用 Lotus Web Content Management 存储和显示在线内容。Wiki 页面、博客文章、公告、项目任务和联系人信息都作为 Web 内容存储。使用 Lotus Web Content Management 创作模板编写 Web 内容,使用 Web 内容管理显示模板显示 Web 内容,Web 内容存储在 Web 内容管理站点区域中。使用 Web 内容管理 API 扩展 Web 内容管理的功能,支持通过程序管理 Web 内容。
示例 Photo Book 是一个 portlet,它使用一个文档库存储照片并支持基于团队的照片编辑。Web 内容管理创作模板和显示模板能够以定制的方式显示文档库的内容。使用 Lotus Quickr 内容服务和 Web 内容管理 Java™ API 在文档库和 Web 内容组件之间进行通信,在通过任何渠道(包括 Lotus Quickr 连接器)在文档库中添加新内容时,在 Photo Book Web 内容库中相应地创建链接。
先决条件
您需要具备以下方面的知识:
- Lotus Quickr 概念,比如空间、文档库和组件
- Lotus Web Content Management 概念
本文的某些部分还需要以下方面的知识:
- Lotus Quickr 内容 REST 服务 API
- Lotus Web 内容管理 Java API
- HTML、JavaScript™ 或其他脚本语言
Lotus Quickr 库和文档服务
Lotus Quickr 文档服务帮助您轻松地组织和共享项目、团队和您个人的文档。可以快速地为所有文档和富媒体文件设置库,轻松地共享文档和协作,可以使用签入和签出、版本控制和其他工具管理内容。
开发人员可以使用 Lotus Quickr REST 服务访问和操作 Lotus Quickr 文档库中的内容。Lotus Quickr REST 服务使用 RFC 4287 中描述的 Atom Syndication Format 访问内容,使用 Atom Publishing Protocol (APP) 向 Lotus Quickr 发布内容。
按照 APP 的原则,文档库作为 APP 集合,文档作为 APP 资源。为每个集合和资源定义 URL。客户机可以对 APP 提供的这些 URL 调用适当的 HTTP 方法,比如 GET、POST、PUT 和 DELETE。另外,URL 采用一种可预测的模式,客户机可以自己组合出 URL,而不需要要求服务器提供它们。
图 1. Lotus Quickr 文档库
定制 Lotus Quickr 中基于 Lotus Web Content Management 的组件
Photo Book 组件使用 Lotus Web Content Management 作为表示层。最近发表的 developerWorks® 文章 “在 IBM Lotus Quickr services for IBM WebSphere Portal 8.0 中定制组件” 讨论了对基于 Lotus Web Content Management 的现有组件进行定制的基本原则。这篇文章添加一个新的 Lotus Quickr 组件并介绍如何创建定制的 Lotus Quickr 组件。
Lotus Quickr for WebSphere Portal 服务中的组件
通过使用标准的 portlet,只在显示 portlet 之后、当用户在 portlet 中执行操作时或在通过 portlet 间通信向 portlet 发送操作时通知 portlet。组件包括一组生命周期方法(createInstance、removeInstance)、成员关系方法(memberAdded、memberRemoved)和在 portlet 中添加的其他方法。当在 Lotus Quickr 空间中发生操作(比如创建、成员关系变化、导出和导入)时,组件接口让 portlet 能够得到通知。Lotus Quickr 空间是这些组件的组合。熟悉 WebSphere Portal 的开发人员应该注意,Lotus Quickr 空间是 WebSphere Portal 复合应用程序的一种实现。
在 portlet 拥有 portlet 中内容的情况下,组件接口是最有意义的。换句话说,portlet 是主要的内容编辑机制,portlet 的每个实例编辑不同的内容集。组件接口允许 Lotus Quickr 在空间中执行操作级联,例如在空间中创建组件或添加成员,就会影响到此空间中的各个组件,进而影响到 portlet 拥有的内容。
从理论上说,可以通过实现组件接口把任何 portlet 转换为组件,但是有些 portlet 作为组件是没有意义的。例如,显示天气信息的 portlet 可能根本不需要了解成员关系,而且它不拥有任何内容。因此,把天气 portlet 转换为组件是没有意义的。当在空间中添加新成员或创建 portlet 时,会通知天气 portlet,但是这时候 portlet 没什么可做的。
Lotus Quickr for WebSphere Portal 服务中的 Lotus Web Content Management 组件
Lotus Quickr 包含一组使用 Lotus Web Content Management 的现成组件:公告、联系人、博客、讨论论坛、项目任务、wiki 和团队日历。公告、联系人和项目任务组件统称为列表,它们使用相同的组件实现类。我们把这些共享的组件实现称为 Lotus Web Content Management 团队空间组件。这些组件之间的主要差异是通过与组件相关联的 portlet 中的配置和修改表示 markup 实现的。联系人列表和项目任务列表之间的代码差异非常小。见图 2。
图 2. Lotus Quickr for WebSphere Portal 服务中的 Lotus Web Content Management 组件
Lotus Web Content Management 空间 portlet 与 Lotus Web Content Management 空间组件紧密协作。这个 portlet 自动地把本身限制为只显示自己拥有的内容,这些内容由组件提供。Lotus Web Content Management 组件知道如何把传递给它的操作转换为在 portlet 显示的 Lotus Web Content Management 站点区域上执行的操作。见图 3。
图 3. Lotus Quickr 空间成员关系管理
在空间中添加成员会导致对 Lotus Web Content Management 组件执行 memberAdded 调用。Lotus Web Content Management 组件的实现进而在适当的站点区域中添加成员。组件把组件上的创建操作转换为两个操作 —— 创建 Web 内容库和把模板站点区域复制到库中。通过修改模板站点区域的指针,可以改变组件的默认内容、显示方法、创作工具等几乎所有方面。
对于符合列表形式的标准 Lotus Web Content Management 组件,在绝大多数情况下不需要编写任何 Java 代码。可以通过配置内置的 Lotus Web Content Management 组件实现指向自己的模板站点区域。站点区域进而指向默认的内容。站点区域还包含显示模板到创作模板的映射,与使用 Lotus Web Content Management 创建的任何网站一样,显示可以通过创作工具组件包含 New、Edit 和 Delete 按钮。
portlet 本身也很有意思。可以使用本文介绍的技术在 Lotus Quickr 定制架中添加不是组件的 portlet。例如,feed 读取器就是在定制架中添加的不是组件的 portlet。可以使用普通的 portlet 在 Lotus Quickr 中进行许多定制。在本节中讨论如何以各种格式显示信息。可以为需要显示的信息选择适当的格式。
e-Album 体系结构
e-Album 是一个在 Lotus Quickr for WebSphere Portal 服务中管理和查看照片的示例应用程序。e-Album 采用 Lotus Web Content Management 组件体系结构和一个新的 Photo Book 组件。
e-Album 提供以下特性:
- 通过与 Lotus Quickr 连接器集成,从 Microsoft® Windows® Explorer、Microsoft Office、IBM Lotus Notes®、IBM Lotus Symphony™ 和其他桌面应用程序向 Lotus Quickr 单独或成批上传照片。
- 在平面列表或树结构(通过创建文件夹)中进行管理。
- 团队编辑,可以通过属性表进行版本控制、调整和定制元数据。
- 在 Photo Book 组件中显示基于 Web 的照片库和幻灯片视图。
图 4. e-Album 体系结构
图 4 是 e-Album 的高层体系结构。e-Album 包含以下部分:
- 文档库,它是存储照片和进行团队编辑的地方。
- 定制的 Lotus Web Content Management 内容,它让用户能够从 Web 查看照片,它包含两部分:
- 基于 Lotus Web Content Management 显示模板的照片显示框架。
- 基于 Lotus Web Content Management 创作模板的照片显示内容。照片显示内容包含库中存储的媒体和照片快照的链接。
- 一个联合程序,它把文档库链接到 Web 内容库。这个联合程序是用公共 API 构建的,包括 Lotus Web Content Management Java API 和 Lotus Quickr 服务 API。联合程序根据需要运行;它由查看 Photo Book 组件内容的用户触发。
Lotus Web Content Management Photo Book 组件的内部结构
在 Photo Book 组件中,照片的链接存储在一个 Web 内容库中,Lotus Web Content Management 站点中的站点区域包含照片库的树结构,包括文件夹和每个文件夹中的照片。文档库中的每个文件夹对应于 Lotus Web Content Management 中的一个站点区域,文档库中的每张照片对应于 Lotus Web Content Management 中的一个内容块。内容块的结构基于定制的创作模板。Photo Book 中使用的创作模板是:
- album_folder_at
这个创作模板用来创建代表站点区域的内容。它有一个链接元素(见图 5),这个元素存储站点区域的默认内容的链接。
图 5. 链接元素
- folder_navigator_at
这个创作模板用来创建每个文件夹的站点区域的默认内容。它没有元素。
- list_album_item_at
这个创作模板用来创建用于存储照片信息的内容。它有两个文本元素,分别存储照片和缩略图的 URL。它还有一个富文本元素,用来存储照片描述。图 6 显示这个创作模板的元素。
图 6. list_album_item_at 的元素
- Photo Book – Slideshow
这个创作模板用来创建显示幻灯片的内容。它还有一个富文本元素,用来存储欢迎文本。
Lotus Web Content Management 使用一个显示模板显示每个内容块。Photo Book 使用多个显示模板显示内容,包括分别用于文件夹视图、照片视图和幻灯片视图的显示模板。每个创作模板与站点区域上的一个显示模板相关联(映射)。在显示内容块时,Lotus Web Content Management 查看内容的创作模板,根据创作模板与站点区域上显示模板之间的映射,判断应该使用哪个显示模板。由于这个原因,尽管幻灯片、欢迎页面或照片列表页面都只是内容的组合,但是它们需要不同的创作模板,从而在站点中使用不同的显示模板。下面是 Photo Book 中使用的显示模板:
在这个示例中,名为 Photo Book 的内容块(见图 10 中树结构的底层)是库的根文件夹的默认内容。这个内容块代表欢迎页面(见图 8),它触发的显示模板显示此站点区域中的所有照片。内容 Fold4 是代表站点区域 Fold4 的内容。这个内容块触发相同的显示模板,显示所有照片的图库视图,但是这一次只显示 Fold4 站点区域中的照片。
e-Album 联合程序
在 e-Album 中,使用 Lotus Quickr 文档库存储照片。使用 Lotus Web Content Management 以图库或幻灯片形式显示这些照片。联合程序是一个后台程序,它使用 Lotus Quickr REST 服务和 Lotus Web Content Management Java API 在 Lotus Quickr 文档库和 Web 内容库之间进行通信。
Lotus Quickr REST 服务获取 Lotus Quickr 文档库中的文件夹和照片文档,然后使用 Lotus Web Content Management Java API 为新添加的文件夹或照片文档创建新的 Web 内容,对于从文档库中删除的文件夹或照片文档,删除相应的现有 Web 内容。
联合程序执行以下任务:
- 从 Lotus Quickr 文档库获取子文件夹和图像类型的文档的列表。
- 从文件夹和文档的 Atom 项获取并组合对应的值;把它们存储在列表中。
- 对文件夹列表和图像类型的文档列表与 Lotus Web Content Management 中的 Web 内容进行同步。
- 创建新的 Web 内容块,它们链接到 Lotus Quickr 文档库中新添加的文件夹或文档。
- 如果一些文件夹或文档在 Lotus Quickr 文档库中不再存在了,就删除相应的 Web 内容。
这个解决方案的新颖之处在于,它并不在文档库和 Web 内容库之间复制内容。而是在 Web 内容库中创建链接,在文档库中维护内容,链接的创建速度相当快,而且这种方式可以减少存储空间。
图 11 说明联合程序的工作流。
图 11. 联合程序的工作流
下面几节通过示例代码讲解 ListRetriever 和 ContentUpdater 的工作方式。
获取文件夹和图像文档列表
使用 ListRetriever 通过 Lotus Quickr REST 服务从 Lotus Quickr 文档库获取文件夹和照片文档的列表。通过对以下 URL 执行 HTTP GET 操作,获取 Lotus Quickr 文档库中特定文件夹下的所有子文件夹和照片文档的列表:
http://<quickr_server_url>/dm/atom/library/<library_uuid>/folder/<folder_uuid>feed
feed 包含特定文件夹下的每个文件夹和文档的 Atom 项。<category> 元素指出这个项是对应于文件夹,还是对应于文档。文件夹在 Lotus Web Content Management 中显示为可展开的节点,因为它们可以包含子文件夹和文档。文档在 Lotus Web Content Management 中显示为它们的二进制内容。
对于文件夹项,存储文件夹的 uuid,以后使用 uuid 组合出用来获取文件夹内容的 feed URL.
对于文档项,我们只对图像类型的文档感兴趣。<content> 元素的 type 属性可以指出文档项是否对应于图像类型。获取图像类型的文档的 edit-media 链接,组合出获取文档内容所需的完整下载 URL。对链接含义的描述请参考 “Atom Publishing Protocol specifications”。
清单 1 给出的代码片段把 Atom 项处理为列表。使用 FolderContent 存储文件夹的 uuid 和标题,然后使用这些信息为文件夹创建 Web 内容。使用 ImageContent 存储照片文档的 uuid、标题、下载 URL 和缩略图 URL,然后使用这些信息为文档创建 Web 内容。
清单 1. 把 Atom 项处理为列表的代码片段
ClientResponse response = httpClient.get(url);
if (response.getStatus() == 200) {
Feed feed = (Feed) response.getDocument().getRoot();
Iterator entries = feed.getEntries().iterator();
while (entries.hasNext()) {
boolean isFolder = false;
Entry entry = (Entry) entries.next();
try {
Iterator categories = entry.getCategories(
"tag:ibm.com,2006:td/type").iterator();
while (categories.hasNext()) {
Category cat = (Category) categories.next();
if (cat.getTerm().equals("folder")) {
sFolder = true;
break;
}
}
} catch (IRISyntaxException e) {
e.printStackTrace();
}
if (isFolder) {
int index = entry.getId().toString(),lastIndexOf(“:”);
uuid = entry.getId().toString().substring(index+1);
title = entry.getTitle();
FolderContent folderContent = new FolderContent();
folderContent.setTitle(title);
folderContent.setUUID(uuid);
folderList.add(folderContent);
} else {
if(entry.getContentMimeType().toString().startsWith("image")||
entry.getContentMimeType().toString().indexOf("bmp")!=-1)
{
StringBuffer sb = new StringBuffer();
imageUrl = sb.append(serverUrl).append(entry.getBaseUri().getPath()).
append(entry.getEditMediaLink().getAttributeValue("href")).toString();
thumbUrl = imageUrl.replaceFirst("document", "thumbnail");
title = entry.getTitle();
int index = entry.getId().toString().lastIndexOf(":");
uuid = entry.getId().toString().substring(index+1);
ImageContent imageContent = new ImageContent();
imageContent.setImageUrl(imageUrl);
imageContent.setThumbUrl(thumbUrl);
imageContent.setTitle(title);
imageContent.setUUID(uuid);
imageList.add(imageContent);
}
}
}
|
在 Lotus Web Content Management 中创建内容
为了在 Lotus Web Content Management 中显示照片,首先需要使用 list_album_item_at 创作模板为 Lotus Quickr 内容库中新添加的照片文档创建 Web 内容。然后,使用 Photo Book - main 显示模板显示 Web 内容。使用 ContentUpdater 根据 ListRetriever 获得的文件夹和照片文档列表更新 Lotus Web Content Management 中的 Web 内容。使用 Lotus Web Content Management Java API 创建、搜索或删除 Web 内容。
在 Lotus Web Content Management 中的 Web 内容中,存储照片文档的下载 URL 和缩略图 URL,但是不存储照片文档本身。使用 Photo Book – entry 显示模板根据下载 URL 显示照片的原始图像;使用 Photo Book – main 显示模板根据缩略图 URL 显示照片的缩略图。
清单 2 给出的代码片段为 Lotus Quickr 内容库中新添加的照片文档创建 Web 内容。它包含四个步骤:
- 用 list_album_item_at 创作模板创建新内容,在站点区域的末尾添加新创建的内容。
- 在内容中添加文本组件 image_url(照片文档的下载 URL)。
- 在内容中添加文本组件 thumbnail_url(照片文档的缩略图 URL)。
- 保存新内容。
清单 2. 创建新的 Web 内容的代码片段
try {
// create new content with specified authoring template ID,
add the newly created content at the end of the site area
content = workspace.createContent(workspace.createDocumentId
(authoringTemplate),siteArea.getId(),null,ChildPosition.END));
content.setName(docUUID);
content.setTitle(docTitle);
// add an Text component “image_url”to this content
if (content.hasComponent("image_url")){
imageComponent = (TextComponent) content.getComponent("image_url");
imageComponent.setText(imageUrl);
} else{
output.append("TextComponent image_url not found");
}
// add an Text component “thumbnail_url”to this content
if (content.hasComponent("thumbnail_url")){
thumbComponent = (TextComponent) content.getComponent("thumbnail_url");
thumbComponent.setText(thumbnailUrl);
} else{
output.append("TextComponent thumbnail_url not found");
}
// save the content
String[] saveErrors = workspace.save(content);
output.append("<br><br>Content save attempted<br>");
if (saveErrors.length > 0) {
output.append("The following errors occurred on content save<br>");
for (int i=0; i < saveErrors.length; i++) {
output.append(saveErrors[i]+"<br>");
}
} else {
output.append("No errors reported on content save<br>");
}
output.append("Test complete in runPost");
} catch (Exception e) {
output.append(HTML.getStackTrace(e) + " in runPost");
}
|
可以把一批照片上传到 Lotus Quickr 文档库,见图 12。
图 12. 把照片上传到文档库
上传之后,可以通过 Photo Book 查看照片,见图 13。
图 13. 通过 Photo Book 查看照片
安装 Photo Book
按照以下步骤安装 Photo Book 组件。
导入 Lotus Web Content Management 模板
Lotus Web Content Management 显示模板、创作模板、菜单、站点区域和默认内容共同组成一个基于 Lotus Web Content Management 的定制组件。必须把 Photo Book 的这些工件导入 Lotus Quickr 服务器。Photo Book Lotus Web Content Management 工件存储在一个称为 Photo Book Resources 的库中。该步骤导入这个库。
根据自己的环境更新 <Portal Server>/jcr/migration/conf/wcm60_conf.xml 文件。设置以下属性:
-
ImportDir。Import Nodes 目录是从 photoLibraryResources.zip 文件中提取出的。
-
ImportUserId。这个属性应该是 Lotus Quickr 系统中的一个有效管理员用户 id。使用这个用户在 Lotus Quickr 中创建内容模板和模板站点区域。
-
ImportUserPassword。这个属性设置上面指定的用户的密码。
在 <Portal Server>/config 目录中,运行以下命令:
WPSconfig.bat import-wcm-data
如果创建了其他定制组件,在 wcm60_conf.xml 文件中指定导出参数之后,可以使用 export-wcm-data 命令导出定制组件。然后可以分发定制组件,或者把它们从测试环境转移到生产环境中。使用一个单独的库保存每个组件使用的基本工件,这样就可以分别导出和导入它们。
因为 Photo Book Resources 库包含 Photo Book 组件的所有 Lotus Web Content Management 工件,您在创建自己的定制组件时可以以它作为起点。
在共享库中添加必需的 JAR 文件
在 <WPS_HOME> 中创建 photobook/lib 文件夹,然后把所有 JAR 文件复制到其中。
进入 WebSphere Application Server 管理控制台,创建一个名为 PhotoBook 的共享库,按照清单 3 设置类路径。
清单 3. 类路径
${WPS_HOME}/photobook/lib/ealbum.jar
${WPS_HOME}/photobook/lib/abdera.client.0.2.2-incubating.retro.jar
${WPS_HOME}/photobook/lib/abdera.core.0.2.2-incubating.retro.jar
${WPS_HOME}/photobook/lib/abdera.extensions.0.2.2-incubating.retro.jar
${WPS_HOME}/photobook/lib/abdera.parser.0.2.2-incubating.retro.jar
${WPS_HOME}/photobook/lib/abdera.protocol.0.2.2-incubating.retro.jar
${WPS_HOME}/photobook/lib/axiom-api-1.2.1.jar
${WPS_HOME}/photobook/lib/axiom-impl-1.2.1.jar
${WPS_HOME}/photobook/lib/commons-codec-1.3.jar
${WPS_HOME}/photobook/lib/commons-httpclient-3.1-rc1.jar
${WPS_HOME}/photobook/lib/commons-logging-1.0.4.jar
${WPS_HOME}/photobook/lib/geronimo-activation_1.0.2_spec-1.1.jar
${WPS_HOME}/photobook/lib/ilwwcm-api.jar
${WPS_HOME}/photobook/lib/ilwwcm-authoringportlet.jar
${WPS_HOME}/photobook/lib/ilwwcm-teamspace-portlet.jar
${WPS_HOME}/photobook/lib/retroweaver-rt-1.2.3.jar
${WPS_HOME}/photobook/lib/stax-api-1.0.jar
${WPS_HOME}/photobook/lib/wp.wcl.common.jar
${WPS_HOME}/photobook/lib/xlxpScanner.jar
${WPS_HOME}/photobook/lib/xlxpScannerUtils.jar
${WPS_HOME}/photobook/lib/xlxpWASParsers.jar
|
把 PhotoBook 添加到 iwwcm-teamspace-portlet.war 文件的库中。
在文件系统中添加创作模板图像
当前,Lotus Quickr 系统在文件系统上的特定位置寻找每个组件的图标。把 PhotoBook.zip 的 Files 目录中的 photo_book_list.gif 图像添加到 <Portal Server>/installedApps/WCM_Teamspace_Portlet_*.ear/*.war/images/teamspace 中。创建 <WPS_HOME>/installedApps\WCM_Teamspace_Portlet_*.ear\*.war\teamspace\jspext\html,把 refresh.jsp 复制到这个文件夹中。
在应用任何更新 WCM_Teamspace_Portlet.Ear 文件的补丁包之后,可能需要重复这个步骤。
安装 Dojo 工具集
一些页面使用 Dojo 部件添加 mouse-over 和幻灯片等图形效果。在一般情况下,Dojo 工具集并不是 Lotus Quickr 组件必需的,但是这个组件要使用 Dojo。显示模板期望在以下位置找到 dojo.js 文件:
<wp_profile>/installedApps/<nodename>/wps.ear/wps.war/dojo-0.4.3-ajax/dojo.js
从 Dojo 站点下载 Dojo 0.4.3,提取出 dojo.js 文件并放在 <wps.war>/dojo-0.4.3-ajax/dojo.js。
如果已经把 Dojo 安装在其他地方了,那么可以在 Lotus Quickr 中使用 Manage Content 页面修改 photo_book_dojo_include 组件,修改用来装载 dojo.js 文件的路径。
在应用任何更新 wps.war 文件的补丁包之后,可能需要重复这个步骤。
添加或安装 Photo Book portlet 实例
每个组件都依靠 portlet 显示其内容。Lotus Quickr 附带每个组件类型所用的 portlet。为了显示新的 Photo Book 组件,必须创建一个新的 portlet。创建 portlet 最简便的方法是复制现有的 portlet。因为正在使用 Lotus Web Content Management,需要修改的惟一地方是在配置中告诉 Lotus Quickr 要在 portlet 中显示哪些 Web 内容。对于您的定制组件,可以重用相同的 portlet Java 实现,这样可以简便地定义新组件,而不需要编写任何 Java 代码。
也可以用 Java 从头创建不使用 Lotus Web Content Management 的定制组件。Lotus Quickr 包含的文档 portlet 就是一个不使用 Lotus Web Content Management 的组件。
为了创建 Photo Book portlet,选择 Site Administration - Advanced Administration - Portlet Management - Portlets。
搜索 “contacts”。单击 Contacts portlet 旁边的 Copy portlet 按钮。输入 Photo Book Application 作为应用程序名,输入 Photo Book 作为 portlet 名称。单击 OK 复制 portlet。
搜索 “photo”,找到刚才创建的 portlet。单击 Photo Book portlet 旁边的 Configure portlet 按钮。
设置表 1 所示的参数。
表 1. 用于配置 portlet 的参数
| 参数 | 值 |
|---|
| titleKey | Photo Book |
|---|
| commentsShow | enabled |
|---|
| templateSite | photo library resources/PhotoBook |
|---|
| descriptionKey | Share photos with your friends and colleagues |
|---|
| componentType | photo_book_list |
|---|
| newButtonTextKey | New Photo |
|---|
| WCM_CONTENT_CONTEXT | /PhotoBook/PhotoBook/items/main |
|---|
templateSite 参数指向 Photo Library Resources 库。这是前面使用 wcm-import-data 命令导入的库之一。在创建 Photo Book 组件的新实例时,Lotus Quickr 服务器自动地把这个站点区域复制到代表组件实例的库中。如果使用导入的库,那么这里的库名必须是小写的。
如果定制这个组件或创建其他定制组件,包含组件的实际内容的站点区域必须命名为 items。wiki 和博客中的链接窗口会寻找这个站点区域名。如果没有 items 站点区域,wiki、博客和其他地方的链接窗口就无法正常工作。另外,在组件中只能有一个名为 items 的站点区域。尽管 Lotus Web Content Management 系统中站点区域的名称必须是 items,但是可以任意选择站点区域的显示标题。
注意:componentType 必须在列表的末尾。
Lotus Web Content Management 显示引用的创作工具组件使用 AUTHORINGTEMPLATE_OVERRIDE 参数决定使用哪个创作模板添加内容。在第一次显示组件的 portlet 时,Lotus Quickr 显示 WCM_CONTENT_CONTEXT 引用的内容。此内容是组件的主页。用户可以在组件中导航到其他内容。对于 Photo Book,/PhotoBook/PhotoBook/items 上下文显示 Photo Book 的内容菜单页面。在这个示例中,创作模板硬编码在创作工具中,所以不需要 AUTHORINGTEMPLATE_OVERRIDE 参数。
选择 Portlet Settings - Custom Unique Names - Portlets。搜索 “photo”。
把 Photo Book portlet 的惟一名称改为 wps.p.web.photobook。以后可以使用 portlet 的惟一名称引用它。
选择 Site Administration - Advanced Administration - Portal Content - Web Content Libraries。单击 Photo Library Resources 的 set permissions 图标,单击 edit role of users,单击 Add,选中 All Authenticated Portal Users,单击 OK,单击 Resources 并单击 Done。
选择 Site Administration - Advanced Administration - Portlet Management - Portlets,搜索 “Photo Book”。单击 Photo Book 的 assign access to portlet 图标,单击 edit role of users,单击 Add,选中 All Authenticated Portal Users,单击 OK,单击 Photo Book 并单击 Done。这允许非管理用户使用这个 portlet。
在主题中的定制架中添加 Photo Book
现在已经定义了 Photo Book 组件。必须在用户界面中添加一个链接,让用户能够把这个组件添加到空间中。对主题文件 <wp_profile>/installedApps/<nodename>/wps.ear/wps.war/themes/html/QPG/pageHeaderContent.jsp 做以下修改:
在 <div id="customizePage2" style="display: none;"> 下面,把清单 4 所示的代码添加到无序列表中。
清单 4. 在主题中的定制架中添加 Photo Book 的代码
<li><a href="#" onClick="javascript:showTeamSpaceAddComponentForm
("<%=MarkupUtil.htmlAttributeEscape(MarkupUtil.jsEscape
("Photo Book"))%>", "<%=MarkupUtil.htmlAttributeEscape
(MarkupUtil.jsEscape("New Photo Book"))%>", "<%= applicationID %>
", "wps.p.web.photobook", true, nodesOnLevel, true, 'photobook')"
class="picture">Photo Book</a></li>
|
在应用任何更新 wps.war 文件的补丁包之后,可能需要重复这个步骤。
添加可翻译的属性
可以翻译 Photo Book 标题和描述。Lotus Web Content Management 空间 portlet 在 portlet 配置中寻找 componentType。portlet 自动地在属性文件中生成键,根据键为用此组件创建的模板寻找要使用的标题和描述。创建一个名为 photo_book_list.properties 的属性文件,把它放在服务器类路径中的某个位置。例如,可以把这个属性文件放在:
<Portal Server>/shared/app/contentLib
属性文件可以包含以下属性:
- photo_book_list_TITLE=Photo Book。
- photo_book_list_DESCRIPTION=A Photo Book can be used to share photos or images with your team。
- photo_book_list_NEW_BUTTON_TEXT=New Photo。
当创建另一个定制 portlet 并在 portlet 配置中使用不同的 componentType 时,修改键和属性文件名。
现在,当从 Photo Book 组件创建新的模板时,会翻译新组件的默认名称。
恭喜,Photo Book 已经安装好了
可以在空的 Lotus Quickr 空间中添加 Photo Book 组件,然后可以从这个空间创建一个模板,这样就可以方便地创建新的 Photo Book 空间。
作为进一步练习,可以编辑 Photo Book 的创作模板,把链接组件改为图像组件,这样就可以把图像直接上传到 Photo Book 中,而不只是链接其他地方的图像。
为 e-Album 配置库
单击 Library Setting 按钮,输入服务器 URL、库 ID、用户名和密码。单击 OK;然后就可以导航到 Lotus Quickr 文档库中存储的照片。
结束语
本文介绍了一个用 Lotus Quickr for WebSphere Portal 管理照片的示例应用程序。这个应用程序基于文档库和 Lotus Web Content Management 组件,它使用一个基于公共 API 的联合程序作为这两个组件之间的通信渠道。您可以参考这个示例构建自己的 Lotus Quickr 应用程序,为文档库中的内容提供定制的查看功能。
下载 | 名字 | 大小 | 下载方法 |
|---|
| PhotoBook.zip | 2.3MB | HTTP |
参考资料
作者简介  | |  | Jon Brunn 是 Lotus Quickr for Enterprise Content Management integration 的架构师。Jon 目前正在研究 Lotus Quickr 产品,尤其是在扩展、定制和企业集成方面。 |
 | |  | Pan Zhi Hua 是在中国北京 IBM Lotus Quickr API 团队工作的软件工程师。 |
 | |  | Xiao Pei Lui 是在中国北京 IBM 中国软件开发实验室工作的软件工程师。Xiao Pei 当前从事 IBM Lotus Quickr 服务测试。 |
 | |  | Da Teng (Longda) 是在中国北京 IBM 中国软件开发实验室工作的软件工程师。Longda 当前从事 Lotus Quickr for WebSphere Portal 服务 FVT。 |
 | |  | Zhi Jun (Cliff) Chen 是在中国北京 IBM 中国软件开发实验室工作的软件工程师。Zhi Jun 是 Lotus Quickr for WebSphere Portal 服务的 FVT 主管。 |
 | |  | Li Dong Du 是在中国北京 IBM 中国软件开发实验室工作的软件工程师。Li Dong 当前从事 Lotus Quickr for WebSphere Portal 服务 FVT。 |
对本文的评价
|