跳转到主要内容

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

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

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

  • 关闭 [x]

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

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

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

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

  • 关闭 [x]

运用IBM Application Portlet Builder构建SAP Portlet

Fetchi Chen (fchen@us.ibm.com), 顾问,IBM Software Services for WebSphere, IBM, 德克萨斯州奥斯汀市
Fetchi Chen是位于IBM Austin的IBM Software Services for WebSphere的顾问。他已经有超过20年的软件开发经验。他设计了许多系统软件,并且为许多不同行业的公司提供过解决方案。他是IBM认证的WebSphere Portal解决方案开发人员,还是Sun认证的J2EE Enterprise Architect。Fetchi在Penn State大学获得硕士学位。您可以通过 fchen@us.ibm.com与他联系。

简介: 将现有的企业应用(比如SAP®、PeopleSoft®和Siebel®)移植到portlet,成功与否取决于创建和部署这些portlet的速度。

发布日期: 2003 年 10 月 01 日
级别: 初级
访问情况 : 925 次浏览
评论: 


© IBM公司版权所有,2003年。保留所有权利。

引言

将现有的企业应用(比如SAP®、PeopleSoft®和Siebel®)移植到portlet,成功与否取决于创建和部署这些portlet的速度。使用新的IBM Application PortletBuilder,您可以创建与企业应用功能相当的portlet,而且毫不费劲。

本文讲述如何运用专为SAP而设计的IBM Application Portlet Builder(以下简称为Portlet Builder)来创建portlet以访问SAP。在学完了本文的三个示例之后,您将会熟悉PortletBuilder的使用。首先,您将回顾使用PortletBuilder提供的XML模板来创建一个简单的Human Resources portlet;接着,您将一步一步地了解为Material Management portlet创建自己的XML文件以认可购买请求的过程;最后,您将看到如何快速地构建两个SAP portlet以开发Click-to-Action功能。

本文面向的读者应该对portal管理有一定了解,并具有一些SAP的基础知识。Portlet Builder是WebSphere® Portal Application Integrator的一个组件,您可以从 WebSphere Portlet Catalog下载。


安装IBM Application Portlet Builder for SAP

关于Portlet Builder的详细安装说明在WebSphere Developer Domain WebSphere PortalZone的 文档链接中。您可以找到SAP的具体配置说明。为了直观起见,图1显示了SAP Business ObjectBuilder,图2显示了配置屏幕(对于字段的描述也可以在文档中找到)。

图1. SAP Business Object Builder页面
SAP Business Object Builder页面

图2. 参数配置
参数配置


创建Human Resources portlet

您将要创建的SAP Human Resources portlet是CostCenter的List Employee。您将根据搜索条件显示雇员的列表。 

  1. 在SAP Business Object Builder页面上单击 Create new portlet按钮。
  2. 入MyHRPortlet 作为portlet的名称,然后输入适合于您的环境的连接信息。认证信息可以现在添加,也可以稍后再添加,这取决于您所选择的选项,是否提示用户输入 ID/Password,或是否提供UserID/Password。
    图 3. 连接信息和Portlet名称
    连接信息和Portlet名称
  3. 单击 Next按钮, 然后单击 Create new business object按钮,以创建业务对象。一个portlet可以包含多个业务对象。为了简单起见,我们将只在本例中创建一个portlet。
    图 4. 创建新的业务对象
    创建新的业务对象
  4. 从列表中选择一个业务对象XML文件。XML文件为构建业务对象提供配置信息,包括BAPI(Business Application Programming Interface)、输入参数、输出参数、视图信息和映射的Java™类。在本例中,选择 SAPListEmployeesByCostCenter.xml
    图 5. 选择业务对象XML文件
    Select Business Object XML File
  5. 单击 Next按钮,然后选择 Allowed actions => Search。在本例中,我们只想列出雇员的信息,因此, UpdateCreateDelete都不需要。
    图 6. 选择Action
    Select Business Object XML File
  6. 单击 Next按钮以组成您自己的业务对象。选择业务对象所需要的字段。如果您想显示一个不同的列标题,可以改变 Display name的文本。 Field behaviour决定了每个字段的访问属性。 Summary显示了搜索后特定纪录的概述。 Searchable字段允许只有这些字段才可以用于搜索。可以用 TypeNamespace来使字段能够Click-to-Action。

    图7. 构建业务对象
    构建业务对象

  7. 单击 Next按钮,然后单击 Finish按钮,以完成整个过程。
    图8. 完成业务对象的构建
    完成业务对象的构建
  8. 以管理员用户的身份登录到Portal Server,以把 MyHRPortlet添加到页面中。
  9. 转到portlet页面,然后单击右上方角的 Edit按钮。
  10. 输入SAP User IDPassword
  11. 单击 Save按钮。
    图9. 输入SAP用户ID和密码
    SAP用户ID和密码
  12. 对于Cost Center,输入 1000。
  13. 单击 Search按钮以搜索雇员。

    图10. 通过Cost Center搜索雇员
    Search Employees by Cost Center

    搜索返回低于Cost Center 1000的8个雇员的信息摘要。

    图 11. 低于Cost Center 1000
    的雇员的列表
    通过Cost Center搜索雇员

  14. 选择一个雇员并显示其详细信息。
    图 12. 雇员的详细信息
    雇员的详细信息

构建Purchase Requisition Collective Approval portlet

可以用Portlet Builder创建包含SAP业务对象数据的XML文件来生成新的SAP portlet。要创建包含SAP业务对象数据的XML文件,您需要定义业务场景,确定SAPBAPI,并指定关键的导入和导出数据。本例介绍了创建一个portlet以使SAP用户能够认可Purchase Requisitions的必要步骤。

定义业务场景

您需要定义业务需求和场景用以创建一个新的portlet。典型的需求包括SAP功能域名称(比如,Material Management中的Purchase Requisition Approval)、用户输入数据、输出数据和预期的屏幕流。在这个场景中,您希望尚待认可的SAP购买请求显示在portal上,这样用户就可以发布个人的行式项目(lineitem)。如果需要的话,用户应该可以重新设置认可状态。SAP用于项目级认可的交易代码是 ME55

确定SAP BAPI

必须确定需要满足已定义的业务需求的BAPI。要检索SAP BAPI的详细信息,用户必须运行SAP中的交易代码BAPI。使用以下BAPI来实现为购买请求发布portlet定义的动作:

  • BAPI_REQUISITION_GETITEMSREL:集体显示尚待发布的行式项目
  • BAPI_REQUISITION_RELEASE:设置Release
  • BAPI_REQUISITION_RESET_RELEASE:重新设置Release

指定导入/导出数据

通过加进一些关键的信息,比如业务场景、BAPI名称、导入和导出数据以及交易数据行为(显示、更新、创建、删除等等),可以最终确定新的portlet规范。所提供的XML文件就是构建在这些规范的基础上的。Data Input

在本例中,允许用户在portlet中输入下列数据:

  • Release Code(发布代码)
  • Release Group(发布组别)

数据输出

这是应该显示在portlet上的数据,以供用户检查:

  • Requisition Number(请求单号)
  • Item Number(项目编号)
  • Document Type(文档类型)
  • Purchasing Group(购买组别)
  • Person Who Created the Object(创建对象的人员)
  • Requisitioner(请求者)
  • Requisition Date(请求日期)
  • Material Number(材料编号)
  • Description(描述)
  • Quantity(数量)
  • Unit of Measure(度量单位)
  • Price(价格)
  • Currency(货币)
  • Price Unit(价格单元)
  • Delivery Date(交付日期)
  • Account Assignment(指定帐户)
  • Plant(工厂)

构建Purchase Requisition Collective Approval XML文件

下面的XML文件包含SAP BAPI和Portlet Builder所需要的其他信息。

<?xml version="1.0" encoding="UTF-8"?>
 <sapcfg>
 <retrieve>
   <bapi name="BAPI_REQUISITION_GETITEMSREL" post="n" pre="n"/>
     <input>
        <field name="REL_GROUP"         ref="Release Group"/>
        <field name="REL_CODE"          ref="Release Code"/>
        <field name="ITEMS_FOR_RELEASE" ref="Display Mode" value="X"/>
     </input>
     <output>
       <table name="REQUISITION_ITEMS">
         <field name="PREQ_NO"    ref="Requisition Number"/>
         <field name="PREQ_ITEM"  ref="Item Number"/>
         <field name="DOC_TYPE"   ref="Document Type"/>
         <field name="PUR_GROUP"  ref="Purchasing Group"/>
         <field name="CREATED_BY" ref="Person Who Created the Object"/>
         <field name="PREQ_NAME"  ref="Requisitioner"/>
         <field name="PREQ_DATE"  ref="Requisition Date"/>
         <field name="MATERIAL"   ref="Material Number"/>
         <field name="SHORT_TEXT" ref="Description"/>
         <field name="QUANTITY"   ref="Quantity"/>
         <field name="UNIT"       ref="Unit of Measure"/>
         <field name="C_AMT_BAPI" ref="Price"/>
         <field name="CURRENCY"   ref="Currency"/>
         <field name="PRICE_UNIT" ref="Price Unit"/>
         <field name="DELIV_DATE" ref="Delivery Date"/>
         <field name="ACCTASSCAT" ref="Account Assignment Category"/>
         <field name="PLANT"      ref="Plant"/>
       </table>
    </output>
 </retrieve>  
 <udf_release>
   <bapi name="BAPI_REQUISITION_RELEASE" post="n" pre="n"/>
    <input>
         <field name="NUMBER"     ref="Requisition Number"/>
         <field name="REL_CODE"   ref="Release Code"/>
         <field name="ITEM"       ref="Item Number"/>      
    </input>
    <output>
      <field name="REL_STATUS_NEW" ref="Released"/>
    </output> 
    </udf_release>
    
 <udf_resetrelease>
   <bapi name="BAPI_REQUISITION_RESET_RELEASE" post="n" pre="n"/>
    <input>
         <field name="NUMBER"     ref="Requisition Number"/>
         <field name="REL_CODE"   ref="Release Code"/>
         <field name="ITEM"       ref="Item Number"/>            
    </input>
    <output>
      <field name="REL_STATUS_NEW" ref="Released"/>
    </output> 
 </udf_resetrelease>
 <mapping>
     <map name="Release Group" class="java.lang.String" inSummary="n" 
       isComputed="n" isEditable="n" isKey="y" isPadded="y" isPrimaryKey="n" 
       isRequired="n" isVisible="y" addSearchParamToBO="y"/> 
     <map name="Release Code"  class="java.lang.String" inSummary="n" 
       isComputed="n" isEditable="n" isKey="y" isPadded="n" isPrimaryKey="n" 
       isRequired="n" isVisible="y" addSearchParamToBO="y"/> 
     <map name="Display Mode"  class="java.lang.String" inSummary="n" 
       isComputed="n" isEditable="n" isKey="n" isPadded="n" isPrimaryKey="n" 
       isRequired="n" isVisible="n"/>
     <map name="Released" class="java.lang.String" inSummary="y" isComputed="n" 
       isEditable="n" isKey="n" isPadded="n" isPrimaryKey="n" isRequired="n" 
       isVisible="y"/> 
     <map name="Requisition Number" class="java.lang.String" inSummary="y" 
       isComputed="n" isEditable="n" isKey="n" isPadded="n" isPrimaryKey="y" 
       isRequired="n" isVisible="y"/>
     <map name="Item Number"  class="java.lang.String" inSummary="y" 
       isComputed="n" isEditable="n" isKey="n" isPadded="n" isPrimaryKey="y" 
       isRequired="n" isVisible="y"/>
     <map name="Document Type" class="java.lang.String" inSummary="y" 
       isComputed="n" isEditable="n" isKey="n" isPadded="n" isPrimaryKey="n" 
       isRequired="n" isVisible="y"/>  
     <map name="Purchasing Group" class="java.lang.String" inSummary="y" 
       isComputed="n" isEditable="n" isKey="n" isPadded="n" isPrimaryKey="n" 
       isRequired="n" isVisible="y"/>  
     <map name="Person who Created the Object" class="java.lang.String" 
       inSummary="y" isComputed="n" isEditable="n" isKey="n" isPadded="n" 
       isPrimaryKey="n" isRequired="n" isVisible="y"/> 
     <map name="Requisitioner"  class="java.lang.String" inSummary="y" 
       isComputed="n" isEditable="n" isKey="n" isPadded="n" isPrimaryKey="n" 
       isRequired="n" isVisible="y"/>  
     <map name="Requisition Date" 
       class="com.ibm.wps.portlets.businessobject.sap.types.SAPDate" 
       inSummary="y" isComputed="n" isEditable="n" isKey="n" isPadded="n" 
       isPrimaryKey="n" isRequired="n" isVisible="y"/> 
     <map name="Material number" class="java.lang.String" inSummary="y" 
       isComputed="n" isEditable="n" isKey="n" isPadded="n" isPrimaryKey="n" 
       isRequired="n" isVisible="y"/>  
     <map name="Description"  class="java.lang.String"   inSummary="y" 
       isComputed="n" isEditable="n" isKey="n" isPadded="n" isPrimaryKey="n" 
       isRequired="n" isVisible="y"/>  
     <map name="Quantity"  class="java.lang.String" inSummary="y" 
       isComputed="n" isEditable="n" isKey="n" isPadded="n" isPrimaryKey="n" 
       isRequired="n" isVisible="y"/>  
     <map name="Unit of Measure"  class="java.lang.String" inSummary="y" 
       isComputed="n" isEditable="n" isKey="n" isPadded="n" isPrimaryKey="n" 
       isRequired="n" isVisible="y"/>         
     <map name="Price"  class="java.lang.String" inSummary="y" isComputed="n" 
       isEditable="n" isKey="n" isPadded="n" isPrimaryKey="n" isRequired="n" 
       isVisible="y"/>  
     <map name="Currency"  class="java.lang.String" inSummary="y" 
       isComputed="n" isEditable="n" isKey="n" isPadded="n" isPrimaryKey="n" 
       isRequired="n" isVisible="y"/>  
     <map name="Price Unit"  class="java.lang.String" inSummary="y" 
       isComputed="n" isEditable="n" isKey="n" isPadded="n" isPrimaryKey="n" 
       isRequired="n" isVisible="y"/>         
          <fixed>release|Release</fixed>
          <fixed>resetrelease|Reset Release</fixed>
       </map> 
  </mapping>
  </sapcfg>
    

测试示例

要生成Purchase Requisition Collective Approval portlet,需要执行以下操作:

  1. 把XML文件(也可以通过 下载文件得到)复制到WebSphere安装路径中运行BusinessObject Builder portlet的 sap_config 目录,例如, WAS-Instal-Path\installedApps\BOBuilderPortlet_WPS_PA_158.ear\BOBuilderPortlet.war\sap_config
  2. 按照前面的示例创建Purchase Requisition Collective Approval portlet。
  3. 选择允许的动作, SearchUpdate
  4. 将portlet放在一个portal页面中,然后输入连接信息,如前面的示例所描述。
  5. Release GroupRelease Code输入值。
  6. 单击 Search按钮。一个Purchase Requisition纪录的列表会显示出来。

    图13. 购买请求集体认可搜索页面
    输入页面

  7. 选择一个纪录。所选纪录的详细信息会显示出来。
    图14. 购买请求集体认可显示页面
    显示页面
  8. 选择动作 Release,然后单击 OK按钮。

图15. 购买请求集体认可详细信息页面
详细信息页面

被选的纪录会被标记一个 X 以指示它被发布。


图16. 购买请求集体显示页面
显示页面

运用Click-to-Action构建SAP Portlet

这个过程通过两个SAP Internal Order portlet演示了Click-to-Action的功能。再一次按照第一个示例并使用PortletBuilder创建一个SAP portlet以列出内部订单。

  1. 在创建业务对象的步骤中,为Click-to-Action选择 Order Number
  2. 在Order Number字段的那一行中,为 Type输入一个值,比如, orderNumber
  3. Namespace输入一个值,比如, sap.test

图17. 列出内部订单
列出国内订单

现在,创建第2个SAP portlet以显示内部订单的详细信息。

  1. 按照您在第一个portlet中所做的那样为 TypeNamespace输入同样的值。
  2. 将上面两个portlets并排添加到一个页面中。
  3. 输入值以列出内部订单。
  4. 单击一个订单号码旁边的一个小图标,然后选择 Get SAP Internal Order Details,以在第2个portlet中显示详细信息。
    图18. Click-to-Action
    列出国内订单

    图19. 内部订单详细信息
    列出国内订单


结束语

IBM Application Portlet Builder是WebSphere Portal ApplicationIntegrator的一个组件,它可以与IBM WebSphere Portal一起帮助成功地集成关键的企业应用。Portlet Builder使用起来很直观并且很简单。它使您能够创建portlet来访问和操作企业应用中的数据,而不需要了解这个系统的编程知识。通过选择在企业应用程序中可用的业务对象,您可以指定哪些数据字段应该在portlet中显示。



下载

名字大小下载方法
SAPPurchaseReq.zip0.1 MBHTTP

关于下载方法的信息


参考资料

关于作者

Fetchi Chen是位于IBM Austin的IBM Software Services for WebSphere的顾问。他已经有超过20年的软件开发经验。他设计了许多系统软件,并且为许多不同行业的公司提供过解决方案。他是IBM认证的WebSphere Portal解决方案开发人员,还是Sun认证的J2EE Enterprise Architect。Fetchi在Penn State大学获得硕士学位。您可以通过 fchen@us.ibm.com与他联系。

关于报告滥用的帮助

报告滥用

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


关于报告滥用的帮助

报告滥用

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


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=WebSphere
ArticleID=55273
ArticleTitle=运用IBM Application Portlet Builder构建SAP Portlet
publish-date=10012003
author1-email=fchen@us.ibm.com
author1-email-cc=

标签

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

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

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

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

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