科技行者

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

知识库

知识库 安全导航

至顶网软件频道与 WebSphere Integration Developer 适配器连接,第 4 部分 : WebSphere Adapter for SAP Software 简介

与 WebSphere Integration Developer 适配器连接,第 4 部分 : WebSphere Adapter for SAP Software 简介

  • 扫一扫
    分享文章到微信

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

本文是与 WebSphere Integration Developer 适配器连接 系列文章中的最后一篇,阐述如何将资源适配器与 IBM® WebSphere® Integration Developer 一起使用。

作者:ibm 来源:ibm 2007年10月6日

关键字: 应用 技术 中间件 WEBSPHERE

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

WebSphere Adapter for SAP 概述

SAP 是组合财务、人力资源、操作和企业服务系统的企业资源计划系统 (ERP)。从集成角度看,我们最感兴趣的是从我们的应用程序可以访问 SAP 系统中的什么服务。在本系列文章中的前几篇文章中您已经了解到,每种适配器都提供一个企业服务发现向导。发现向导的任务是确定后台系统提供什么数据或服务,以及如何更好地访问它们。JDBC 适配器将详细查看数据库中的表,并确定需要什么服务来访问该数据。SAP 适配器发现向导了解您的 ERP,并发现用于访问其中应用程序的服务。

如图 1 所示,SAP 资源适配器使用 SAP Java™ Connector (SAP JCo) API 与运行在 SAP 服务器上的 SAP 应用程序通信。


图 1 SAP 资源适配器体系结构
SAP 资源适配器体系结构

当开始使用企业服务发现向导时,您必须首先确定使用哪一个 SAP 接口。所以,在使用 SAP 资源适配器时,若要了解使用企业服务发现向导可以发现什么服务,您需要了解三种类型的 SAP 接口:

  • 业务应用程序编程接口 (BAPI®)
  • 应用程序链接支持 (ALE)
  • SAP 查询接口 (SQI)

为帮助您选择使用哪一个接口,下面我们将描述这些接口。

业务应用程序编程接口 (BAPI)

使用 SAP 资源适配器进行访问的最常见接口是业务应用程序编程接口 (BAPI)。SAP 服务器包含存储 SAP 业务对象的业务对象库 (BOR)。在面向对象的方式中,每个业务对象都有一组与其关联的方法 (BAPI),以便操作业务对象中的数据,并使用该数据实现业务功能。我们将 SAP 服务器上的业务对象称作 SAP 业务对象,以便区别 WebSphere Integration Developer 业务对象

外部应用程序使用 BAPI 创建、更新或从 SAP 业务对象检索数据。在各种行业中,常见业务功能有许多标准的 BAPI,企业可以修改现有的 BAPI,也可以添加许多自己的内容。

例如,SAP 服务器通常在 BOR 中包含员工地址业务对象。在称为 BAPI_ADDRESSEMP_GETDETAIL 的 BOR 中还有一项功能,客户机应用程序可以使用员工号作为输入来调用该功能,以检索员工地址业务对象中包含的数据。

企业服务发现向导允许您在应用程序中选择使用哪一个 BAPI。请记住,在使用 BAPI 接口时,SAP 资源适配器仅支持出站处理。

应用程序链接支持 (ALE)

应用程序链接支持是 SAP 的一项功能,它使用中间文档 (IDoc) 将业务数据传入应用程序和从应用程序传出业务数据。当使用 ALE 接口时,SAP 资源适配器支持入站和出站处理。对于入站处理,SAP 服务器可以使用 ALE 接口将事件发送到应用程序(本例中为资源适配器)。事件由创建、更新或删除业务对象而产生。

企业服务发现向导创建的 ALE 业务对象表示 IDoc。对于出站处理,在对 SAP 服务器进行服务调用时,资源适配器使用业务对象创建 IDoc。对于入站处理,资源适配器从 IDoc 填充业务对象。

SAP 查询接口 (SQI)

SAP 查询接口允许您直接查询 SAP 表,以检索数据或检查 SAP 服务器上是否存在数据。对于此接口,适配器仅支持出站模式。使用企业服务发现创建的业务对象的属性表示表中的列。

在本文其余的部分中,我们将重点介绍如何使用 BAPI 方法。毫无疑问,您可能希望使用 ALE 接口,但在 SAP 适配器中大多都使用 BAPI,因此这里不急于介绍 ALE。





回页首


用于 BAPI 的企业服务发现

应用程序使用远程函数调用 (RFC) 来调用 BAPI。在图 1中,我们提到,当运行应用程序时,SAP JCo 可能让适配器执行远程函数调用来调用 BAPI。不过,若要从应用程序执行 RFC 调用,您需要指定 BAPI 的名称及其接口的详细信息,其中包含导入参数(输入)和导出参数(输出)。使用企业服务发现向导,您可以选择应用程序要使用的 BAPI,并且企业服务发现向导将创建存储输入和输出参数的业务对象。

您可以运行企业服务发现向导来创建用于访问后台系统的 EIS 导入。导入需要模块中的组件可以调用其操作的接口,并且操作需要业务对象来包含操作使用的业务数据。让我们了解一下如何使用 SAP 资源适配器的企业服务发现向导创建这些构件。

选择 BAPI

当选择 BAPI 作为从中创建服务的 SAP 接口时(图 2),将向您提供一个 BAPI 列表,该列表位于 SAP 服务器上(图 3)。向导按名称、描述或与其关联的业务对象提供 BAPI。由于有许多 BAPI,所以您可以使用筛选按钮。


图 2 选择 SAP 接口
选择 SAP 接口

图 3 显示了列出 BAPI 的两种不同方法,这样您可以方便地选择要导入的 BAPI。在 RFC 下,您将看到一个 BAPI 列表,它们以 BAPI_ADDRESSEMP_ 开头,这是使用筛选器设置的。在 BOR 下,列出了与员工地址业务对象关联的 BAPI。您选择了应用程序将使用 SAP EIS 导入选项调用的 BAPI。


图 3 发现的 BAPI
发现的 BAPI

导入并配置 BAPI

选择需要使用的每个 BAPI,然后单击 Add to import list。该向导将创建一个业务对象,以便包含您选择的 BAPI 的输入和输出。当添加要导入的 BAPI 时,Configuration Parameters 对话框将打开(图 4),使您有机会选择作为业务对象一部分包括的属性命名约定和可选 BAPI 参数。


图 4 为 BAPI 配置参数
为 BAPI 配置参数

当需要使用 SAP 函数生成器中显示的参数名称时,请选中 Use Field Name to generate attributes(图 5)。如果不选中此选项,则会对每个属性使用短文本。

如图 5 所示,根据 Optional 列下复选标记的指示,BAPI_ADDRESSEMP_CREATE 具有可选参数,在 Configuration Parameters 对话框中可以看到它们。在缺省情况下,BAPI 的所有可选参数都包括在生成的业务对象属性中。如果需要忽略某些可选参数,则选中 Check if you want to select optional parameters for this interface,然后对需要忽略的可选参数选择 No


图 5 SAP 函数生成器中显示的 BAPI 参数
SAP 函数中显示的 BAPI 参数

创建业务对象和接口

选择一个或多个 BAPI 后,您需要指定要包含 BAPI 参数的业务对象的名称,并需要指定每个 BAPI 将执行的操作类型(创建、更新、检索或删除)。例如,假设您需要导入 BAPI_ADDRESSEMP_GETDETAIL。关闭 Configuration Parameters 对话框后,向导的 Configure Object 页将打开。在本示例中,我们将业务对象名称设置为 EmployeeAddress,并从操作列表选择 Retrieve图 6)。


图 6 配置业务对象和操作
配置业务对象和操作

如果按照前几篇文章的介绍进行操作,您可能想知道图 6 的意义是什么。与使用以前的资源适配器相比,此图略有不同,其中您可以从 EIS 选择操作,具有该名称的操作是在接口中创建的。请记住,SAP 业务对象包含处理业务对象的操作。因此,在 Configure Objects 页中,您为 EmployeeAddress 业务对象提供了调用 BAPI_ADDRESSEMP_GETDETAIL 以获得员工地址详细信息的检索操作(EmployeeAddress 业务对象包含元数据,该元数据通知 SAP 资源适配器在调用检索导入操作时调用哪一个 BAPI)。

完成向导的最后一页(在该页中创建模块以存放 EIS 导入)后,便创建了接口和业务对象。为将内容放入透视图,让我们看一下在示例中需要创建哪些操作。


图 7 用于 EmployeeAddress 检索操作的导入接口
用于 EmployeeAddress 检索操作的导入接口

图 7 显示了企业服务发现向导为 EIS 导入创建的接口。因为我们指定了使用与 EmployeeAddress 关联的检索操作调用 BAPI,所以该接口包含 retrieveSapEmployeeAddressWrapper 操作。输入是 SapEmployeeAddressWrapperBG 业务图表(图 8)。业务图表包含一个谓词(当调用本例中的操作时,您可以将该谓词设置为“retrieve”)和 SapEmployeeAddressWrapper 业务对象(具有后缀 Wrapper,因为它包含用于 BAPI 输入和元数据的业务对象)。此处需要注意的一点是操作名称不指示调用哪一个 BAPI。在生成的业务图表中对该信息进行了编码。现在,让我们看一下业务图表。


图 8 EmployeeAddress 业务图表
EmployeeAddress 业务图表

SapEmployeeAddressWrapper 业务对象包含应用程序特定的信息,指示资源适配器它将为 EmployeeAddress retrieve 操作调用 BAPI_ADDRESSEMP_GETDETAIL图 9ASI element properties 下的第二列)。


图 9 用于 EmployeeAddress 的应用程序特定的信息
用于 EmployeeAddress 的应用程序特定的信息

除 BAPI 信息外,SapEmployeeAddressWrapper 还包含 SapBapiAddressempGetdetail 业务对象,该业务对象包含提供 BAPI 调用的输入和输出属性。因此,当您使用 Employeenumber 属性中的员工号调用检索操作时,资源适配器在 BAPI 调用返回时会填充其他属性。当调用检索操作时,SapReturn 业务对象包含从 BAPI 调用产生的 BAPI 消息或错误代码。

当然,除检索数据外,通常还需要创建、更新或删除业务对象。例如,您可能还需要创建或更新模块中的 EmployeeAddress 业务对象。在这种情况下,请回头看一下图 3;您可以选择多个 BAPI,然后指定哪一个 BAPI 创建业务对象,哪一个 BAPI 更新业务对象。当选择了多个 BAPI 时,向导的 Configure Objects 页将打开(图 10),您可以选择表示业务对象的每种操作的 BAPI。


图 10 创建业务对象
创建业务对象

向导完成后,它创建一个导入和一个包含创建、更新、检索和删除操作的接口,具体取决于您指定的操作。注意,许多 BAPI 不能由本身调用;它们需要先调用其他 BAPI。在这种情况下,您使用一个 BAPI 事务对象

与 SAP 服务器的交互总是由工作的逻辑单元(事务)组成。像第一个示例那样,BAPI 事务可能由单个 BAPI 调用组成,适配器在此之后调用 SAP 服务器上的提交。一个事务还可能包括一系列 BAPI 调用,后跟一个提交调用。

图 10 中,请注意标记为 Create a BAPI transaction Object from the selected BAPIs 的复选框。图 3 显示了您可以选择许多 BAPI,并将其添加到向导中的 Objects to be imported 部分。执行该操作时,您可以将每个 BAPI 作为特定的创建、更新、删除或检索操作分配。

不过,当有些操作调用多个 BAPI 时,您可能需要指定执行一个工作逻辑单元的一系列 BAPI。在这种情况下,可以选中 Create a BAPI transaction Object from the selected BAPIs。然后将列表中的 BAPI 序列(图 11)视为对业务对象执行创建、检索、更新或删除操作的一个事务。当图 11 中的示例调用 EmployeeAddress 业务对象的创建操作时,它将调用所选的 BAPI,并且后跟提交。


图 11 创建 BAPI 事务对象
创建 BAPI 事务对象

在下一个示例中,我们将了解如何创建 BAPI 事务对象。我们还将向您介绍如何设置适配器和运行企业发现向导,以创建 BAPI 事务对象。





回页首


使用 SAP 适配器的企业服务发现

学习了 SAP 资源适配器的基础知识后,让我们研究一个详细示例,将所学的知识结合起来。在以下各部分中,我们将设置 SAP 资源适配器,然后运行企业发现向导。您自己的 SAP 服务器的业务对象和 BAPI 可能与我们示例中的不同,但是,您可以在自己的系统上继续使用您熟悉的 BAPI。

我们将创建使用 SAP 资源适配器的 EIS 导入,以调用创建员工地址记录的 BAPI_ADDRESSEMP_CREATE。不过,在调用 BAPI_ADDRESSEMP_CREATE 之前,您需要锁定员工记录。在调用之后,则应释放锁定。因此,创建员工地址记录需要事务对象中的以下 BAPI 调用序列:

  • BAPI_EMPLOYEE_ENQUEUE
  • BAPI_ADDRESSEMP_CREATE
  • BAPI_EMPLOYEE_DEQUEUE
  • Commit

初始设置

在结合使用企业发现向导与 SAP 适配器之前,您需要提供适配器需要的库。在图 1 中,您将在 SAP 资源适配器和 SAP 服务器之间看到一个名为 Sap JCo 的小框。sapjco.jar 启用从 Java 应用程序(在本示例中,Java 应用程序为 SAP 资源适配器)到 SAP 服务器的远程函数调用。sapjco.jar 需要 sapjcorfc.dll 和 librfc32.dll,后两个又需要 msvcp71.dll 和 msvcr.dll。Windows 安装程序中可能已包含 msvcp71.dll 和 msvcr.dll。因此,在开始使用企业服务发现向导之前,需要先执行以下几个步骤:

  1. 从 SAP 管理员或 SAP 支持站点获取以下文件:
    • sapjco.jar
    • sapjcorfc.dll
    • librfc32.dll
    • msvcp71.dll
    • msvcr71.dll
  2. 将 sapjcorfc.dll 和 librfc32.dll 复制到以下两个位置:
    • <WID>\eclipse\jre\bin。企业服务发现向导先使用 sapjco.jar,后续程序依次使用这些 DLL 连接到 SAP 服务器
    • <WID>\runtimes\bi_v6\bin。当应用程序在 WebSphere Process Server 上运行时,SAP 资源适配器在此位置查找 DLL。
  3. 将 sapjco.jar 复制到 <WID>\runtimes\bi_v6\lib 目录。
  4. 将 msvcp71.dll 和 msvcr71.dll 复制到 Windows\System32(如果这两个文件不存在),以便将其安装在 Windows 系统路径。

这还不是非常激动人心的。让我们继续看一些更有趣的事情。

我的适配器在哪里?

要使用 SAP 资源适配器,您需要在文件系统中执行许多检查工作,才能完成以下两个任务:

  • 使用 SAP 资源适配器的 RAR 文件创建项目。业务模块和企业服务发现向导将使用此资源适配器项目。
  • 将该项目配置为使用适配器的正确 JAR 文件。

在接下来的步骤中,将为 SAP 资源适配器创建适配器项目:

  1. 通过选择 File - Import - RAR file 打开企业服务发现向导。
  2. 对于 Connector file,请浏览至 <WID>/Resource Adapters/SAP/deploy/CWYAP_SAPAdapter_Tx.rar。
  3. Connector project 设置为 CWYAP_SAPAdapter
  4. 清除 Add module to an EAR project,然后单击 Finish
  5. 完成该向导后,请切换到 Resource 透视图 (Window - Open perspective - Other - Resource)。
  6. 在文件系统中,将 <WID>\runtimes\bi_v6\lib\sapjco.jar 复制到 CWYAP_SAPAdapter 项目。
  7. 右键单击新建的适配器项目 CWYAP_SAPAdapter,并选择 Properties - Java Build Path
  8. Libraries 选项卡上单击 Add Jars。浏览至前面复制的 jar 文件,该文件在 CWYAP_SAPAdapter 项目中
  9. 切换回 Business Integration 透视图。

探索从发现开始

现在有趣的事情开始了。在接下来的步骤中,您将使用企业服务发现向导选择 BAPI,在创建对 SAP EIS 导入的操作时,该向导将调用该 BAPI。

  1. 选择 File - New - Enterprise Service Discovery
  2. 选择 IBM WebSphere Adapter for SAP Software(如图 12 所示),然后单击 Next

    图 12 导入 SAP 资源适配器
    导入 SAP 资源适配器

  3. 在向导的第一个页面(图 13)中,请完成用于特定 SAP 服务器的字段,并选择您将使用哪一个 SAP 接口:BAPI、ALE 或 SQI。在缺省情况下,BAPI 处于选中状态,它是本示例中需要使用的接口。

    图 13 SAP 适配器连接属性
    SAP 适配器连接属性

  4. UserNamePassword 中,输入 SAP 服务器的用户名和密码。
  5. 输入管理员为您提供的适用的 SAP 主机凭据。
  6. Select the SAP interface 旁边,选择 BAPIALESQI 之一。在缺省情况下,BAPI 处于选中状态,它是本示例中需要使用的接口。
  7. Maximum number of hits for the discovery 设置为 100。

    最大命中数指示适配器应返回多少个 BAPI(它也是用于 ALE 接口的 IDOC 数和用于 SQI 接口的表数)。典型的 SAP 服务器可以有许多 SAP 业务对象,但是请记住,大量的 SAP 业务对象将需要更多时间来检索结果。本章稍后将介绍如何筛选结果,以限制在企业服务发现向导中显示的结果数量。

  8. 单击 Next。向导的下一页是 Find and Discover Enterprise Services 页面(图 14)。在该页面上单击 Execute Query

    警告:不要展开 DiscoverByNameDiscoverByDescription 类别的任何一个,它们都位于 RFC 下。也不要展开 BOR。如果为最大命中数选择一个较大值(图 13),但没有应用筛选器,则需要等待很长时间才能显示所有结果。

    图 14 发现 BAPI 和 SAP 业务对象
    发现 BAPI 和 SAP 业务对象

共有两个方法可以发现 SAP 服务器上的业务对象:您可以检索 BAPI 列表或 SAP 业务对象列表及其关联的 BAPI。在 RFC 下,有两个类别:DiscoverByNameDiscoverByDescription。这些类别列出了 SAP 服务器上的所有 BAPI,并分别显示 BAPI 名称或 BAPI 描述。

BOR 下,列出了所有 SAP 业务对象。在每个业务对象下,列出了为该业务对象提供的每个 BAPI。

在导入 BAPI 之前,让我们再来讨论一下我们前面提到的筛选。因为 SAP 系统中有许多 BAPI 对象,所以可以为 Discover By NameDiscover By DescriptionBOR 类别创建筛选器,以限制返回的结果,这可以节省时间,并且可以较容易地选择感兴趣的 BAPI 或业务对象。要创建筛选器,请选择类别,然后单击 Filter。输入筛选器(例如输入 BAPI_ADDRESSEMP_* 以便仅显示名称以 BAPI_ADDRESSEMP 开头的 BAPI)、BAPI 名称或 SAP 业务对象名称或该名称的任何一部分。甚至可以使用通配符 (*) 来匹配名称的其余部分。

接下来,需要为事务选择队列、取消排队和创建 BAPI,因此需要设置筛选器并选择它们:

  1. 选择 RFC – DiscoverByName,然后单击 Filter
  2. 在 Filter 对话框中,输入 BAPI_EMPLOYEE_*QUEUE,然后单击 OK
  3. 展开 Discover By Name,并等待资源适配器向该类别添加 BAPI 列表(图 15)。

    图 15 将 BAPI 添加到导入列表
    将 BAPI 添加到导入列表

  4. Discover By Name 下,选择 BAPI_EMPLOYEE_ENQUEUE
  5. 单击 Add to import list
  6. 当 Configuration Parameters 对话框打开时,请单击 OK,因为本示例中没有任何可选属性。
  7. 要将 BAPI_EMPLOYEE_DEQUEUE 添加到导入列表,请重复前面的步骤。现在,向导应类似于图 15

    警告:当选择筛选类别时,还可以单击 Clear Filter。不过,如果在类别展开时单击 Clear Filter,则适配器将重新填充列表,而不应用筛选器,这可能要花费一些时间。

  8. 选择 Discover By Name 类别,然后单击 Filter
  9. 在 Filter 对话框中,输入 BAPI_ADDRESSEMP_CREATE,然后单击 OK
  10. Discover By Name 目录下,请选择 BAPI_ADDRESSEMP_CREATE,然后单击 Add to import list。Configuration Parameters 对话框将打开。
  11. 要使用业务对象属性的缺省名称,并且不包括可选属性,请单击 OK。向导现在位于 Configure Objects 页。

在 Configure Objects 页中,您可以根据选择的 BAPI 定义出站接口使用的操作类型,并命名用作每个操作的导入和导出的业务图表。您应命名的业务图表与 BAPI 基于的 SAP 业务对象有些类似。

  1. 对于 Object Location,请输入 EmployeeBOs,并保留 Namespace 的缺省值。
  2. 对于 Enter the name of the Business Object,请输入 EmployeeAddress
  3. 选中 Create a BAPI transaction Object from the selected BAPIs
  4. 对于 Choose the operation for this Transaction Business Object,请选择 Create

刚才创建了一个空 BAPI 事务,该事务将创建员工地址 SAP 业务对象。下一步将按顺序添加 BAPI 调用,这些调用将作为事务的一部分按该顺序运行。

  1. 单击 Add
  2. 在 Add 列表中,请选择 BAPI_EMPLOYEE_ENQUEUE,并单击 OK。它是创建操作中将调用的第一个 BAPI。
  3. 重复上面的步骤,依次添加 BAPI_ADDRESSEMP_CREATEBAPI_EMPLOYEE_DEQUEUECOMMIT。企业服务发现向导将打开(图 16)。

    图 16 配置 BAPI 事务对象
    配置 BAPI 事务对象

您刚才定义的 BAPI 事务将:

  • 调用 BAPI_EMPLOYEE_ENQUEUE,以锁定包含 AddressEmp SAP 业务对象的表。
  • 调用 BAPI_ADDRESSEMP_CREATE 以创建 AddressEmp 对象。
  • 调用 BAPI_EMPLOYEE_DEQUEUE 以取消锁定该表。
  • 提交事务。

对于用于其他资源适配器的向导,最后一步是告诉向导将出站导入放入哪个模块,然后设置您刚才提供给导入的 SAP 连接信息:

  1. 单击 Next。Generate Artifacts 页将打开。
  2. 单击 New。New Integration Project 向导将打开。
  3. 在 New Integration Project 向导中,请确保选择 Create a module project,然后单击 Next
  4. 对于 Module name,请输入 CreateEmployee,然后单击 Finish。Generate Artifacts 页面上的 Module 字段包含值 CreateEmployee(图 17),连接信息包含您在向导的第一个页面上输入的值。稍后通过选择 CreateEmployee 导入的属性可以更改这些值。

    图 17 生成发现的构件
    生成发现的构件

  5. 单击 Finish。向导关闭,并将导入添加到 CreateEmployee 组装关系图。

如果您需要为其他 BAPI 创建多个导入,则可以采用快捷方式,而不是再次运行该向导。如图 18 所示,SAP 资源适配器下面有一个条目,其用户名与用于连接 SAP 服务器的用户名相同。要从向导的 Query 页面开始,请选择该名称,并单击 Next


图 18 重新运行向导
重新运行向导

此时,您可以将业务逻辑添加到将使用 CreateEmployee 导入的应用程序。现在,当您调用 createSapEmployeeAddressInput 操作时,会使用 SapEmployeeAddressBG 业务图表中的数据依次调用以下三个 BAPI:BAPI_EMPLOYEE_ENQUEUEBAPI_ADDRESSEMP_CREATEBAPI_EMPLOYEE_DEQUEUE,并且后跟提交调用。





回页首


结束语

本文是与 WebSphere Integration Developer 适配器连接 系列文章的最后一篇。在学习本文之后,您会感到适配器部分实际上非常简单(尽管存在一些术语),并且连接到企业信息系统(EIS)、数据库、平面文件和电子邮件系统非常快捷。为系统找到正确的适配器后,WebSphere Integration Developer 会使用您选择的适配器确定如何处理后台系统,然后创建业务逻辑可以使用的服务、操作和业务对象。因此,使用一些向导可以从业务逻辑调用服务,调用方法与您调用其他可重用服务完全相同。业务逻辑代码不需要知道适配器内部发生的详细情况。

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

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

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