跳转到主要内容

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

当您初次登录到 developerWorks 时,将会为您创建一份概要信息。您在 developerWorks 概要信息中选择公开的信息将公开显示给其他人,但您可以随时修改这些信息的显示状态。您的姓名(除非选择隐藏)和昵称将和您在 developerWorks 发布的内容一同显示。

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

  • 关闭 [x]

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

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

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

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

  • 关闭 [x]

使用 IBM ECM Widgets 构建 FileNet BPM 应用程序,第 3 部分: 使用第三方小部件扩展 ECM Widgets

Xin Yu Zhou, 软件工程师, EMC
Xin Zhou 的照片
Xin Yu Zhou 是 IBM China Software Development Lab (CSDL) 的一名软件工程师。他负责 IBM Information Management 的 IBM FileNet 产品开发方面的工作。
Shao Hong Xu, 软件工程师, EMC
Shao Hung Xu 的照片
Shao Hong Xu 是 IBM China Software Development Lab (CSDL) 的一名软件工程师。他在设计 IBM FileNet 解决方案,基于 Dojo 开发 Javascript 以及调优 Web 客户端性能方面有着丰富的经验。

简介: 利用 IBM Enterprise Content Management Widgets (ECM Widgets),业务分析师能够轻松地设计并创建能够满足业务需求的新型企业应用程序。ECM Widgets 应用程序可提供丰富的与第三方小部件进行通信的用户接口。业务分析师能够创建自己的小部件或使用现有的小部件与 ECM Widgets 连接,从而获得更大的业务价值。本文是此系列的第三部分也是最后一部分,为您展示 IBM iWidget 的事件机制、ECM Widgets 的事件框架以及如何开发一种结合第三方小部件和 ECM Widgets 的应用程序。

查看本系列更多内容

发布日期: 2010 年 1 月 25 日
级别: 中级 其他语言版本: 英文
访问情况 : 1394 次浏览
评论: 


简介

IBM Enterprise Content Management Widgets (ECM Widgets) 是一个基于 mashup 技术的新的 Web 2.0 应用程序。ECM Widgets 是 IBM Agile ECM FileNet® 产品组合的一个重要组件。它提供了一组小部件供业务设计人员、分析师、IT 专家和最终用户使用。ECM Widgets 应用程序高度灵活、易于使用、便于扩展。用户可以快速构建 FileNet 业务流程管理 (BPM) 解决方案,可以通过拖放小部件轻松配置解决方案。ECM Widgets 可以有效降低实现企业业务流程管理的成本。

ECM widgets 遵守 IBM iWidget Specification Version 1.0,并且在 IBM mashup 平台上运行。具体来说,ECM Widgets 4.5.1 在 IBM WebSphere Business Space 6.2 上运行。小部件之间的内部通信是一种重要的功能,支持各种小部件协同工作,从而实现复杂场景并获得更大的业务价值。按照 IBM iWidget 规范,小部件使用事件来通信。ECM Widgets 充分利用了此机制,并提供了一套灵活的接口,从而与第三方小部件进行通信。业务分析师能够创建自己的小部件或使用现有的小部件与 ECM 小部件通信,以满足他们的业务需求。

了解小部件通信

小部件使用事件进行通信。发送小部件发布一个事件,接收小部件接受并处理事件。事件的负载(payload)承载着在发送小部件和接收小部件之间传送的消息,如图 1 所示。


图 1. 小部件通信
小部件 A 包含一个已发布的事件,小部件 B 包含一个已处理的事件,小部件 A 的已发布事件指向小部件 B

一个负载就是一个承载者,将数据从已发布的事件传送到接收事件,并且由负载定义来确定,例如 payloadDef。一个负载可以:

  • 是主要的元素类型,例如字符串或数字。
  • 拥有由其它负载组成的复杂结构。
  • 像对象一样运行。
  • 被声明为 any,表示它可以包含任何数据类型。

事件与负载都在小部件定义 XML 文件中被定义。例如,假设您有两个小部件。Book List Widget 显示了一个书籍清单。 Book Details Widget 根据书籍序列号显示销售趋势和细节或者负载传递的其他信息。Book 负载由其他 3 个简单的 string 类型负载定义组成:sn名称作者。XML 中的示例事件和负载定义如清单 1 和清单 2 所示。请参阅 下载 查看本文所有的清单。


清单 1. Book List Widget
				
<iw:payloadDef name="Book">
    <iw:payloadDef name="sn" type="string" defaultValue="" 
    description="The serial number of a book"/>
    <iw:payloadDef name="name" type="string" defaultValue="" 
    description="The name of a book"/>
    <iw:payloadDef name="author" type="string" defaultValue="" 
    description="The author name of a book"/>
</iw:payloadDef>

<iw:event id="Send Book Info" published="true" 
eventDescName="SendBookInfoDescription"/>

<iw:eventDescription id=" SendBookInfoDescription" payloadType="Book" 
description="" lang="en"/>


清单 2. Book Details Widget
				
<iw:payloadDef name="Book">
    <iw:payloadDef name="sn" type="string" defaultValue="" 
    description="The serial number of a book"/>
    <iw:payloadDef name="name" type="string" defaultValue="" 
    description="The name of a book "/>
    <iw:payloadDef name="author" type="string" defaultValue="" 
    description="The author of a book"/>
</iw:payloadDef>
<iw:event id="Receive Book Info" handled="true" onEvent="handleReceiveBookInfo" 
eventDescName="ReceiveBookInfoDescription"/>
<iw:eventDescription id="ReceiveBookInfoDescription" payloadType="Book" 
description="" lang="en"/>

事件定义包含两个部分:事件和 eventDescription。事件可以是已发布事件或接收中的事件,这些事件通过其定义中的已公布已处理 的属性来表示。当您定义负载和事件时,事件的 eventDescName 属性引用 eventDescription 的 id 属性。eventDescription 的 payloadType 属性引用 payloadDef 的 name 属性。这些引用将所有的部分连接成一个完整的定义。图 2 展示了负载定义与事件定义之间的关系。


图 2. 小部件事件与负载
iw:event 包含 id、eventDescName 和 published/handled,iw:event 指向 iw:eventDescription,后者包含 id、payload Type 和 description,iw:eventDescription 指向 iw:payloadDef,后者包含 name、type 和 defaultValue

接收事件定义它的处理功能。清单 2 中的 Receive Book Info 事件由 handleReceiveBookInfo 处理,后者是一个 JavaScript 函数。该函数必须在小部件代码中定义。

IBM WebSphere® Business Space 在运行时使用一种名为 wiring 的进程,提供了一种相互连接小部件事件的便利方法。图 3 展示了 IBM WebSphere Business Space 6.2 中连接用户界面的屏幕截图。


图 3. IBM WebSphere Business Space 6.2 中小部件的连接界面
屏幕截图:Widget Wiring window showing wires for Book Details                     and a flow from Book List to Send SN to Receive SN to Book Details

当 wiring 进程完成时,已发布的事件和处理事件就被连接在一起。


使用 ECM Widgets 事件框架和接口

正如 使用 IBM ECM Widgets 构建 FileNet BPM 应用程序,第 1 部分:IBM Enterprise Content Management Widgets 简介 所描述的,ECM Widgets 提供了包含收文篮、步骤完成、header、附件和工作数据在内的完整小部件套件,用以创建 BPM 解决方案。所有这些小部件都符合 iWidget 规范。每个小部件都可提供进行内部通信或与第三方小部件通信的事件接口。

大部分 ECM Widgets 事件 ID 都遵循一致的命名惯例:已发布事件命名为 Send{Payload Type},而已处理事件命名为 Receive{Payload Type}。 在典型的 BPM 解决方案中,收文篮小部件通过已发布的事件(Send Work Item Id)与步骤完成小部件相连,通过已处理事件(Receive Work Item Id)与 WorkItemId 负载相连。在另一个例子中,步骤完成小部件可能会通过以下已公布事件之一,与工作数据小部件、带有 WorkItem 负载的附件小部件相连:

  • Send Work Item
  • Send Save Work Item
  • Send Close Work Item

使用相应的已处理事件:

  • Receive Work Item
  • Receive Save Work Item
  • Receive Close Work Item

大部分来自 ECM Widgets 的已发布和已处理的事件支持自动连接,这就意味着不需要对这些事件使用手动连接,包括上文中提到的场景。虽然这些事件支持在 ECM Widgets 之间自动连接,但是它们也可以被手动连接到第三方小部件。某些事件专为第三方集成而提供,例如在内容列表小部件中的 Receive Search Values 事件,以及收文篮小部件中的 Receive Role 事件,都可接收来自第三方小部件的负载。

图 4 展示了 ECM Widgets 4.5.1 版本中小部件之间使用事件进行通信,包括已发布的和接收的事件和负载。


图 4. ECM Widgets 4.5.1 的事件框架
工作流

探索示例小部件

此部分展示了如何开发示例小部件并实现示例小部件与 ECM Widgets 的通信。示例小部件包含发布事件和已处理的事件。它通过获得来自收文篮的负载并将它们发送给内容列表,将 ECM Widgets 4.5.1 版本的收文篮小部件和内容列表小部件连接起来。

在 ECM Widgets 4.5.1 中,收文篮小部件有一系列名为 Send {field name} 的已发布事件,它们根据收文篮小部件显示的列动态生成。假设您有一个工作流定义,其字段能够提供例如人员姓名、年份等信息。在工作流启动之后,收文篮小部件就能够在它的列中显示这些字段,然后提供动态事件将每个字段的值发送到一个接收小部件。

内容列表小部件支持您使用 IBM FileNet Content Engine 中的搜索功能来获取文档列表。如果内容列表小部件与另一个小部件的发布事件相连,那么内容列表小部件可通过用户输入的搜索标准来进行搜索。

为了充分利用这些功能,示例小部件被称为 Paper Seeker。该部件有两种功能:

  • 获得并显示来自工作流(使用收文篮小部件的发布事件)的人名及年份信息。

  • 提供一个按钮,将信息发送到内容列表小部件作为输入。

通常情况下,每个小部件都有 XML 文件和 JavaScript 文件,提供描述其行为的定义。XML 由 4 个重要部分组成:

  • 供小部件参考的资源文件
  • 负载定义
  • 事件与事件描述定义
  • 小部件的内容

清单 3 展示了小部件的 XML 编码,包括解释细节的注释(还可参阅 下载)。


清单 3. PaperSeeker.xml
				
<iw:iwidget name="PaperSeeker" xmlns:iw="http://www.ibm.com/xmlns/prod/iWidget"
iScope="sample.widget.PaperSeeker" allowInstanceContent="true" 
supportedModes="view" mode="view">
    <!-- Resource references -->
    <iw:resource uri="PaperSeeker.js"/>

    <!-- Payload definition section -->
    <iw:payloadDef name="Author" type="string" defaultValue="" description=""/>
    <iw:payloadDef name="PublishYear" type="number" defaultValue="" 
    description=""/>

    <iw:payloadDef name="PaperInfo">
      <iw:payloadDef name="Author" type="string" defaultValue="" description=""/>
      <iw:payloadDef name="PublishYear" type="number" defaultValue="" 
      description=""/>
    </iw:payloadDef>   
    
    <!-- Event definition section -->
    <!-- Receive Author is used to wire with in-basket to 
    get a person's name as an Author. The handleReceiveAuthor method in PaperSeeker.js 
    will handle the payload passed in.-->
    <iw:event id="Receive Author" handled="true" 
    onEvent="handleReceiveAuthor" 
    eventDescName="ReceiveAuthorDescription" />
    <iw:eventDescription id="ReceiveAuthorDescription" 
    payloadType="String" description="Receive Author event" lang="en"/>
    
    <!-- Receive Publish Year is used to wire with in-basket to get the year 
    information to populate Publish Year. The handleReceivePublishYear method in 
    PaperSeeker.js will handle the payload passed in.-->
    <iw:event id="Receive Publish Year" handled="true" 
    onEvent="handleReceivePublishYear" 
    eventDescName="ReceivePublishYearDescription" />
    <iw:eventDescription id="ReceivePublishYearDescription" 
    payloadType="String" description="Receive Publish Year event" lang="en"/>

    <!-- Send Paper Info is used to wire with Content List to send the 
    PaperInfo payload as the input -->
    <iw:event id="Send Paper Info" published="true"
    eventDescName="SendPaperInfoDescription"/>
    <iw:eventDescription id="SendPaperInfoDescription" 
    payloadType="PaperInfo" description="Send PaperInfo event" lang="en"/>

    <!-- Initial widget content -->
    <!-- _IWID_ is a placeholder to be replaced with the actual ID dynamically to 
    avoid ID duplication -->
    <iw:content mode="view">
      <![CDATA[
        <div id="_IWID_view">
            <div><b>Author: </b><input type="text" 
            id="_IWID_author"><div>
            <div><b>Publish Year: </b><input type="text" 
            id="_IWID_publishYear"><div>
            <input type="button" id="_IWID_seeker" name="seeker" value="Seek Paper" 
            onclick="iContext.iScope().seekPaper()"/>
        </div>
      ]]>
    </iw:content>
</iw:iwidget>

JavaScript 文件的功能是定义小部件的行为,包括发布或接收事件。IBM mashup 平台使用的是 dojo class 格式。清单 4 中的 JavaScript 文件展示了这些功能。(还可参阅 下载)。


清单 4. PaperSeeker.js
				
dojo.provide("sample.widget.PaperSeeker");

dojo.declare("sample.widget.PaperSeeker", null, {

    onLoad: function() {
        //this.iContext.widgetId is generated by the Mashup container at runtime
        this.domID = "_" + this.iContext.widgetId + "_";
    },

    //to handle Receive Author event
    //populate the author field with payload received
    handleReceiveAuthor: function(iEvent) {
        if(iEvent.payload){
            dojo.byId(this.domID + "author").value = iEvent.payload;
        }
    },

    //to handle Receive Publish Year event
    //populate the publishYear field with payload received
    handleReceivePublishYear: function(iEvent) {
        if(iEvent.payload){
            dojo.byId(this.domID + "publishYear").value = iEvent.payload;
        }    
    },
    
    //invoke when the button is pressed
    //send Paper Info event will be fired with a proper payload
    seekPaper: function(){
        var author = dojo.byId(this.domID + "author").value;
        var publishYear = dojo.byId(this.domID + "publishYear").value;
        var payload = [{"name": "Author", "value": author},
            {"name": "PublishYear", "value": publishYear}];
        this.iContext.iEvents.fireEvent("Send Paper Info", "any", payload);
    }
});


在 IBM WebSphere Business Space 6.2 中部署并连接小部件

此部分描述如何部署、连接并注册小部件。

注册示例小部件

要使示例小部件适用于 WebSphere Business Space 6.2 服务器,请完成以下步骤。

  1. 利用 Business Space 来注册示例小部件,如图 5 所示。

图 5. 注册小部件的定义
屏幕截图:BSpaceManager.war\registryData 目录,选择 DWSampleWidgets.xml
  1. 准备一个清单 5 所示的注册表文件(还可参阅 下载)。

清单 5. 注册表文件 DWSampleWidgets.xml
				
<tns:BusinessSpaceRegistry xmlns:tns="http://com.ibm.bspace/BusinessSpaceRegistry" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://com.ibm.bspace/BusinessSpaceRegistry 
BusinessSpaceRegistry.xsd ">
  <tns:Endpoint>
    <tns:id>sample.widget.RootId</tns:id>
    <tns:type>sample.widget.RootId</tns:type>
    <tns:version>1.0.0.0</tns:version>
    <tns:url>DWSampleWidgets/</tns:url>
    <tns:description></tns:description>
  </tns:Endpoint>
  <tns:Category>
    <tns:id>sample.widget.Category</tns:id>
    <tns:name>DW Sample Widgets</tns:name>
    <tns:description></tns:description>
    <tns:tooltip></tns:tooltip>
    <tns:order>99</tns:order>
  </tns:Category>
   <tns:Widget>
    <tns:id>sample.widget.PaperSeeker</tns:id>
    <tns:version>1.0.0.0</tns:version>
    <tns:name>Paper Seeker</tns:name>
    <tns:type>{com.ibm.bspace}iWidget</tns:type>
    <tns:description>A widget to seek papers.</tns:description>
    <tns:tooltip>Paper Seeker</tns:tooltip>
    <tns:categoryId>sample.widget.Category</tns:categoryId>
    <tns:widgetEndpointId>sample.widget.RootId</tns:widgetEndpointId>
    <tns:url>src/sample/widget/PaperSeeker.xml</tns:url>
    <tns:helpUrl></tns:helpUrl>
    <tns:iconUrl></tns:iconUrl>
    <tns:previewUrl></tns:previewUrl>
    <tns:previewThumbnailUrl></tns:previewThumbnailUrl>
    <tns:attachable/>
    <tns:owner></tns:owner>
    <tns:email></tns:email>
    <tns:serviceEndpointRef required="true">
      <tns:name>serviceUrlRoot</tns:name>
      <tns:refId>sample.widget.RootId</tns:refId>
      <tns:refVersion>1.0.0.0</tns:refVersion>
    </tns:serviceEndpointRef>
  </tns:Widget>
</tns:BusinessSpaceRegistry>

  1. 将注册表文件保存到 {Business Space deploy folder}\registryData 文件夹中,如图 6 所示。

图 6. 部署
屏幕截图:DWSampleWidgets_war.ear/DWSampleWidgets.war/src/sample/widget 文件夹中的 PaperSeeker.js 和 PaperSeeker.xml 文件
  1. 将小部件代码打包到 war 文件,并部署在服务器上。新的小部件可用于 Business Space 环境,如图 7 所示。

图 7. 成功注册小部件
屏幕截图:窗口展示 DW Sample Widgets,现在包含 Paper Seeker 小部件

配置收文篮小部件

在应用新的小部件之前,您需要配置收文篮小部件和内容列表小部件。请完成以下步骤。

  1. 使用 Process Designer 来定义一个包含名称和年份字段的工作流。在这里假设您已经为此示例创建了工作流。该工作流包含预定义的字段,如图 8 所示。

图 8. 预定义工作流字段
屏幕截图:Workflow Properties 窗口包含 Data Fields 选项卡,突出显示 Author string 字段和 PublishYear string 字段
  1. 利用 Process Configuration Console 中公开的两个字段来创建收文篮。(请参考 使用 IBM ECM Widgets 构建 FileNet BPM 应用程序,第 2 部分:构建业务流程管理解决方案 了解详细信息)。

  2. 创建应用程序空间或更新现有的应用程序空间,例如 DefaultApplication,在新的收文篮中定义一个角色。

  3. 配置 ECM Widgets 收文篮小部件,通过设置应用程序空间名称来显示新的收文篮小部件,如图 9 所示。

图 9. 应用应用程序空间
屏幕截图:In-basket 窗口与 Change Application Space 窗口重叠,并且 DefaultApplication 被输入到 Application                     Space Name 字段中
  1. 指定您定义的角色,如图 10 所示。

图 10. 应用角色
屏幕截图:In-basket 窗口,Indexer 被定义为角色

配置内容列表小部件

要对内容列表小部件进行配置,您需要利用 Search Designer 工具计划并定义一个 Workplace XT 存储搜索,并通过 Workplace XT 提供的存储搜索 URL 来配置内容列表小部件。一般来说,一个存储搜索拥有一个或多个搜索标准、结果列和其他设置。内容列表小部件能够利用预定义的搜索标准在存储搜索定义中执行,或者当它与一个发送方小部件相连时,可通过动态地替代可编辑的搜索标准来执行。

为了实现此功能,内容列表小部件提供了一个 Receive Search Values 事件。负载的格式是一系列键值。内容列表对负载进行解析,并使用键值与存储搜索标准进行比较。如果有匹配,内容列表使用键值来代替存储搜索中的预定义值。然后内容列表小部件户使用新的值来进行搜索。

例如,您在示例小部件中有一个已发布的负载:[{"name": "author", "value": "Mike Mahomet"}、{"name": "publishYear", "value": 2000}]。该负载代替了存储搜索中的 authorpublishYear 搜索标准。

完成下面这些步骤以配置示例内容列表小部件:

  1. 利用搜索标准在 Search Designer 中定义一个存储搜索,如图 11 所示。

图 11. 存储搜索的定义
屏幕截图:Workplace XT Search Designer 窗口突出显示 Stored                     Search dropdown 字段和 Search Criteria 选项卡。Author 被设置为类似 a 的值,PublishYear 被设置为值 1。
  1. 访问 Workplace XT,并确定存储搜索定义的内容 URL。

  2. 将超链接复制到内容列表小部件配置面板中,如图 12 所示。

图 12. 配置内容列表小部件
屏幕截图:Content List 窗口,在 URL Address 中为 Stored Search 字段包含 Workplace XT URL
  1. 保存信息。内容列表小部件现在可以使用默认标准进行搜索。

小部件连接

完成以下步骤将小部件连接到一起。

  1. 将新的小部件拖放到相同的页面,作为现有的收文篮小部件和内容列表小部件。

  2. 选择 Widget Wiring,如图 13 所示。

图 13. 小部件连接
屏幕截图:Business Space window 窗口包含 DW                     Example 选项卡,下拉菜单中突出显示 Widget Wiring
  1. 在 Widget Wiring 窗口,将收文篮的 Send Author 事件与示例的 Receive Author 事件相连,如图 14 所示。

  2. 将收文篮的 Send PublishYear 事件与示例 Receive Publish Year 事件相连,如图 14 所示。

图 14. 连接 1
收文篮框,将 Send Author 和 Receive Author 指向 Paper Seeker,收文篮框还将 PublishYear 和 Publish Year 指向 Paper Seeker
  1. 将示例 Send Paper Info 事件与内容列表的 Receive Search Values 事件相连,如图 15 所示。

图 15. 连接 2
Paper Seeker 框,将 Send Paper Info 和 Search Values 指向 Content List 框

现在小部件已经被连接。

运行示例

完成以下步骤以运行示例:

  1. 通过单击操作,在收文篮里选择一个行。您可以看到 Paper Seeker 示例在屏幕上显示 Author 和 PublishYear 值。

  2. 单击 Seek Paper 按钮。利用 Paper Seeker 输入的值来执行搜索。结果在内容列表小部件中显示,如图 16 所示。

图 16. 运行示例
屏幕截图:收文篮显示 Publish 选项卡以及 Papers 1 和 3 的细节。还显示 Paper Seeker 窗口,其中 Mike 为作者,1999 为 Publish Year。

结束语

本文是由三部分组成的介绍 ECM Widgets 的系列文章的最后一部分。在此部分中,您得到了有关事件机制、IBM iWidget 规范以及 ECM Widgets 事件接口的总体概述。您还通过示例了解了如何编写一个小部件,以及如何与 ECM Widgets 相连接以获得更多价值。

致谢

感谢以下朋友审校本文:

  • Lauren Mayes,ECM Widgets 架构师
  • Ming Liang Guo,ECM Widgets 开发团队主管
  • Simon Chu,IBM Master Inventor


下载

描述名字大小下载方法
本文的样例小部件代码Sample.zip5KBHTTP

关于下载方法的信息


参考资料

学习

讨论

作者简介

Xin Zhou 的照片

Xin Yu Zhou 是 IBM China Software Development Lab (CSDL) 的一名软件工程师。他负责 IBM Information Management 的 IBM FileNet 产品开发方面的工作。

Shao Hung Xu 的照片

Shao Hong Xu 是 IBM China Software Development Lab (CSDL) 的一名软件工程师。他在设计 IBM FileNet 解决方案,基于 Dojo 开发 Javascript 以及调优 Web 客户端性能方面有着丰富的经验。

关于报告滥用的帮助

报告滥用

谢谢! 此内容已经标识给管理员注意。


关于报告滥用的帮助

报告滥用

报告滥用提交失败。 请稍后重试。


developerWorks:登录


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


忘记密码?
更改您的密码

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

 


当您初次登录到 developerWorks 时,将会为您创建一份概要信息。您在 developerWorks 概要信息中选择公开的信息将公开显示给其他人,但您可以随时修改这些信息的显示状态。您的姓名(除非选择隐藏)和昵称将和您在 developerWorks 发布的内容一同显示。

请选择您的昵称:

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

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

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


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

 


为本文评分

评论

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=Information Management
ArticleID=464049
ArticleTitle=使用 IBM ECM Widgets 构建 FileNet BPM 应用程序,第 3 部分: 使用第三方小部件扩展 ECM Widgets
publish-date=01252010
author1-email=zhouxinyu@cn.ibm.com
author1-email-cc=
author2-email=xushaoh@cn.ibm.com
author2-email-cc=

标签

Help
使用 搜索 文本框在 My developerWorks 中查找包含该标签的所有内容。

使用 滑动条 调节标签的数量。

热门标签 显示了特定专区最受欢迎的标签(例如 Java technology,Linux,WebSphere)。

我的标签 显示了特定专区您标记的标签(例如 Java technology,Linux,WebSphere)。

使用搜索文本框在 My developerWorks 中查找包含该标签的所有内容。热门标签 显示了特定专区最受欢迎的标签(例如 Java technology,Linux,WebSphere)。我的标签 显示了特定专区您标记的标签(例如 Java technology,Linux,WebSphere)。