使用 IBM ECM Widgets 集成第三方小部件,第 2 部分: 使用 Content List 小部件显示文档,更改搜索事件

IBM ECM Widgets 4.5.2 发行版中有大量的增强特性,包括 Content List 小部件事件增强特性。这些新事件允许显示文档、更改搜索、请求选中行、发送选中行及创建自定义动作。这些新事件允许显示文档、更改搜索、请求选中行、发送选中行及创建自定义动作。本文作为集成第三方小部件 系列 的第二部分,将讲解如何使用 Content List 小部件的新事件为您的业务增加价值。

Xin Yu Zhou, 软件工程师, IBM

Xin Yu Zhou 是 IBM Chin Development Lab 的一名软件工程师。他有着丰富的 IBM FileNet BPM (Business Process Management) 产品开发经验。



Gai Li, 软件工程师, IBM

Gai Li 的照片Gai Li 是 IBM Chin Development Lab 的一名软件工程师。她在小部件、Dojo 和 Web 2.0 应用程序开发方面经验丰富。



2011 年 1 月 06 日

简介

4.5.2 发行版中的 Content List 支持 5 个新事件:

  • Display documents(com.ibm.ecmwidgets.ce.ReceiveDocumentIDs)
  • Change search(com.ibm.ecmwidgets.ce.ReceiveStoredSearch)
  • Request selected rows(com.ibm.ecmwidgets.ce.RequestSelectedRows)
  • Send selected rows(com.ibm.ecmwidgets.ce.SendSelectedRows)
  • Custom actions(com.ibm.ecmwidgets.ce.<CustomActionName>)

com.ibm.ecmwidgets.ce.Xxx 是该事件编程的名称。对于 Custom Actions 事件,业务分析员在设计业务解决方案时命名。

本文将演示如何利用 Display Documents 事件和 Change Search 事件来满足您的业务需求。

Display Documents 事件和 Change Search 事件是处理(或接收)事件。

  • 您可以用 Display Documents 事件将数据连接到第三方数据源,如小部件。该事件会生成一个文档列表,合并来自 Content Engine 存储库和第三方数据源的数据。
  • 您还可以用 Change Search 事件先接收使用事件负载的存储搜索参数,然后用从传入参数带入的新存储搜索 URL 检索文档。该事件是存储搜索函数的一个新增强的特性。它是由 IBM ECM Widgets 4.5.1 中预配置的存储搜索 URL 驱动的。

使用 Display Documents 事件

有两种业务场景经常会用到 Display Documents 事件。

场景 1
业务分析员可以设计自定义小部件,根据输入的 Content Engine 文档 ID 列表弹出 Content List 小部件。Content List 小部件将检索出与所传入的 ID 匹配的 Content Engine 文档。这些文档的属性在负载中指定,会在 Content List 小部件中弹出。例如,在独立的数据库中维护 Content Engine 文档 ID 的公司可以使用 Content List 小部件来检索文档,向业务分析员提供查看、检入、检出功能。业务分析员可以使用此特性来满足需求。
场景 2
与场景 1 类似,业务分析员可以根据自定义小部件及文档 ID 提供附加数据,并在 Content List 小部件中显示文档属性和附加数据。

负载

为该事件定义的负载名称是 PropertyList,它包含四个部分:objectStoreNames、symbolicNames、externalColumns 和值,如清单 1 所示。

清单 1. PropertyList 负载
<iw:payloadDef name="PropertyList">
       <iw:payloadDef name="objectStoreNames" type="any" defaultValue="" 
       description=""/>
       <iw:payloadDef name="symbolicNames" type="any" defaultValue="" 
       description=""/>
       <iw:payloadDef name="externalColumns" type="any" defaultValue="" 
       description=""/>
       <iw:payloadDef name="values" type="any" defaultValue="" description=""/>
</iw:payloadDef>

尽管这 4 个子负载的类型是 any,它们仍然具有特定的格式,如下所示:

objectStoreNames
定义搜索范围的数组,即,要搜索的对象存储。
symbolicNames
定义要返回的文档属性的数组。数组元素是 Content Engine 文档属性符号名称。
externalColumns
定义了外部数据源提供的属性名称和类型的数组。每个数组元素都是一个 JSON 对象,它包含符号名称、显示名称和属性类型。显示名称将作为 Content List 小部件中的列标题。
定义了由外部数据源提供的每个文档相关的 Content Engine document Version Series ID 和附加数据的数组。每个数组元素都是 JSON 对象。一般情况下,每个元素都包含一个定义文档 Version Series ID 的 VersionSeries。如果在 externalColumns 部分中有额外的属性,那么每个属性的值将以名称/值对格式定义。请注意,不需要指定版本信息,因为只会返回已发行版本中的文档。如果对于指定的 Version Series ID,没有已发行版本文档,就不会返回该 Version Series ID 对应的文档。

清单 2 显示了一个 PropertyList 负载样例。

清单 2. PropertyList 负载样例
{
    "objectStoreNames": ["XObjectStore"],
    "symbolicNames": ["CompanyName", "DocumentTitle"],
    "externalColumns": [
       { "symbolicName": "SerialNumber", "name": "Serial Number", "type": "string" },
       { "symbolicName": "PurchaseCode", "name": "Purchase Code", "type": "string" }
    ],
    "values": [
       {"VersionSeries": "{B99F251C-0F2F-48A8-A828-C0730EE27A26}", 
       "SerialNumber": "1003", "PurchaseCode": "1003ABC"},
       {"VersionSeries": "{C3766EB7-64F2-4995-A33C-41F4AE26B317}", 
       "SerialNumber": "1004", "PurchaseCode": "1004ABC"}
    ]
}

清单 2 中的负载显示,事件发布者想要从 Content Engine Object Store XObjectStore 中检索两篇已发行文档。已发行文档的 Version Series ID 分别是 {B99F251C-0F2F-48A8-A828-C0730EE27A26} 和 {C3766EB7-64F2-4995-A33C-41F4AE26B317}。Content List 将返回文档属性 CompanyName 和 DocumentTitle,并为每个文档附上附加数据。

对于第一篇文档,会附上以下两个属性:

  • SerialNumber 属性的显示名称是 Serial Number,值是 1003
  • PurchaseCode 属性的显示名称是 Purchase Code,值是 1003ABC

对于第二篇文档,附上以下两条属性:

  • SerialNumber 属性的显示名称是 Serial Number,值是 1004
  • PurchaseCode 属性的显示名称是 Purchase Code,值是 1004ABC

小部件样例

本小节讲解如何创建一个新的小部件来展示场景 2。此小部件提供一个输入字段供用户输入公司名称。取得公司名称后,小部件从服务器端获取数据,并组成一个 PropertyList 负载。然后小部件向 Content List 小部件发布 Display Documents(com.ibm.ecmwidgets.ce.ReceiveDocumentIDs)事件。当 Content List 小部件获取负载后,就会检索文档并显示文档属性和附加数据。

通常情况下,小部件使用 XML 文件和 JavaScript 文件提供描述小部件行为的定义。XML 文件主要是负责小部件的定义,而 JavaScript 文件则定义小部件的行为,或是发布或处理事件。

SampleWidget1.xml

清单 3 显示的是第一个小部件样例的 XML。此 XML 文件中定义了三个项目:小部件引用的 JavaScript 资源文件、事件和小部件用户界面。

清单 3. SampleWidget1.xml
<iw:iwidget name="SampleWidget1" xmlns:iw="http://www.ibm.com/xmlns/prod/iWidget" 
iScope="com.ibm.im.ecmwidgets.sample.SampleWidget1" allowInstanceContent="true" 
supportedModes="view" mode="view">
    <!-- Resource references -->
    <iw:resource uri="SampleWidget1.js"/>
    
    <!-- Event definition section -->
    <!-- Send Documents Info is used to wire with Content List to send the documents 
    information as the input -->
    <iw:event id="Send Documents Info" published="true" 
    eventDescName="SendDocumentsInfo"/>
    <iw:eventDescription id="SendDocumentsInfo" payloadType="any" 
    description="" lang="en"/>
    
    <!-- Initial widget content -->
    <!-- An text type input and a button in it to trigger the event -->
    <iw:content mode="view">
       <![CDATA[
       <div id="_IWID_view">
          <b>companyName:</b>&nbsp;&nbsp;<input 
          dojo.Type="dijit.form.TextBox" id="companyName" style="60%">
          &nbsp;&nbsp;<label>Input a companyName, such as 
          "IBM" or "ECM" or "FN".</label><br>
          <input type="button" dojo.Type="dijit.form.Button" 
          id="mybutton" name="submit" value="Submit"/>
       </div>
       ]]>
    </iw:content>
</iw:iwidget>

SampleWidget1.js

清单 4 显示的是第一个小部件样例的 JavaScript。其中展示了小部件发布事件的行为和方法。

清单 4. SampleWidget1.js
dojo.require("dojo._base.xhr");
dojo.require("dijit.form.TextBox");
dojo.require("dijit.form.Button");
    
dojo.provide("com.ibm.im.ecmwidgets.sample.SampleWidget1");
 
dojo.declare("com.ibm.im.ecmwidgets.sample.SampleWidget1", null, {
    
    //onLoad function is invoked after the widget is loaded
    //define the button behavior here
    onLoad: function() {
       var button = dojo.byId("mybutton");
       dojo.connect(button, "onclick", dojo.hitch(this, this.SendEvent));
    },
    
    SendEvent: function(){
       var companyName = dojo.byId("companyName").value;
       this.handle(companyName);
    },
    
    handle: function(companyName) {
       dojo.xhrGet({
          url: "/SampleWidget1/SampleService.jsp?companyName="+companyName,
          handleAs: "json",
          sync: true,
          timeout: 5000,
          handle: dojo.hitch(this, function (result, io_arg) {
             this.result = result;
          })
       });
    
       var payload = this.result;
       this.iContext.iEvents.fireEvent("Send Documents Info", "any", payload);
    }
});

SampleService.jsp

清单 5 中的 JSP 模拟一个后台服务。它根据提交的公司名称向请求者返回相应的 JSON 格式数据。本例中,此数据是硬编码的。您应将硬编码数据用 Content Engine 中的数据替换。

清单 5. SampleService.jsp
<%@page contentType="text/html;charset=UTF-8"%>

<%
    //This is a sample service.
    String companyName = (String)request.getParameter("companyName");
        
    int i=0;
    
    if(companyName.equals("IBM")) i=1;
    else if(companyName.equals("ECM")) i=2;
    else if(companyName.equals("FN")) i=3;
    else if(!companyName.equals("IBM") && !companyName.equals("ECM") 
    && !companyName.equals("FN") && !companyName.equals("")) i=4;
        
    String result = "";
                             
    switch(i){
        case 1:
            result = 
"{'objectStoreNames': ['os4']," + 
"'symbolicNames': ['CompanyName', 'DocumentTitle']," +
"'externalColumns': [{ 'symbolicName': 'SerialNumber', 'name': 'Serial Number', 
                            'type': 'string' }," +
              "{ 'symbolicName': 'PurchaseCode', 'name': 'Purchase Code', 
                            'type': 'string' }]," +
"'values': [{'VersionSeries': '{8AF9A9AD-0BEE-4F47-8555-41B7EC4E5140}', 
        'SerialNumber': '1002', 'PurchaseCode': '1002ABC'}," + 
         "{'VersionSeries': '{6D3142CC-92AB-4A2C-B446-6FA1C0F9747E}', 
        'SerialNumber': '1005', 'PurchaseCode': '1005ABC'}," +
         "{'VersionSeries': '{54C72465-4E7F-433E-A146-B447B8C9EE5E}', 
        'SerialNumber': '1010', 'PurchaseCode': '1010ABC'}," +
         "{'VersionSeries': '{38BE6F59-A723-4576-A895-FD7873E59469}', 
        'SerialNumber': '1012', 'PurchaseCode': '1012ABC'}," +
         "{'VersionSeries': '{2C10F8DE-CA9C-408D-8F83-27E2713EE47F}', 
        'SerialNumber': '1020', 'PurchaseCode': '1020ABC'}]" +
"}";
            
            break;
            
        case 2: ...
        case 3: ...
        case 4: ...
        default:...
    }
	out.println(result);
%>

配置和部署小部件的 Display Documents 事件

IBM ECM Widgets 4.5.2 是要在 IBM WebSphere® Business Space 7 容器中使用的。按照以下步骤将小部件样例部署到同一个的 IBM WebSphere Business Space 7 中。

  1. 按 EAR 文件形式构造 web 应用程序源文件 SampleWidget1.js 和 SampleWidget1.xml,存放在 SampleWidget1.war/catalog/com/ibm/im/ecmwidgets/sample 目录,如图 1 所示。
图 1. EAR 文件结构
屏幕截图:浏览器风格的层次结构
  1. 将 EAR 文件、目录文件和终端文件压缩成 ZIP 文件,如图 2 所示。
图 2. ZIP 文件结构
屏幕截图:目录文件夹和 catalog_SampleWidget1.xml,ear 文件夹和 SampleWidget1.ear 以及终点文件夹和 SampleWidget1Endpoints.xml

catalog_SampleWidget1.xml 和 SampleWidget1Endpoints.xml 是用来提供在 IBM WebSphere Business Space 7 中注册小部件的信息的。请注意目录文件的名称必须以 catalog_ 前缀开头。

清单 6. 目录 xml 文件片段
<catalog id="SampleWidget1">
        <resource-type>Catalog</resource-type> 
        <category name="SampleWidget1"> 
        ... ...
  1. 在 Windows® 命令窗口中使用 IBM WebSphere Business Space 7 命令部署小部件。根据您的系统和存放 zip 文件的位置,可能要修改路径。
清单 7. 部署命令
C:\> cd <WAS_install_path>\profiles\<profile_name>\bin
C:\> wsadmin -connType NONE C:\>$AdminTask installBusinessSpaceWidgets
     {-serverName server1 -nodeName WMADBS7Node01 -widgets C:\ SampleWidget1.zip}
C:\> $AdminConfig save
  1. 重启 IBM WebSphere Application 服务器。
  2. 在 IBM WebSphere Business Space 7 中配置小部件。

重启服务器之后,您会发现在编辑页面时,小部件已经可用了,如图 3 所示。

图 3. 已注册的小部件
屏幕截图显示 SampleWidget1 图表高亮显示
  1. 将小部件拖放到 Content List 小部件页面上,本例中是 Sample Widgets Space,如图 4 所示。
图 4. 在页面中添加小部件
显示的是 Sample Widgets Space,其中有 Sample Widget 1 和 Sample Widget 2 选项卡
  1. 打开 Content List 小部件配置面板,并选择 Property list 单选按钮,如图 5 所示,图中显示, Content List 小部件能接受可接收事件的负载 Property list 的 com.ibm.ecmwidgets.ce.ReceiveDocumentIDs 事件。如果选择 Stored Search 单选按钮,Content List 小部件将忽略所有 com.ibm.ecmwidgets.ce.ReceiveDocumentIDs 事件。
图 5. Content List 小部件中的 Property list 模式
屏幕截图:选中 Property List 单选按钮,并且每页显示 15 项
  1. 通过选中 Sample 小部件的 Send Documents Info 发布事件,并在 IBM WebSphere Business Space 7 连接窗口中连接 Display documents 事件来启用事件,如图 6 所示。
图 6. 连接小部件
Sample Widget 1 连接到 Content List

运行时的小部件

配置并部署小部件后,小部件就处于运行时模式,并可搜索。在小部件样例中,输入公司名称,并单击 Submit 将负载发送到 Content list。Content List 小部件根据传入的 ID 获取已发行文档列表,并显示文档和附加属性,如图 7 所示。

图 7. 显示搜索结果
屏幕截图: Sample Widget 1 表单在顶部,Content list 包含文档标题、公司名称等等

Change Search 事件是 ECM Widgets 4.5.2 发行版中的一项新功能。它是存储搜索功能的扩展。在 ECM Widgets 4.5.1 发行版中,Content List 小部件只能基于预先配置的存储搜索 URL 进行搜索。使用 4.5.2 发行版中的 Change Search 特性,Content List 小部件可以使用负载来动态构造一个存储搜索 URL 并运行新的搜索。

场景

在此样例场景中,业务分析员在 Content Engine 中定义了几个存储搜索,并想要使用它们在 Content List 小部件中动态搜索文档。业务分析员将创建一个小部件,通过发送 com.ibm.ecmwidgets.ce.ReceiveStoredSearch 事件将存储搜索 URL 参数传到 Content List 小部件。

com.ibm.ecmwidgets.ce.ReceiveStoredSearch 事件是 Content List 小部件的新的内部连接事件。该事件可以将存储搜索的 vsId、releaseId 和 ObjectStore 名称作为其负载。Content List 小部件会在接收事件后弹出一个新的存储搜索列表。清单 8 显示的是该场景的 StoredSearch 负载定义。

清单 8. StoredSearch 负载定义
<iw:payloadDef name="StoredSearch">
        <iw:payloadDef name="version" type="string" defaultValue="" 
        description="Version information"/>
        <iw:payloadDef name="vsId" type="string" defaultValue="" 
        description="Version Series ID"/>      
        <iw:payloadDef name="objectStoreName" type="string" defaultValue="" 
        description="Object Store Name"/>
</iw:payloadDef>
<iw:event id="Receive Stored Search" handled="true" 
onEvent="handleReceiveStoredSearch" eventDescName="ReceiveStoredSearchDescription"/>
<iw:eventDescription id="ReceiveStoredSearchDescription" payloadType="StoredSearch" 
description="" lang="en"/>

ReceiveStoredSearch 事件的运行方式与存储搜索事件一样。要满足以下 5 个条件,新搜索才能正常运行。

  • 事件必须手工连接。如果没有事件连接,Content List 小部件将会使用配置面板中的存储搜索 URL。
  • 如果事件已连接,已接收到负载,但负载不是 StoredSearch 负载,Content List 小部件将使用已配置的存储搜索 URL。
  • 如果事件已连接,并接收到有效的负载,Content List 小部件将用接收到的存储搜索参数弹出列表。即使保存的搜索 URL 已经配置,列表还会被替换。
  • 接收的事件数据会一直保留,直到用户退出或刷新页面。刷新或重新登录操作以后,Content List 小部件会切换回使用配置 URL,直到小部件接收到下一个带有有效负载的事件。
  • 当 Content List 小部件使用传入的存储搜索参数,它还会处理 Receive Search Values 事件并使用负载替换接收到的存储搜索的搜索条件。

场景小部件代码样例

该小部件样例演示了如何创建一个小部件来发布 com.ibm.ecmwidgets.ce.ReceiveStoredSearch 事件,以及如何在运行时传入一个存储搜索。配置样例也演示了如何利用 com.ibm.ecmwidgets.ce.ReceiveStoredSearch 和 Receive Search Values 事件来更改接收到的存储搜索事件的搜索条件。

SampleWidget2 有三个输入字段用来传递预定义存储搜索的信息。此信息包括版本系列 ID、版本、对象存储名,如清单 9 中 XML 所示。

清单 9. SampleWidget2.xml
<iw:iwidget name="SampleWidget2" xmlns:iw="http://www.ibm.com/xmlns/prod/iWidget" 
iScope="com.ibm.im.ecmwidgets.sample.SampleWidget2" allowInstanceContent="true" 
supportedModes="view" mode="view">
	<iw:resource uri="SampleWidget2.js"/>
	
	<iw:event id="Send Payload" published="true" eventDescName="SendPayload"/>
	<iw:eventDescription id="SendPayload" payloadType="StoredSearch" description=""
	lang="en"/>
	<iw:payloadDef name="StoredSearch">
		<iw:payloadDef name="version" type="string" defaultValue="" 
		description="Version information"/>
		<iw:payloadDef name="vsId" type="string" defaultValue="" 
		description="Version Series ID"/>
		<iw:payloadDef name="objectStoreName" type="string" defaultValue="" 
		description="Object Store Name"/>
	</iw:payloadDef>
	
	<iw:content mode="view">
        <![CDATA[
		<div id="_IWID_view">
			<b>Version information:</b>&nbsp;&nbsp;
			<input dojo.Type="dijit.form.TextBox" id="version" 
			style="60%">&nbsp;&nbsp;<br>
			<b>Version Series ID:</b>&nbsp;&nbsp;
			<input dojo.Type="dijit.form.TextBox" id="vsId" style="60%">
			&nbsp;&nbsp;<br>
			<b>Object Store Name:</b>&nbsp;&nbsp;
			<input dojo.Type="dijit.form.TextBox" id="objectStoreName" 
			style="60%">&nbsp;&nbsp;<br>
			<input type="button" dojo.Type="dijit.form.Button" 
			id="mybutton" name="submit" value="Submit"/>
		</div>
      	]]>
    </iw:content>
    <iw:content mode="edit">
        <![CDATA[
		<div id="_IWID_edit"></div>
      	]]>
    </iw:content>
</iw:iwidget>

清单 10 显示的是该场景样例的 SampleWidget2.js 代码。

清单 10. SampleWidget2.js
dojo.require("dojo._base.xhr");
dojo.require("dijit.form.TextBox");
dojo.require("dijit.form.Button");

dojo.provide("com.ibm.im.ecmwidgets.sample.SampleWidget2");

dojo.declare("com.ibm.im.ecmwidgets.sample.SampleWidget2", null, {

	onLoad: function() {
		var button = dojo.byId("mybutton");
		dojo.connect(button, "onclick", dojo.hitch(this, this.SendEvent));
    },

	SendEvent: function(){
	   	var version = dojo.byId("version").value;
		var vsId = dojo.byId("vsId").value;
		var objectStoreName = dojo.byId("objectStoreName").value;
		this.handle(version, vsId, objectStoreName);
    },
	
	handle: function(version, vsId, objectStoreName) {
		var payload = {"StoredSearch":{"version": version, "vsId" : vsId, 
		"objectStoreName":objectStoreName}};
		this.iContext.iEvents.fireEvent("Send Payload", "StoredSearch", payload);
	}
});

配置并部署小部件的 Change Search 事件

通过以下步骤在 SampleWidget2 中配置和部署小部件的 Change Search 事件。

  1. 以 EAR 文件形式构建 web 应用程序源。
  2. 将 EAR 文件、目录文件和终端文件打包成 ZIP 文件。catalog_SampleWidget2.xml 和 SampleWidget2Endpoints.xml 是用来提供在 IBM WebSphere Business Space 7 中注册小部件信息的。请注意,目录文件的名称必须以前缀 catalog_ 开头。
  3. 在 Windows® 命令窗口中用 IBM WebSphere Business Space 7 命令来部署小部件。
  4. 重启 IBM WebSphere Application 服务器。
  5. 将小部件添加到 Content List 小部件和 In-basket 小部件的页面中。
  6. 将 In-basket 小部件的 Row Selecsele事件连接到 Content List 小部件的 Search with Work Item 事件。
  7. 将样例小部件的 Send Payload 事件连接到 Content List 小部件的 Change Search 事件,如图 8 所示。
图 8. Content List 连接到 In-basket 和样例小部件
In-basket 和 Sample Widget 2 连接了 Content List
  1. 在 Content List 小部件配置面板,选中 Stored search 单选按钮,这表示 Content List 小部件将会在能接收 Change Search 和 Search with Work Item 事件的模式下工作,如图 9 所示。Search with Work Item 事件在 ECM Widgets 4.5.1 中是 Receive Work Item 事件(见 参考资料 中更多细节信息)。
图 9. Content List 小部件的 Stored search 模式
屏幕截图:Stored Search 单选按钮被选中,指示每页显示 15 项
  1. 在 SampleWidget2 中,输入预定义存储搜索的信息,单击 Submit。Content List 小部件根据存储搜索获取文档列表。在此样例场景中,预定义的存储搜索根据 CompanyName 获取文档,如图 10 所示。
图 10. 在 SampleWidget2 中运行 Send Payload 事件
屏幕截图: SampleWidget2 中,Submit 高亮显示,Content List 弹出文档
  1. 在 In-basket 小部件中,选择一个工作项,例如 CompanyName 为 IBM 的工作项。Content List 小部件将搜索条件替换成 CompanyName equals IBM 并取得相应的文档,如图 11 所示。
图 11. 运行 In-basket 小部件的 Row Seleselec 事件
屏幕截图:Inbasket 中 IBM 高亮显示,SampleWidget2 中 Submit 高亮显示,Content List 弹出 IBM 文档

结束语

这是四部分系列文章中的第二篇,介绍了 IBM ECM Widgets 4.5.2 新的小部件事件。本文重点讲解了 Content List 小部件的新的 Displaying Documents 事件和 Changing Search 事件,描述了这些新事件的设计意图,以及如何利用它们为您的业务增加价值。

致谢

感谢 Simon Chu 审阅本文。 他是一位 IBM Master Inventor,也是一位伟大的导师。


下载

描述名字大小
Sample widget 1 代码SampleWidget1.zip5KB
Sample widget 2 代码SampleWidget2.zip4KB

参考资料

学习

获得产品和技术

讨论

条评论

developerWorks: 登录

标有星(*)号的字段是必填字段。


需要一个 IBM ID?
忘记 IBM ID?


忘记密码?
更改您的密码

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件

 


在您首次登录 developerWorks 时,会为您创建一份个人概要。您的个人概要中的信息(您的姓名、国家/地区,以及公司名称)是公开显示的,而且会随着您发布的任何内容一起显示,除非您选择隐藏您的公司名称。您可以随时更新您的 IBM 帐户。

所有提交的信息确保安全。

选择您的昵称



当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

标有星(*)号的字段是必填字段。

(昵称长度在 3 至 31 个字符之间)

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

 


所有提交的信息确保安全。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=Information Management, Java technology
ArticleID=606654
ArticleTitle=使用 IBM ECM Widgets 集成第三方小部件,第 2 部分: 使用 Content List 小部件显示文档,更改搜索事件
publish-date=01062011