使用 Rational Application Developer 8.0.4 创建多渠道复合 portlet 应用程序,第 5 部分

创建可以显示 IBM Connections 数据的 portlet

Comments

系列内容:

此内容是该系列 # 部分中的第 # 部分: 使用 Rational Application Developer 8.0.4 创建多渠道复合 portlet 应用程序,第 5 部分

敬请期待该系列的后续内容。

此内容是该系列的一部分:使用 Rational Application Developer 8.0.4 创建多渠道复合 portlet 应用程序,第 5 部分

敬请期待该系列的后续内容。

下载 IBM® Rational® Application Developer 试用版  |  在线试用 IBM® Rational® Application Developer
下载 IBM® WebSphere® Application Server 试用版  |  IBM® WebSphere® Application Server for Developers
下载 IBM® DB2® for Linux, UNIX, and Windows 试用版  |   IBM® DB2® Express-C(免费产品)
下载更多的 IBM 软件试用版,并加入 IBM 软件下载与技术交流群组,参与在线交流。

集成 IBM Connections 数据

IBM® Connections® 是针对业务的社交软件,可以轻松地将员工、合作伙伴和客户连接起来。在这个由五个部分所组成的系列文章的最后一个部分中,您将创建一个从 Connections 提取数据的 portlet。正如本教程前面部分所介绍的 IBM® DB2® 和 Microsoft SharePoint 数据一样(参阅本系列的更多内容),您需要根据 Deals portlet 传递的数据,将 Deals portlet 连接到这个新的 portlet,以便从 Connections 中获取数据。

要点:
在继续本文之前,请确保您已按照第 1 部分中的 Connections 设置指南进行操作。

以下是使用 Connections 数据的步骤概要。

  1. 创建一个名为 Connections 的新 Portlet。您还需要创建一个自定义 portlet 类,同时创建一个 portlet 并将其命名为 ConnectionsPortlet。
  2. 在 Deals portlet 中定义一个名为 AccountName 的发布者事件。
  3. 在 Connections portlet 中定义一个订阅 AccountName 事件的订阅者。
  4. 使 Connections portlet 能够编写业务逻辑,从 Connections 中获取构件。通过使该 portlet 支持服务器端的技术特性可以实现这一点。
  5. 创建一个操作来触发 AccountName 事件,然后,调用事件处理器,即 Connections portlet 中的 processEvent 方法。
  6. 生成 JavaServer Pages (JSP) 代码,显示步骤 4 中获取的构件。
  7. 将两个 portlet 连接在一起。

任务 1、任务 2、任务 3 和任务 6 与创建 SharePoint 相关 portlet 时讨论过的任务类似。所以本节将介绍步骤 4、步骤 5、步骤 6 和步骤 7。

使 Connections portlet 支持服务端技术

假设,您已创建了 Connections portlet,以下是启用服务器端技术特性所需遵循的步骤。

  1. 右键单击 DealsProject 项目,并选择 Properties
  2. 打开 Project Facets 选项卡。
  3. 在 Web 2.0 类别下面选择 Server Side Technologies facet,如图 1 所示。
图 1. 选择服务器端技术的 facet
选择服务器端技术特性
选择服务器端技术特性
  1. 单击 OK

这提供了连接到 IBM Connections 提供的 RESTful 服务时所需的 Apache Abdera API。

在 Deals portlet 中创建触发 AccountName 事件的操作

在创建一个从 Deals portlet 触发事件的操作之前,让我们先看一下这个用例。事件流程如下:

  1. Deals Portlet 发布一个事件,将 Account name 传递给 Connections portlet。
  2. Connections portlet 收到一个事件,调用一个方法来处理该数据,即 Account name。根据 Account name,可以从 Connections 服务器提取相关的活动。

现在,按照以下步骤创建一个触发 AccountName 事件的操作:

  1. 在 Page Designer 中打开 DealsView.jsp
  2. 在 Palette 视图中打开 Portlet 抽屉。
  3. 单击 Event Source Trigger,并将它拖放到 Account Name 列中的 Name 表达式上面。

这会调出 Insert Event Source Trigger 对话窗口。图 2 显示了在您定义了AccountName 事件之后,在 Insert Event Source Trigger 对话窗口中应该显示哪些值。

提示:
定义 AccountName 事件类似于在本系列第 4 部分中的定义 ContactId 事件。

图 2. Insert Event Source Trigger 对话窗口
事件源触发器插入对话窗
事件源触发器插入对话窗
  1. 单击 Finish

NAME 字段会是超链接的字段,如图 3 所示。注意如何使用 AccountName 事件的 Publish 事件图标来装饰 Deals portlet 节点。

图 3. 超链接的列
事件信息装饰的节点

现在,您需要使 Connections portlet 可以接收事件 AccountName。完成该工作的步骤与第 4 部分中使 ContactInformation portlet 可以接收 ContactId 事件的步骤大致相同。所以此处不再赘述。在使 Connections portlet 能够接收 AccountName 事件后,请打开 ConnectionsPortlet.java 类,并执行以下步骤:

  1. 找到 processEvent 方法,并用清单 1 中所示的代码替换其内容。
清单 1. processEvent 方法的新代码
    public void processEvent(EventRequest request, 
			EventResponse response) throws 
			PortletException, java.io.IOException {	
     super.processEvent(request, response);
     FacesContext facesContext = FacesContext.getCurrentInstance();
     Event sampleEvent = request.getEvent();
     if(sampleEvent.getName().toString().equals("AccountName")) {
		Object sampleProcessObject = sampleEvent.getValue();
		Application app = facesContext.getApplication();
		fetchFromConnections(sampleProcessObject.toString(), 
            app);
	  }
   }
  1. 在 com.ibm.dealsproject 包下面创建一个名为 ConnectionsList 的新类。
  2. 用清单 2 中的代码替换该类的内容。
清单 2. 新的 ConnectionsList 类的代码
    package com.ibm.dealsproject;

  import java.util.List;

  public class ConnectionsList {

	List connectionsList;

	public List getConnectionsList() {
		return connectionsList;
	}

	public void setConnectionsList(List connectionsList) {
		this.connectionsList = connectionsList;
	}
   }

这个类用于存储对应某个 Account name 的 Connections 中的所有匹配活动。清单 3 显示了这个类的用法。

  1. 创建一个 Faces Managed Bean 实例,使用 ConnectionsList 类保存活动的列表。这与您之前在本系列的第 3 部分中对 ContactBean 类所做的操作类似。
  2. 输入以下值(如图 4 所示):
    • Name:connectionsList
    • Class:com.ibm.dealsproject.ConnectionsList
    • Scope:Session (从下拉菜单中选择)
图 4. 指定 Faces Managed Bean 属性
指定 Bean 属性
指定 Bean 属性
  1. 将清单 3 中的代码复制并粘贴到 ConnectionsPortlet.java 文件中。当用户在 Deals portlet 中单击一个帐户名称时,processEvent 方法会调用这个方法(fetchFromConnections)以及该帐户名称。您也可以在示例项目内的 Deals 项目中找到 ConnectionsPortlet.java 文件。
清单 3. fetchFromConnections 方法的代码
   public static void fetchFromConnections(String accountName,  
   Application app){
	List activityList = new ArrayList();
	Abdera abdera = new Abdera();
	AbderaClient client = new AbderaClient(abdera);
	ConnectionsDataAccess connectionsDataAccess =  
      ConnectionsDataAccess.getInstance();
	
      //information fetched from connection.properties file	
      String userName = connectionsDataAccess.
                        getConnectionsUserName();
	String password = connectionsDataAccess.
                        getConnectionsPassword();
      String url = connectionsDataAccess.
                   getConnectionsUrl();

	try {
	  String activityHome = url+"/activities/";
	  String activityUrl = activityHome+"service/html/
                             mainpage#activitypage,";
		
	  client.addCredentials(activityHome, null, null, new 
            UsernamePasswordCredentials(userName,password));
	  ClientResponse response = client.get(activityHome+"service/
        atom2/everything");
			
	  Document doc = response.getDocument();
	  Feed feed = (Feed)doc.getRoot(); 
            
	  List list = feed.getEntries();
	  for (int i = 0; i > list.size(); i++) {
	  Entry entry = (Entry) list.get(i);
	  if(entry.getTitle().contains(accountName)){
		String id = entry.getId().toString();
		String arr[]=id.split(":");
		id = arr[arr.length - 1];

		ConnectionsBean mybean = new ConnectionsBean();
		mybean.setUrl(activityUrl+id);
		mybean.setContent(entry.getContent());
		mybean.setTitle(entry.getTitle());
		activityList.add(mybean);
	      }
	     } 

          } catch (URISyntaxException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} /*catch (MalformedURLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}*/ catch (ParseException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} /*catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} */
		
        if(!activityList.isEmpty()){
	    FacesContext facesContext = 
          FacesContext.getCurrentInstance();
	    ValueBinding binding = app.createValueBinding("# 
          {connectionsList}");
	    ConnectionsList connectionsList = (ConnectionsList)
                         binding.getValue(facesContext);
	    connectionsList.setConnectionsList(activityList);
	    facesContext.release();

	    }
	}

清单 3 中的代码使用 Connections 服务器所提供的 API 从 IBM Lotus Connections 提取与某个帐户名称对应的活动数据。所提取的活动信息存储在一个 ConnectionsBean 对象中,然后,会将该对象添加到一个 ArrayList 对象。最后,ArrayList 对象被设置在 Faces Managed Object(您之前创建的 ConnectionsList)中。使用这个 Faces Managed Object,您可以生成 JSP 代码,在 portlet 中显示活动数据。

生成 JSP 代码

按照以下步骤生成 JSP 代码,以显示清单 3 中获取的活动数据:

  1. 在 Page Designer 中打开 ConnectionsView.jsp 文件。
  2. 打开 Page Data视图,并展开 connectionsList 节点,如图 5 所示。
图 5. 展开的 Faces Managed Bean 节点
在 Page Data 视图中的 Faces Managed Bean 节点
在 Page Data 视图中的 Faces Managed Bean 节点
  1. 双击 Contained Type 节点,打开 Choose Contained Type 对话窗口。
  2. 输入 ConnectionsBean,并在匹配项中选中 ConnectionsBean 对象。
图 6. Choose Contained Type 对话窗口
选中的 ConnectionsBean
选中的 ConnectionsBean
  1. 单击 OK Save 文件。
  2. 现在,将 Contained Type 节点拖到 JSP。这会打开 Insert JavaBean 对话窗口,如图 7 所示。
  3. 取消选中 url 复选框,将标签修改如下,如图 7 所示:
    • 将 title 修改为 Activity
    • 将 content 修改为 Activity Content
图 7. Insert JavaBean 窗口
JavaBean 的插入对话窗
JavaBean 的插入对话窗
  1. 单击 FinishSave 文件。

这将自动生成代码,以显示 ConnectionsView.jsp 中选中的字段列表,如图 8 所示。

图 8. JSP 中的内容
Activity 和 Activity Content
Activity 和 Activity Content
  1. 打开 Palette 视图,并展开 Enhanced Faces Component 抽屉。

    注:要打开 Palette 视图,则需要单击 Window 菜单项,然后单击菜单栏项 Show View,最后单击子菜单项 Palette,如图 9 所示(Window > Show View > Palette)。
图 9. 打开 Palette 视图
包含所陈述的选项的两个 Windows 下拉菜单
包含所陈述的选项的两个 Windows 下拉菜单
  1. 从 Enhanced Faces Component palette 抽屉中选择 Link (图 10),并将它拖动到 {title} 表达式上面,以便调用 Configure URL 窗口。
图 10. palette 中的 Link 项
从若干个选项中选中的 Link
  1. 在 URL 字段中输入 #{varconnectionsList.url},并保留 Label 字段为空白。

这会在 title 表达式中插入一个 URL,如图 11 所示。

图 11. 在 JSP 中更新的内容
更新的 JSP
  1. 在服务器上运行 DealsProject

这会打开浏览器并显示该 portlet 应用程序。

  1. 再次执行一个连接操作,像您之前在本系列第 4 部分中所做的那样。这次,将 Deals portlet 和 Connections portlet 连接在一起。

图 12 显示了连接的 UI。

图 12. 连接界面
选择要发送的内容以及接收内容的小部件
选择要发送的内容以及接收内容的小部件
  1. 在 Deals portlet 中单击一个帐户名称,并在 Connections portlet 中看看所显示的活动信息。参见图 13。
图 13. 支持事件的 portlet 共享数据
软件的 portlet 共享数据
软件的 portlet 共享数据

结束语

这个由五部分所组成的系列教程介绍了功能全面的复合多渠道 portlet 应用程序的创建过程,该应用程序使用的数据来自多种数据源,如 IBM DB2 数据库、Microsoft SharePoint 服务器和 IBM Connections 社交业务软件。本教程提供了为桌面浏览器和智能手机浏览器创建 portlet 用户界面的分步指南,还为您提供了 portlet 应用程序开发的许多其他方面的详细指南,包括创建服务数据对象(Service Data Object,SDO),以便使用来自 DB2 表的数据、由 Microsoft SharePoint 服务器提供的 Web 服务,以及由 IBM Connections 提供的 API。然后,本教程演示了如何编写您自己的业务逻辑,从 Microsoft SharePoint 服务器和 IBM Connectionss 提取数据。还介绍了如何使用 Rational Application Developer 中的工具在不同 portlet 之间启用事件处理。最后,本教程介绍了如何使用 WebSphere Portal 7.0 软件中提供的连接实用工具将不同的 portlet 连接在一起。


下载资源


相关主题


评论

添加或订阅评论,请先登录注册

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=Rational
ArticleID=816954
ArticleTitle=使用 Rational Application Developer 8.0.4 创建多渠道复合 portlet 应用程序,第 5 部分: 创建可以显示 IBM Connections 数据的 portlet
publish-date=05212012