Blog SAPienteSAPiente
ABAP Cloud

Como gerar um wrapper de BAPI com ACO_PROXY

SAPiente4 de jun. de 2026· 5 min read

Tutorial passo a passo da ACO_PROXY: como gerar um wrapper de BAPI/FM, liberar para o cloud (C1) e consumir a partir do seu código ABAP

Este post é o "como fazer". A discussão de quando vale usar wrapper (depois de descartar BO Interface e APIs released) está no pilar: Pare de cravar BAPI na especificação: BO Interface, API e wrappers no S/4HANA Cloud .

Quando esse caminho faz sentido

Resumo de uma linha: quando a BAPI/FM clássica que você precisa não tem BO Interface nem API released equivalente, e mesmo assim você precisa chamá-la a partir de código ABAP Cloud (strict mode). Trate como dívida técnica — no dia em que a SAP liberar o objeto, troca.

Pré-requisitos

  • S/4HANA 2022/2023 (Private Edition ou on-premise) com Developer Extensibility habilitada e as SAP Notes da ACO_PROXY aplicadas.

  • A FM/BAPI alvo precisa ser RFC-enabled ("Módulo de Acesso Remoto"). Se não for, contorna com uma FM Z — passo logo abaixo.

    Tela Transação ACO_PROXY
  • Nesses casos é bom criar um pacote global para que fique acessível para demais processos

E se a FM não for RFC-enabled?

Muita função standard é local — a ACO_PROXY não aceita. Solução é criar uma "casca" Z RFC-enabled e usar essa:

  1. Crie um Function Group Z.

  2. Dentro dele, crie uma Function Module Z marcada como Módulo de Acesso Remoto (RFC).

  3. Replique exatamente os parâmetros da FM standard (nome do parâmetro e tipos). Seja consistente com a nomenclatura do projeto.

  4. No código-fonte da FM Z, só faça a chamada da FM standard repassando os parâmetros. Nada mais.

  5. É essa FM Z que entra na ACO_PROXY no próximo passo.

Passo 1 — Reserve o nome da classe na SE24

Antes de abrir a ACO_PROXY, vá na SE24 e:

  • Crie uma classe com o nome final do wrapper (ex.: Z_WRP_J_1B_NFE_CREATFROMDATA).

  • Ative.

  • Apague a classe ali mesmo, na SE24.

O motivo é reservar o nome no pacote/transporte correto. A ACO_PROXY vai gerar a classe definitiva, com esse mesmo nome, no passo seguinte.

Passo 2 — Abra a ACO_PROXY e preencha os três campos principais

Tela demonstrando preenchimento dos campos para gerar a classe
  • Get Metadata: locally.

  • Function Modules (1): a FM que será encapsulada (no exemplo: BAPI_J_1B_NF_VREATEFROMDATA). Se foi você que criou uma FM Z no item anterior, é ela aqui.

  • Create: Class.

  • Name of Proxyclass (2): o mesmo nome que você reservou na SE24 (ex.: Z_WRP_J_1B_NFE_CREATFROMDATA).

  • Package (3): seu pacote de wrappers (ex.: Z_WRAPPERS).

  • Create Interface e Create Factory Class: desmarcados.

Passo 3 — Marque as opções obrigatórias

Tela demonstrando preenchimento dos campos para gerar a classe

Em Options, deixe ligado:

  • Pass Destination via Constructor — obrigatório no Public Cloud / BTP. A destination chega via IF_RFC_DEST no construtor da classe.

  • Class-Based Exceptions — troca as exceptions clássicas pelas cx_aco_*, que você trata normalmente em ABAP Cloud.

  • Do not Create Shadows of C1 Released Types — evita tipos duplicados.

  • C1 Release — libera a classe gerada para consumo a partir de código cloud. É o ponto central de tudo isso.

Mantenha desmarcadas: Create Retrieve Result Method, Add Keep Task Option, bgRFC, Classic Exceptions, Bapi Exceptions.

Passo 4 — Enter, e a classe está pronta

Enter na ACO_PROXY e ela gera a classe wrapper com C1 release no pacote informado. Ative, atribua a um transporte e tá feito: você tem uma classe consumível a partir de código ABAP Cloud.

Consumindo o wrapper

O construtor recebe a destination, e o método público da classe tem o mesmo nome da FM que você embrulhou. O esqueleto fica assim:

TRY.
    DATA(lo_wrap) = NEW z_wrp_j_1_b_nf_createfromdata( io_dest = lo_dest ).

    lo_wrap->bapi_j_1_b_nf_createfromdata(
      EXPORTING
        " parâmetros de export da FM original
      IMPORTING
        " parâmetros de import da FM original
    ).

  CATCH cx_aco_application_exception INTO DATA(lx_app).
    " erro de negócio retornado pela FM
  CATCH cx_aco_system_failure        INTO DATA(lx_sys).
    " erro de sistema
  CATCH cx_aco_communication_failure INTO DATA(lx_com).
    " erro de comunicação
ENDTRY.

Os nomes de parâmetro são exatamente os da FM original (ou da sua FM Z, se você foi pelo caminho da casca). A ferramenta entrega tudo tipado.

Fechando

Wrapper feito não é fim de história. Anota o nome dele numa lista de "trocar quando sair o objeto released" e revisa a cada release da SAP — uma BAPI sem successor hoje pode ganhar um BO Interface amanhã. E, se a função que você precisa não aparecer em lugar nenhum (nem BO Interface, nem API, nem na lista de classic APIs aprovadas para wrapping), registra a necessidade na SAP Customer.

TagsClean CoreDesenvolvedor
Avalie este conteúdo
para avaliar
SAPiente
@sapiente

Blog sobre SAP, ABAP, BTP, Fiori e tudo que envolve o ecossistema SAP.

Ver perfil →
FacebookInstagramYouTubeTwitter

Comentários 0

Entre na conversa

Faça login para deixar seu comentário neste artigo.

Ainda sem comentários

Seja o primeiro a comentar este artigo.