DICASTECNICA

Dados em memória??? Como IMPORT/EXPORT a-los???

Tempo de leitura: 4 minutos.

IMPORT EXPORT

Fala galera blz?

Aqui é o LNUNES mandando um salve e um esclarecimento.

Quando falei sobre a importância de se incluir comentários nos seus códigos, citei um comando que importa dados da memória…

Como podemos IMPORT ar e EXPORT ar dados para dentro e para fora da memória no ABAP?

IMPORT VCXB[] FROM MEMORY ID ‘ZCXB’.

…pois bem, quero só esclarecer que esse comando lê dados da memória ABAP. Essa é uma técnica de gravar/ler dados em/de uma área de memória no SAP, essa é uma área de memória onde todos os programas ABAP de uma mesma sessão/LUW tem acesso.

“Dá pra ser mais claro LNUNES?”

Claro! Em determinado momento da sua vida, seguramente necessitará saber como funciona esta técnica. Para armazenar dados em memória use o comando EXPORT… a sintaxe segue.

EXPORT <ID1> [FROM <OBJ1>] <ID2> [FROM <OBJ2>]TO MEMORY ID <IDMEMORIA>.

Essa instrução armazena o <OBJ>, que pode ser uma variável ou tabela interna por exemplo, em uma área de memória especifica para essa finalidade. Se você não utilizar FROM <OBJ>, <ID1> será armazenado como com seu próprio nome,  se você utilizar a opção FROM <OBJ1>, o objeto é armazenado com o nome <ID1> (parece confuso, mas no exemplo fica mais claro).

O nome, ou a identidade, da sua área de memória é definido por <IDMEMORIA> e deve conter no máximo 32 caracteres.

Exemplifiquemos o IMPORT / EXPORT:

Digamos que quero armazenar uma tabela interna em memória para recupera-la em outro programa ou em outro determinado momento do processamento.

*”Exportamos para a memória a tabela interna TI_MARA 

FREE MEMORY ID ‘ZOPENABAP’.
EXPORT ti_mara TO MEMORY ID ‘ZOPENABAP’.

*”Para importar executamos o inverso

REFRESH: ti_mara.
IMPORT ti_mara FROM MEMORY ID ‘ZOPENABAP’.

Agora imaginemos uma situação onde é necessário armazenar duas ou mais tabelas internas ou variáveis, podemos sim utilizar a mesma área de memória e podemos “nomear” cada um deles.

*”Exportamos para a memória as tabelas internas TI_MARA com o “nome” TAB1 e TI_MARC TAB2

FREE MEMORY ID ‘ZOPENABAP’.
EXPORT: tab1 FROM ti_mara, 

    tab2 FROM ti_marc TO MEMORY ID ‘ZOPENABAP’.

*”Para importar executamos o inverso

REFRESH: ti_mara, ti_marc.
IMPORT: tab1 TO ti_mara

   tab2 TO ti_marc FROM MEMORY ID ‘ZOPENABAP’.

Muito mais fácil com o exemplo… Você não precisa ler ao mesmo tempo todos os objetos que foram exportados como no exemplo acima, você pode acessa-los conforme sua necessidade, um por vez.

Caso tente acessar um objeto que não está na memória o retorno será SYST-SUBRC = 4.

Lembre-se sempre de esvaziar a área de memória após importar os dados de lá pois não queremos ocupa-la desnecessariamente, para isso pode-se utilizar o comando FREE MEMORY ID <IDMEMORIA>. Sugiro utiliza-lo antes de exportar e após importar os dados.

A título de curiosidade, segue um breve passo-a-passo para visualizar os dados armazenados em memória.

1. Em modo DEBUG clique em nova ferramenta;

2. Selecione a opção Ferramentas->Ferramentas especiais->Áreas de sistema (internas);

3. Na lista exibida, duplo clique em MEMORIES e voilà, aí estão todos os objetos EXPORTados para a memória.

Observe que se não conseguir visualizar essa opção pode ser em decorrência de idioma, versão do SAP GUI e etc…

Eu faço assim, conhece outra maneira? Deixe um comentário 😉

LNUNES.

Receba gratuitamente dicas direto no seu e-mail.

* Campo obrigatório