Dados em memória??? Como IMPORT/EXPORT a-los???
Tempo de leitura: 4 minutos.
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.