基于 AIF 的接口开发简述

作者:郑德鼎 约 12 分钟阅读 更新日期:2025-03-02 1 年前更新 标签:ABAP, 开发
目录
基于 AIF 的接口开发简述 - 封面图
基于 AIF 的接口开发简述 - 封面图

# 基于AIF的接口开发简述

原创 3号技师-小宝 [ 建广技师 ](javascript:void\(0\);)

__ _ _ _ _

声明:本文的一些内容来源Jerry群的一位同学,但是我忘记他叫什么名字了,我努力找了很久也没有找到,特此表示感谢,如果那位同学看到内容请联系我,我将在留言置顶予以署名。如果不想发布相关内容也请联系我,我将予以删除,谢谢。

我们可能经常遇到由于项目中开发的接口较多,多多少遇到遇到这样或那样的问题。

比如:

• 企业使用了PI,并且拥有一个复杂的、异构的系统场景。

• 希望将接口的技术和业务方面解耦,从而使业务用户能够执行错误处理。

• 接口技术实现方案多种多样,且功能和流程复杂。

• * *

为了统一接口开发模式,并且有利于上线后 接口的运维及扩展,本文简要介绍一下使用SAP AIF(Application Interface

Framework)来进行统一的接口管理。

• * *

** 什么AIF? **

一句话解释AIF,它可以减少实现和维护接口的时间和成本,使业务用户也能够实施接口和对错误进行处理。

SAP应用程序接口框架AIF (SAP Application Interface

Framework)允许我们在SAP后端系统的单个框架中开发和监控接口,以及执行错误处理。

**从使用方面来说:**

SAP应用程序接口框架使您能够在SAP后端系统中的单个框架中开发和监控接口以及执行错误处理。

SAP应用程序接口框架的可能需求来源如下:

使用SAP Process Integration,您将拥有复杂、异构的系统环境

您希望将接口的技术和业务方面解耦,从而使业务用户能够执行错误处理

您在执行接口实现指南时遇到困难

为了实现减少实施和维护接口的时间和成本的目标,SAP应用程序接口框架使您能够:

进行功能监控而非技术监控

由于业务用户能够更正相关应用程序中的错误,因此提高了数据质量

通过灵活的授权规则限制接口数据和错误监视器访问

执行接口实施指南

执行大规模错误处理

** 从特性方面来说: **

SAP应用程序接口框架为您提供以下功能:

** 对于业务用户: **

向业务用户通知错误的自动警报

界面监控、错误处理和直接从应用程序系统内更正错误的用户友好事务

SAP GUI和基于Web的用户界面

使用单一工具来监控和处理消息,而不考虑所涉及的接口技术

** 对于IT人员: **

用于实现接口的强大框架

一个可定制的接口框架,用于在多个接口上生成和重用接口构建块

灵活的授权规则可限制对数据的访问以及监控和错误处理

用于系统配置和操作的工具

监视具有不同接口技术的接口,例如ABAP代理和IDocs

** 从集成方面来说: **

下图显示了SAP应用程序接口框架的系统布局:

基于 AIF 的接口开发简述 - 封面图
基于 AIF 的接口开发简述 - 封面图

下图显示了SAP应用程序系统中SAP AIF的系统架构:

基于 AIF 的接口开发简述 - 封面图
基于 AIF 的接口开发简述 - 封面图

** SAP AIF支持的接口技术如下: **

• IDoc (see IDoc Support)

• Proxy (see Proxies)

• Web Service

• File (see File Adapter)

• XML

• Transactional remote function call (tRFC)

• Queued remote function call (qRFC)

• Background remote function call (bgRFC)

• Background processing framework (bgPF) (see Configuring bgPF Monitoring)

• Events (see Event Error Log)

• OData (see Configuring OData Monitoring and OData Support)

SAP AIF支持接口协议全景图

基于 AIF 的接口开发简述 - 封面图
基于 AIF 的接口开发简述 - 封面图

# ** SAP Fiori Apps for SAP Application Interface Framework **

** 以下消息监视应用程序可用于SAP AIF: **

消息监视概述:获取您负责的接口的概述以及每个接口处于不同状态的消息。

消息监视:获取一个接口的概述以及通过该接口处理的消息。

针对集成专家的消息监视:获取界面的概述,查看通过它们处理的所有消息的详细信息,并执行大规模错误处理。

针对管理员的消息监视:获取系统中所有接口、收件人和消息的概述。

消息监视(紧急更正):在紧急情况下编辑消息有效载荷的非自定义字段。

** 以下错误日志应用程序可用于SAP AIF: **

SOAP错误日志:查看和筛选与SOAP web服务相关的错误日志。

OData错误日志:查看和筛选与OData服务相关的错误日志。

事件错误日志:查看和筛选与事件相关的错误日志。

以下管理应用程序可用于SAP应用程序接口框架:

维护跟踪级别:设置和维护特定接口的跟踪级别。

• * *

以下按照不同场景,使用目前项目上实际的开发需求来列举具体的实现方法。

** 1\. 外向发送 **

外向发送即从SAP系统发起,通过AIF框架及PO系统,将信息发送到外围系统。

外向发送根据业务需要大致分为三种:

• 业务对象保存时实时发送至单一系统

• 业务对象保存后定时发送至单一系统

• 实时或定时向多个系统同时发送

**1.1. 业务对象保存时实时发送**

该场景以物料凭证外向发送为例,业务需求为当物料凭证创建时,点击保存或过账后,根据业务需求,将符合条件的数据发送到外围系统。

技术实现为:基于物料凭证的业务对象BUS2017对应的工作流事件CREATED来触发AIF,实现数据的外向发送。

实现步骤:

** 1.1.1. 实施BADI,在BADI中触发工作流 **

基于 AIF 的接口开发简述 - 封面图
基于 AIF 的接口开发简述 - 封面图

** 1.1.2. 使用SWE2配置工作流事件触发的功能 **

基于 AIF 的接口开发简述 - 封面图
基于 AIF 的接口开发简述 - 封面图

该方式可结合实际情况使用,如果实时发送的时间点对状态的依赖较高,例如采购订单审批时触发发送,使用该方式较为合适,本例中也可以直接在BADI中直接调用AIF框架。另外如果有些需求需要基于某些字段变更为条件向外发送,如物料主数据某几个字段变更时才会实时触发外向发送,则使用BTE增强更合适,可以在增强中判断哪些字段发生了变化,总之,根据实际需求来确定具体的触发方式。

在函数中调用AIF触发:

基于 AIF 的接口开发简述 - 封面图
基于 AIF 的接口开发简述 - 封面图

程序中使用的接口在后续步骤中定义。

此处如使用SWE2配置,也可以使用类来替代函数。在类中使用接口BI_EVENT_HANDLER_STATIC。如图(示例在SBX中):

基于 AIF 的接口开发简述 - 封面图
基于 AIF 的接口开发简述 - 封面图

** 1.1.3. 定义AIF命名空间 **

事务/AIF/CUST

基于 AIF 的接口开发简述 - 封面图
基于 AIF 的接口开发简述 - 封面图
基于 AIF 的接口开发简述 - 封面图
基于 AIF 的接口开发简述 - 封面图

** 1.1.4. 定义接口 **

这里定义的接口并不完全是与需求层面的一个接口是一对一关系,可以设计需求,对接口进一步细化,方便日志记录,或基于日志的重新处理等等。

基于 AIF 的接口开发简述 - 封面图
基于 AIF 的接口开发简述 - 封面图

** 1.1.5. 定义结构映射 **

在结构映射中,可以实现字段映射,字段检查,结构填充,字段截取,分配固定值,集成BRF+等,同时可以为接口分配多步操作等。

基于 AIF 的接口开发简述 - 封面图
基于 AIF 的接口开发简述 - 封面图

一旦映射结构发生变化,需使用/AIF/DEL_STRUC_CACHE清理Cache,否则新的结构映射不会生效,导致整个接口不能正常工作。

** 1.1.6.定义读取Log相关的索引表及查询屏幕: **

基于 AIF 的接口开发简述 - 封面图
基于 AIF 的接口开发简述 - 封面图

• * * * * * * * * *

REPORT zmmmrm_aif_selscreen_001.TABLES: mkpf. SELECTION-SCREEN BEGIN OF SCREEN 9001 AS SUBSCREEN.PARAMETERS: p_mblnr TYPE mkpf-mblnr, p_mjahr TYPE mkpf-mjahr.SELECTION-SCREEN END OF SCREEN 9001.

AT SELECTION-SCREEN OUTPUT. /aif/cl_global_tools=>get_value_from_mem( ).

基于 AIF 的接口开发简述 - 封面图
基于 AIF 的接口开发简述 - 封面图
基于 AIF 的接口开发简述 - 封面图
基于 AIF 的接口开发简述 - 封面图

** 1.2.业务对象定时发送 **

定时发送即某些业务对象实时性不是很高,因此可以在一定的时间段内根据条件筛选出需要的数据,集中发送。

其做法与1.1类似,只是不需要启用BADI或Event做为实时触发点,直接在Report中调用配置好的AIF接口即可。

** 1.3. 实时或定时向多个系统发送 **

有时候一些对象与多个系统集成,须同时将对象信息发送到多个系统,这里的实现形式较多,可以结合PO接口一并考虑,例如使用了SWE2基于EVENT触发,则可以通过配置多个接受类型来实现,如果在BADI中调用AIF,可以逐个调用对应的接口,在Report中与在BADI中类似,但是整个AIF的基本配置与1.1相同。

** 1.4. 异步发送 **

异步发送通过AIF配置之后,可以直接使用函数/AIF/SEND_WITH_PROXY,

基于 AIF 的接口开发简述 - 封面图
基于 AIF 的接口开发简述 - 封面图

也可以使用/aif/cl_enabler_xml=>transfer_to_aif,但是需要在操作中配置Action函数调用Proxy。

基于 AIF 的接口开发简述 - 封面图
基于 AIF 的接口开发简述 - 封面图
基于 AIF 的接口开发简述 - 封面图
基于 AIF 的接口开发简述 - 封面图

** 1.5. 同步接口 **

外发的同步接口需要定义两个接口(一个向Proxy传送OUTPUT,一个接收PROXY的INPUT)。

OUTPUT

基于 AIF 的接口开发简述 - 封面图
基于 AIF 的接口开发简述 - 封面图

INPUT

基于 AIF 的接口开发简述 - 封面图
基于 AIF 的接口开发简述 - 封面图

同步也可以直接使用函数/AIF/SEND_WITH_PROXY。

基于 AIF 的接口开发简述 - 封面图
基于 AIF 的接口开发简述 - 封面图

参数SAP_STRUCT用于传输进入AIF的数据,参数RESP_SAP_STRUCT用于接收来自对方系统的RESPONSE信息。

** 2\. 内向接收 **

内向接收即外围系统通过PO系统发布的服务,向SAP系统发送服务请求,SAP在接到服务请求后,根据具体的业务需求进行进一步处理。内向接收与外向发送不同的是,调用AIF在Inbound

Proxy中,又会因为同步和异步而略有差异。

** 1.6. 异步 **

针对异步接受,分为单条和多条处理,如果是单条使用

• * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

CALL METHOD /ui2/cl_json=>deserializeEXPORTINGjson = input-mt_bc000101_req_in-req_jsonpretty_name = /ui2/cl_json=>pretty_mode-camel_caseCHANGINGdata = ls_input_sap_stru. CALL METHOD cl_proxy_access=>get_inbound_message_keyIMPORTINGmessage_id = lv_xi_message_id. LOOP AT lt_input_sap_stru ASSIGNING <lfs_abap>.<lfs_abap>-xi_guid = lv_xi_message_id.<lfs_abap>-json = input-mt_bc000101_req_in-req_json.ENDLOOP. TRY.CALL METHOD /aif/cl_enabler_xml=>transfer_to_aifEXPORTINGis_any_structure = lt_input_sap_struiv_queue_ns = 'ZMMMRM'iv_queue_name = 'MRM'iv_use_buffer = 'X'.CATCH /aif/cx_enabler_base.ENDTRY.如果是多条使用:CALL METHOD /ui2/cl_json=>deserializeEXPORTINGjson = input-mt_bc000101_req_in-req_jsonpretty_name = /ui2/cl_json=>pretty_mode-camel_caseCHANGINGdata = lt_input_sap_stru. CALL METHOD cl_proxy_access=>get_inbound_message_keyIMPORTINGmessage_id = lv_xi_message_id. LOOP AT lt_input_sap_stru ASSIGNING <lfs_abap>.<lfs_abap>-xi_guid = lv_xi_message_id.<lfs_abap>-json = input-mt_bc000101_req_in-req_json.ENDLOOP. TRY.CALL METHOD /aif/cl_enabler_xml=>transfer_to_aif_multEXPORTINGit_any_structure = lt_input_sap_struiv_queue_ns = 'ZMMMRM'iv_queue_name = 'MRM'iv_use_buffer = 'X'.CATCH /aif/cx_enabler_base.ENDTRY.
基于 AIF 的接口开发简述 - 封面图
基于 AIF 的接口开发简述 - 封面图

**1.7.同步**

AIF框架在处理同步接口时的意义要弱于异步,也分为处理单条和多条:

可以参考SRM供应商创建和修改的接口,类ZPICL_SI_MM000401_SRM2ERP_SYN

为了简化操作步骤,原结构与SAP结构可以使用同一结构,同时为了Log的保存,在接收JSON的结构下添加公用结构:ZAIF_COMMON_STRU_INBOUND_SYNC,同时,为了从AIF中接收返回的Response信息,在该结构中加入同步接口返回信息对应的ABAP结构的表类型结构,字段名约定为SRESP。如果不需要RESPONSE,而使用RETURN返回信息,可以不指定该字段。如图所示:

基于 AIF 的接口开发简述 - 封面图.textContent = new Date().getFullYear();