科技行者

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

知识库

知识库 安全导航

至顶网软件频道Lotus Workplace Web Content Management API 简介

Lotus Workplace Web Content Management API 简介

  • 扫一扫
    分享文章到微信

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

Lotus Workplace Web Content Management 新增加的 API 能够访问某些产品功能。本文将介绍 API 配置与核心类和接口,还通过一个例子说明如何使用这种 API。

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

关键字: 简介 web lotus IBM Office

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

最近几年,内容管理在商业中发挥的作用越来越大。能够快速有效地进行管理和提供 Web 内容是当代企业成功的关键因素之一。IBM Lotus Workplace Web Content Management 是 Lotus Workplace 解决方案的重要组成部分,可以从最初的创建到最终的 Web 表示,全过程地帮助客户管理公司内容。它提供了一种成熟的内容管理系统,非技术性用户和技术用户都可以使用该系统。目前有两个版本:Java 和 Domino。本文要介绍的是 Lotus Workplace Web Content Management 的 Java 版本。

Lotus Workplace Web Content Management 2.0 提供了新的特性来扩展其功能,其中之一是 Lotus Workplace Web Content Management API。通过这个 API,用户能够很容易地从 Web 应用程序中检索内容或者创建内容,从而更加方便灵活地管理企业 Web 内容。

本文示范了如何使用 Lotus Workplace Web Content Management API 构建 Java 应用程序。本文包括三部分:首先将简要介绍 Lotus Workplace Web Content Management API 的配置,然后讨论 Lotus Workplace Web Content Management API 的基本接口,最后通过一个例子来帮助您使用 Lotus Workplace Web Content Management API 快速创建 Web 应用程序,示例文件可以从 Sandbox 下载。本文假设您熟悉 Lotus Workplace Web Content Management,并具有 Java 应用程序开发经验。

Lotus Workplace Web Content Management API

Lotus Workplace Web Content Management 2.0 引入了 API 外化(API externalization),从而能够构建从其他产品中迁移/导入内容、实现高级的呈现功能或者完成内容的批处理的解决方案。这仅仅是 2.0 版引入的新特性之一。关于 Lotus Workplace Web Content Management 2.0 特性和增强的更多信息,请参阅 Lotus Workplace Web Content Management, Java edition Release Notes

通过使用这种 API,可以访问 Lotus Workplace Web Content Management 的下列功能:

  • 对象 ID 的一些搜索迭代器,比如按照名称查找给定类型的对象,或者按照工作流的阶段来查找内容。
  • 类似 Menu Component 搜索的内容搜索,但是使用对象参数作为 ID。
  • 通过对象 ID 检索对象。
  • 能够创建/删除/保存以下对象:内容、站点、站点区域和三种库组件。
  • JSP 组件。

有关更多细节,请参阅 Lotus Workplace Web Content Management InfoCenter 和 JavaDoc。JavaDoc 位于 Lotus Workplace Web Content Management 服务器的 WebApp\api-javadocs 目录下。





回页首


Lotus Workplace Web Content Management API 的配置

Lotus Workplace Web Content Management 的默认安装过程将 Lotus Workplace Web Content Management Java 类放在 Lotus Workplace Web Content Management WAR 文件的 WEB-INF\lib 目录中。该安装中,这些类不能被其他应用程序访问,包括同一 Java 虚拟机中的应用程序。为了在其他应用程序中访问 Lotus Workplace Web Content Management 代码(特别是这些 API),需要在 WebSphere Application Server 中创建一个类加载程序(classloader),来加载相关的 Lotus Workplace Web Content Management 类。

请按照以下步骤配置 Lotus Workplace Web Content Management API:

  1. 将所有的 ilwwcm-*.jar 文件从 WEB-INF\lib 目录下移动到 WEB-INF 之外的某个新目录下。新目录的理想位置是直接放在 ilwwcm.war 目录下。必须移动(而不是复制) ilwwcm-*.jar 文件,否则就会产生错误。
  2. 在 WebSphere Application Server 管理控制台的 Environment - Shared Library 区域中,创建一个新的 Shared Library,比如可以命名为 lib。在这个 Shared Library 中,将移到新目录中的所有 JAR 文件添加到 Classpath 区段中,如下图所示。
    图 1. Shared Library
    Shared Library

    如上图所示,每个 JAR 文件的路径必须是完整路径。比如,如果将所有 JAR 文件移到 ilwwcm.war\lib 目录中,那么 Classpath 区段的值将如下所示:

    C:/IBM/WebSphere/AppServer/installedApps/Lotus Workplace Web Content Management/
    Lotus Workplace Web Content ManagementV2.ear/ilwwcm.war/lib/ilwwcm-api.jar
    C:/IBM/WebSphere/AppServer/installedApps/Lotus Workplace Web Content Management/
    Lotus Workplace Web Content ManagementV2.ear/ilwwcm.war/lib/ilwwcm-commons-properties.jar
    C:/IBM/WebSphere/AppServer/installedApps/Lotus Workplace Web Content Management/
    Lotus Workplace Web Content ManagementV2.ear/ilwwcm.war/lib/ilwwcm-commons-utils.jar
    C:/IBM/WebSphere/AppServer/installedApps/Lotus Workplace Web Content Management/
    Lotus Workplace Web Content ManagementV2.ear/ilwwcm.war/lib/ilwwcm-commons-version.jar
    C:/IBM/WebSphere/AppServer/installedApps/Lotus Workplace Web Content Management/
    Lotus Workplace Web Content ManagementV2.ear/ilwwcm.war/lib/ilwwcm-commons-xmlpersistency.jar
    C:/IBM/WebSphere/AppServer/installedApps/Lotus Workplace Web Content Management/
    Lotus Workplace Web Content ManagementV2.ear/ilwwcm.war/lib/ilwwcm-framework.jar
    C:/IBM/WebSphere/AppServer/installedApps/Lotus Workplace Web Content Management/
    Lotus Workplace Web Content ManagementV2.ear/ilwwcm.war/lib/ilwwcm-javacontentextension.jar
    C:/IBM/WebSphere/AppServer/installedApps/Lotus Workplace Web Content Management/
    Lotus Workplace Web Content ManagementV2.ear/ilwwcm.war/lib/ilwwcm-search-core.jar
    C:/IBM/WebSphere/AppServer/installedApps/Lotus Workplace Web Content Management/
    Lotus Workplace Web Content ManagementV2.ear/ilwwcm.war/lib/ilwwcm-server.jar
    C:/IBM/WebSphere/AppServer/installedApps/Lotus Workplace Web Content Management/
    Lotus Workplace Web Content ManagementV2.ear/ilwwcm.war/lib/ilwwcm-syndication-core.jar
    

    这段代码可以复制并粘贴,并根据配置作适当的修改。

  3. 在 Servers - Application Servers - [您的服务器名]下,从列表中选择 Classloader 并创建一个新的类加载器,模式为 PARENT_FIRST。然后选择创建的类加载器并单击 libraries 链接。将上一步创建的共享库添加到 libraries 中,如下图所示。
    图 2. 配置类加载器
    配置类加载器
  4. 完成上述步骤之后,在安装了 Lotus Workplace Web Content Management 的机器上重新启动 WebSphere Application Server。





回页首


Lotus Workplace Web Content Management API 的核心类和接口

这一节将介绍 Lotus Workplace Web Content Management API 的核心类和接口。我们首先将介绍 Lotus Workplace Web Content Management 的基本对象和组件,然后用对应的应用程序编程接口将这些对象和组件联系起来。

注意:该 API 中只提供了一个类,即 WCM_API 类,其他都是接口。

WCM_API 类

WCM_API 类是使用 Lotus Workplace Web Content Management API 的入口,它提供了获得资料库的方法。

Workspace 和资料库接口

使用 Lotus Workplace Web Content Management 开发网站时,您充当一个注册用户。执行的所有工作都与该用户联系在一起。该用户必须有足够的权限执行某些功能。在 Lotus Workplace Web Content Management API 中,这是通过 Workspace 对象来表示的。Workspace 是该 API 的核心。对象的创建、保存、删除和搜索都在 Workspace 对象中完成。从本质上说,Workspace 就是与用户关联的 Lotus Workplace Web Content Management 接口。使用 Workspace 对象,任何人都可以作为该用户执行操作。

Workspace 表示特定用户的 Lotus Workplace Web Content Management 资料库的一个视图。Workspace 接口中提供了绝大多数重要功能。在 Workspace 中可用的操作包括:

  • 搜索文档。Lotus Workplace Web Content Management API 提供了两种搜索方法。一种方法是提供详细的搜索条件,包括 template ID、siteArea ID、category ID 和关键字。搜索文档的另一种机制是通过 findby 方法,包括 findbyName、findbyType、findContentByCategory 等。
  • 创建可编辑类型的新对象,如内容、站点、组件,等等。
  • 呈现给定的上下文,或者使用给定上下文呈现给定组件。
  • 保存和删除可编辑对象。

要获得 Workspace 对象,用户必须从惟一资料库中请求一个对象。这是 Lotus Workplace Web Content Management 资料库的入口点。它提供了两种方法来获取 Workspace 对象,一个用于匿名用户,另一个用于注册用户。比如,注册用户要获得 Workspace 对象,可以使用下面的调用:

WCM_API.getRepository().getWorkspace(user name,password);

如果 Lotus Workplace Web Content Management 不承认该用户或者该用户未能通过身份验证,就会抛出 OperationFailedException。只有 Lotus Workplace Web Content Management 用户,包括外部 LDAP 用户(需要专门配置)才能得到承认。

文档、文档类型和文档 ID 接口

一个文档表示资料库中的一个对象或实体。它是其他多数实体接口的父接口,如 content、category、site 等,一般仅使用其子接口。

资料库中的每个实体都有惟一标识符,称为文档 ID,惟一地表示该实体。不同实体可以有相同的名字,但必须具有不同的 ID。文档 ID 在 API 中用 DocumentID 接口表示。

文档类型则表示一类文档。文档类型可以是 content、category、site 或者所有这些组件。在 Lotus Workplace Web Content Management API 中,DocumentType 和 DocumentTypes 接口处理文档类型。DocumentTypes 接口维护所有可用文档类型的列表,而 DocumentType 对象是单个的文档类型。

内容组件、库组件、内容组件容器和内容接口

Lotus Workplace Web Content Management 中有两类不同的组件:内容组件和库组件。内容组件是存储内容、站点或站点区域的组件,而库组件是直接存储在组件库中的静态组件。内容组件和库组件都可以按照页面设计检索。但是在页面设计中检索库组件时,检索的组件在任何时候都是已知的,因为它们是直接引用的。而对于内容组件,实际呈现的组件依赖于当前的内容或站点,这意味着内容呈现的时候是动态查找的。有关更多信息,请参阅 Lotus Workplace Web Content Management InfoCenter。

Lotus Workplace Web Content Management 中有一个表示内容组件的 ContentComponent 接口。Lotus Workplace Web Content Management API 也提供了一些内容组件,但不包括 JSPComponent 和 Federated 内容组件。

对于库组件,Lotus Workplace Web Content Management API 提供了 LibraryComponent 接口来表示所有库组件。此外还有 LibraryFileComponent、LibraryHTMLComponent 和 LibraryImageComponent 接口,它们分别表示 File 组件、HTML 组件和 Image 组件。但是,其他库组件(如 Navigator 组件和 Menu 组件)在 API 中没有对应的接口。

ContentComponents 可以添加到 Site、SiteArea 和 Content 对象中。ContentComponentContainer 接口提供了诸如从容器中更新和检索内容组件之类的基本功能。

内容对象存储可供其他 Lotus Workplace Web Content Management 对象引用的值。这些值包括 ID 信息、配置、安全和组件。内容用 Content 接口表示。

RenderingContext 接口

Lotus Workplace Web Content Management 中的一项基本要求是在网页中呈现内容或者组件。由于特性是动态表示的,所以在呈现组件时首先要获得呈现的上下文。RenderingContext 接口表示呈现的上下文,包含表示可呈现对象所需要的信息。其中包括当前内容、页面设计和站点、servlet 路径和应用程序路径、呈现的内容,等等。





回页首


安装示例应用程序

这一节将通过一个示例应用程序来示范 Lotus Workplace Web Content Management API 的用法。请从 Sandbox 下载示例应用程序,将其安装到 WebSphere Application Server 上,完成前面所述的设置。安装步骤如下:

  1. 安装 API Testing 应用程序,比如可使用上下文根 APISample。该应用程序必须与 Lotus Workplace Web Content Management 安装在同一个服务器上,因为 Lotus Workplace Web Content Management 仅提供了本地接口。

    注意:应用程序不能远程使用这种 API,比如从远程的 WebSphere Application Server 或者独立的应用程序中访问。

  2. 创建站点和站点区域,同时创建一个简单的工作流,在其包含的阶段中有一个发布动作。
  3. 以前面建立的工作流作为默认工作流来创建内容模板。在模板中增加一个 HTML 组件,命名为 body。这一步很重要,因为在示例代码中我们将创建拥有该组件的新内容。
  4. 按照服务器的配置修改 com\ibm\sgl\test\api\config.properties 文件。这个 config.properties 文件对我们的示例应用程序很重要。比如,因为该 API 对所有资料库访问动作都要求指定用户名和口令,这些值将保存在 config.properties 文件中。WAR 文件中将用户设为 Administrator,从安全的角度出发,应该避免这样做。应该使用管理员之外的其他用户来访问 Lotus Workplace Web Content Management。为属于 UI Access Group 的成员设置用户名和口令。
  5. 此外,在 config.properties 文件中,有一个称为 Webappurl 的设置,它指向 Lotus Workplace Web Content Management 上下文。提供的 WAR 文件中将其设为: Webappurl=http://localhost:9080/API/connect,应根据环境加以修改。
  6. 有一项测试是从文件系统中导入文件创建 Library File 组件。这些导入的文件保存在压缩文件 SampleImport.zip 中。将该文件解压到服务器的 C: 驱动器根目录下,这样示例程序才能找到。zip 文件解压后将创建目录 C:/APISample/ImportFile。如果这些文件保存在其他位置,就要对属性文件 com\ibm\sgl\test\api\config.properties 中的源目录项进行相应的修改。修改 config.properties 文件后,都必须关闭然后重新打开 APISample 应用程序。
  7. 打开 Web 浏览器并输入 http://<server>:<port>/APISample/SampleServlet,这样就可以加载欢迎页面并提供到其他页面的访问。

示例应用程序

这一节将介绍示例应用程序中的重要代码片断,说明如何使用 Lotus Workplace Web Content Management API。API Sample 应用程序要完成以下任务:

  1. 创建新的内容文档。
  2. 导入文件以创建 File Library 组件。
  3. 在网页中呈现内容。
  4. 搜索内容。
  5. 删除原来的内容。

有关更多细节,请参阅实例应用程序中的描述。

ConfigUtil.java 文件中构造了核心 Workspace 对象。

// ============
/**
  * Create a Workspace object with user name and password stored in the resource file
  * and store this Workspace object.
  *
  */
 private void createWorkspace() {
        String userName = m_resources.getString("username");
        String userPassword = m_resources.getString("password");
        try {
	// get the Workspace object with provided user name and password
            s_workspace =
                WCM_API.getRepository().getWorkspace(userName, userPassword);
        } catch (ServiceNotAvailableException e) {
            e.printStackTrace()
        } catch (OperationFailedException e) {
            e.printStackTrace();
        }
}
// ============

CreateContentText.java 文件中使用了 Workspace 接口的 createContent()、getbyID() 和 save() 方法,从指定模板创建新的内容,然后保存并发布这些内容。

// ======
try {
// create new content with provided template ID
content = workspace.createContent(workspace.createDocumentId(publishingTemplateId));
  siteArea = (SiteArea) workspace.getById(workspace.createDocumentId(siteAreaId));
  siteAreaChildren = siteArea.getChildren();
  DocumentId lastSiteAreaChildId = null;
  
  while (siteAreaChildren.hasNext()){
    lastSiteAreaChildId = (DocumentId) siteAreaChildren.next();
  }
  
// add the newly created content to the end of this site area
  siteArea.addContent(content.getId());
  content.setName(contentTitle);
  content.setDescription(contentDescription);
// add an HTML component to this content
  if (content.hasComponent("body")){
bodyComponent = (HTMLComponent) content.getComponent("body");
    bodyComponent.setHTML(body);
  } else{
    output.append("HTMLComponent body 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>");
  }
  saveErrors = workspace.save(siteArea);
  output.append("<br><br>Site area save attempted<br>");
  if (saveErrors.length > 0) {
    output.append("The following errors occurred on site area save<br>");
    for (int i=0; i < saveErrors.length; i++) {
       output.append(saveErrors[i]+"<br>");
    }
  } else {
     output.append("No errors reported on site area save<br>");
  }
// publish the content
  while (!content.isPublished()){
    content.nextWorkflowStage();
    index++;
    if (index > 50) {
      output.append("Content failed to publish in runPost");
      break;
    }
  }
  output.append("Test complete in runPost");
  } catch (Exception e) {
   output.append(HTML.getStackTrace(e) + " in runPost");
  }
// ======

RenderContentTest.java 文件中使用 Workspace 的 createRenderContext() 和 render() 方法在网页上用适当的组件表示新的内容。

//=======
try {
SiteArea siteArea =
(SiteArea) workspace.getById(workspace.createDocumentId(siteAreaId));
  Content content =
        (Content) workspace.getById(workspace.createDocumentId(contentId));
  Map parametermap = new HashMap();
// create a rendering context 
  RenderingContext context =
        workspace.createRenderingContext(request, response, parametermap);
// set proper design page and content to be rendered
  context.setPresentationTemplateOverride(presentationTemplateName);
  context.setRenderedContent(content, siteArea);
 
// render selected content in Web page
  output.append(workspace.render(context));
  } catch (Exception e) {
	…..
  }
//=======

SearchTest.java 文件中使用了 Workspace 的 contentSearch() 方法,详情请参见 Java 源代码。





回页首


结束语

本文介绍了使用 Lotus Workplace Web Content Management API 创建灵活的 Web 应用程序的配置步骤,并提供了一个示例应用程序以供参考。希望能对 Lotus Workplace Web Content Management API 的配置和开发有所帮助。

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

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

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