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_alvdeve 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 datae 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_INFOpara 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.
