Pular para o conteúdo
Moovi — página inicial
SAP → ABAP

Submit ALV

Por Gabriel Dias2 min de leitura

Introdução

Em muitos cenários de integração ou automação dentro do SAP ABAP, precisamos executar um programa que gera um ALV (via SUBMIT) e, em vez de exibir a tela, consumir internamente os dados resultantes.

A classe CL_SALV_BS_RUNTIME_INFO é o recurso padrão para isso.

Objetivo

  • Executar um report que monta um ALV.
  • Suprimir a exibição na tela.
  • Recuperar o internal table gerado, já com o tipo de dados desejado.

Passo a Passo

1. Configurar a captura em tempo de execução

Antes do SUBMIT, ativamos a coleta de dados, mas desativamos a exibição e os metadados:

cl_salv_bs_runtime_info=>set(
  EXPORTING
    display  = abap_false   "não exibe tela
    metadata = abap_false   "ignora metadados
    data     = abap_true    "captura apenas os dados
).

2. Executar o report alvo

Aqui usamos o SUBMIT com os parâmetros necessários e garantimos o AND RETURN para voltar ao programa atual:

SUBMIT zmeu_relatorio
  WITH p_datref = p_datref
  WITH s_fipex  IN lr_fipex
AND RETURN.

3. Recuperar a tabela do ALV

Em seguida, obtemos a referência de dados e fazemos o assign para um field symbol já tipado:

FIELD-SYMBOLS: <lt_alv> TYPE tt_tipo_alv. "tt_tipo_alv é o seu tipo de linha/table
DATA lr_alv TYPE REF TO data.
 
TRY.
    cl_salv_bs_runtime_info=>get_data_ref(
      IMPORTING r_data = lr_alv
    ).
    ASSIGN lr_alv->* TO <lt_alv>.
  CATCH cx_salv_bs_sc_runtime_info.
    MESSAGE 'Unable to retrieve ALV data' TYPE 'E'.
ENDTRY.
  • tt_tipo_alv deve corresponder exatamente à estrutura de saída do report chamado.
  • Se o tipo não for conhecido em tempo de design, você pode trabalhar com REF TO data e fazer RTTI para descobrir os campos.

4. Limpar contexto

Sempre finalize com:

cl_salv_bs_runtime_info=>clear_all( ).
  • Isso evita que a sessão mantenha buffers ou metadados para as próximas chamadas.

Boas Práticas

  • Tipagem Firme: Definir o tt_tipo_alv (table type) garante syntax check e code completion no editor.
  • Controle de Erros: Trate a exceção CX_SALV_BS_SC_RUNTIME_INFO para capturar casos em que o programa alvo não gera ALV.
  • Performance: Essa abordagem é eficiente, pois evita screen rendering e transfere apenas os dados.

Cenários de Uso

  • Geração de relatórios em background cujo resultado alimenta outra lógica ABAP.
  • Integrações em que um report legado é reaproveitado sem reescrever toda a lógica de seleção.
  • Execução em batch jobs ou RFCs para exportar dados.

Resumo

Com poucas linhas, CL_SALV_BS_RUNTIME_INFO permite que um SUBMIT retorne o ALV como tabela interna, já tipada, pronto para processamento posterior.

Isso evita duplicar código e garante consistência com o report original.

Todos os artigos

Aprenda na prática

Do artigo ao projeto entregue

Os cursos da Moovi têm ambiente SAP de prática e acompanham você do primeiro passo à especialização.

Conhecer os cursos
Fale no WhatsApp