Patrocinado por
Patrocinado por Inetum

Usa BASE para não estragares o que já tens

images/thumbnail.png - Thumbnail

Dantes usava-se o comands APPEND e INSERT para adicionar linhas a tabelas internas. Mas agora que o ABAP cresceu, podemos usar VALUE, REDUCE, CORRESPONDING, etc. Mas, e se a tabela interna já tiver linhas e não as quisermos perder?

Nesse caso recorres ao BASE.

output_lines = CORRESPONDING #( input_lines ).
output_lines = CORRESPONDING #( BASE ( output_lines ) input_lines ).

A diferença entre a primeira e a segunda linhas é que, enquanto na primeira o conteúdo de output_lines é esmagado na operação, na segunda ele é preservado e as novas linhas resultantes da operação CORRESPONDING são adicionadas a seguir às já existentes.

O Luís Rocha sugeriu este tema e enviou-me os seguintes exemplos:

LOOP AT lines ASSIGNING FIELD-SYMBOL(<line>).
  result = VALUE #(
    BASE result
    sign = 'I' option = 'EQ' high = ''
    ( low = <line>-value ) ).
ENDLOOP.

No exemplo ccima vais construíndo um range de forma iterativa. Nota que neste caso em particular se poderia alternativamente ter feito logo um FOR EACH no VALUE. Mas aí não irias aprender como usar o BASE, né?

No exemplo abaixo acrescentas mais umas linhas de HTML a uma tabela que já tem algumas:

it_html = VALUE #(
  ( |<html>| )
  ( |  <head>| )
  ( |    <meta http-equiv="content-type">| )
  ( |    <script type="text/javascript">| )
  ( |      function onKeyDown(f)| )
  ( |      \{ if(event.keyCode == 13)| )
  ( |         \{ document[f.name].submit();  | )
  ( |         \}| )
  ( |      \}| )
  ( |    </script>| )
  ( |    <style type="text/css">| )
  ).

" (...)

it_html = VALUE #( BASE it_html
  ( |      </style> | )
  ( |  </head> | )
  ( |  <body> | )
).

Obrigado Luís Rocha pela sugestão e exemplos.

O Abapinho saúda-vos.