扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
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 接口:
为帮助您选择使用哪一个接口,下面我们将描述这些接口。
业务应用程序编程接口 (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 接口
图 3 显示了列出 BAPI 的两种不同方法,这样您可以方便地选择要导入的 BAPI。在 RFC 下,您将看到一个 BAPI 列表,它们以 BAPI_ADDRESSEMP_
开头,这是使用筛选器设置的。在 BOR 下,列出了与员工地址业务对象关联的 BAPI。您选择了应用程序将使用 SAP EIS 导入选项调用的 BAPI。
图 3 发现的 BAPI
导入并配置 BAPI
选择需要使用的每个 BAPI,然后单击 Add to import list。该向导将创建一个业务对象,以便包含您选择的 BAPI 的输入和输出。当添加要导入的 BAPI 时,Configuration Parameters 对话框将打开(图 4),使您有机会选择作为业务对象一部分包括的属性命名约定和可选 BAPI 参数。
图 4 为 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 参数
创建业务对象和接口
选择一个或多个 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 检索操作的导入接口
图 7 显示了企业服务发现向导为 EIS 导入创建的接口。因为我们指定了使用与 EmployeeAddress
关联的检索操作调用 BAPI,所以该接口包含 retrieveSapEmployeeAddressWrapper
操作。输入是 SapEmployeeAddressWrapperBG
业务图表(图 8)。业务图表包含一个谓词(当调用本例中的操作时,您可以将该谓词设置为“retrieve”)和 SapEmployeeAddressWrapper
业务对象(具有后缀 Wrapper,因为它包含用于 BAPI 输入和元数据的业务对象)。此处需要注意的一点是操作名称不指示调用哪一个 BAPI。在生成的业务图表中对该信息进行了编码。现在,让我们看一下业务图表。
图 8 EmployeeAddress 业务图表
SapEmployeeAddressWrapper
业务对象包含应用程序特定的信息,指示资源适配器它将为 EmployeeAddress retrieve
操作调用 BAPI_ADDRESSEMP_GETDETAIL
(图 9,ASI element properties 下的第二列)。
图 9 用于 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 事务对象。
|
使用 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。因此,在开始使用企业服务发现向导之前,需要先执行以下几个步骤:
这还不是非常激动人心的。让我们继续看一些更有趣的事情。
我的适配器在哪里?
要使用 SAP 资源适配器,您需要在文件系统中执行许多检查工作,才能完成以下两个任务:
在接下来的步骤中,将为 SAP 资源适配器创建适配器项目:
CWYAP_SAPAdapter
。
探索从发现开始
现在有趣的事情开始了。在接下来的步骤中,您将使用企业服务发现向导选择 BAPI,在创建对 SAP EIS 导入的操作时,该向导将调用该 BAPI。
最大命中数指示适配器应返回多少个 BAPI(它也是用于 ALE 接口的 IDOC 数和用于 SQI 接口的表数)。典型的 SAP 服务器可以有许多 SAP 业务对象,但是请记住,大量的 SAP 业务对象将需要更多时间来检索结果。本章稍后将介绍如何筛选结果,以限制在企业服务发现向导中显示的结果数量。
共有两个方法可以发现 SAP 服务器上的业务对象:您可以检索 BAPI 列表或 SAP 业务对象列表及其关联的 BAPI。在 RFC 下,有两个类别:DiscoverByName 和 DiscoverByDescription。这些类别列出了 SAP 服务器上的所有 BAPI,并分别显示 BAPI 名称或 BAPI 描述。
在 BOR 下,列出了所有 SAP 业务对象。在每个业务对象下,列出了为该业务对象提供的每个 BAPI。
在导入 BAPI 之前,让我们再来讨论一下我们前面提到的筛选。因为 SAP 系统中有许多 BAPI 对象,所以可以为 Discover By Name、Discover By Description 和 BOR 类别创建筛选器,以限制返回的结果,这可以节省时间,并且可以较容易地选择感兴趣的 BAPI 或业务对象。要创建筛选器,请选择类别,然后单击 Filter。输入筛选器(例如输入 BAPI_ADDRESSEMP_*
以便仅显示名称以 BAPI_ADDRESSEMP 开头的 BAPI)、BAPI 名称或 SAP 业务对象名称或该名称的任何一部分。甚至可以使用通配符 (*) 来匹配名称的其余部分。
接下来,需要为事务选择队列、取消排队和创建 BAPI,因此需要设置筛选器并选择它们:
BAPI_EMPLOYEE_*QUEUE
,然后单击 OK。
警告:当选择筛选类别时,还可以单击 Clear Filter。不过,如果在类别展开时单击 Clear Filter,则适配器将重新填充列表,而不应用筛选器,这可能要花费一些时间。
BAPI_ADDRESSEMP_CREATE
,然后单击 OK。
在 Configure Objects 页中,您可以根据选择的 BAPI 定义出站接口使用的操作类型,并命名用作每个操作的导入和导出的业务图表。您应命名的业务图表与 BAPI 基于的 SAP 业务对象有些类似。
EmployeeBOs
,并保留 Namespace 的缺省值。
EmployeeAddress
。
刚才创建了一个空 BAPI 事务,该事务将创建员工地址 SAP 业务对象。下一步将按顺序添加 BAPI 调用,这些调用将作为事务的一部分按该顺序运行。
您刚才定义的 BAPI 事务将:
BAPI_EMPLOYEE_ENQUEUE
,以锁定包含 AddressEmp
SAP 业务对象的表。
BAPI_ADDRESSEMP_CREATE
以创建 AddressEmp 对象。
BAPI_EMPLOYEE_DEQUEUE
以取消锁定该表。
对于用于其他资源适配器的向导,最后一步是告诉向导将出站导入放入哪个模块,然后设置您刚才提供给导入的 SAP 连接信息:
CreateEmployee
,然后单击 Finish。Generate Artifacts 页面上的 Module 字段包含值 CreateEmployee
(图 17),连接信息包含您在向导的第一个页面上输入的值。稍后通过选择 CreateEmployee 导入的属性可以更改这些值。 如果您需要为其他 BAPI 创建多个导入,则可以采用快捷方式,而不是再次运行该向导。如图 18 所示,SAP 资源适配器下面有一个条目,其用户名与用于连接 SAP 服务器的用户名相同。要从向导的 Query 页面开始,请选择该名称,并单击 Next。
图 18 重新运行向导
此时,您可以将业务逻辑添加到将使用 CreateEmployee
导入的应用程序。现在,当您调用 createSapEmployeeAddressInput
操作时,会使用 SapEmployeeAddressBG
业务图表中的数据依次调用以下三个 BAPI:BAPI_EMPLOYEE_ENQUEUE
、BAPI_ADDRESSEMP_CREATE
和 BAPI_EMPLOYEE_DEQUEUE
,并且后跟提交调用。
|
结束语
本文是与 WebSphere Integration Developer 适配器连接 系列文章的最后一篇。在学习本文之后,您会感到适配器部分实际上非常简单(尽管存在一些术语),并且连接到企业信息系统(EIS)、数据库、平面文件和电子邮件系统非常快捷。为系统找到正确的适配器后,WebSphere Integration Developer 会使用您选择的适配器确定如何处理后台系统,然后创建业务逻辑可以使用的服务、操作和业务对象。因此,使用一些向导可以从业务逻辑调用服务,调用方法与您调用其他可重用服务完全相同。业务逻辑代码不需要知道适配器内部发生的详细情况。
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者