Substitui valor de campo numa tabela interna

images/thumbnail.jpg - Thumbnail

Agora que o ABAP tem compreensions há uma série de super poderes que nem sempre são evidentes. Aqui vou ensinar-te a mudar o valor de um único campo em todos, vários ou um registos de uma tabela interna.

Imagina que tens uma tabela interna:

SELECT * FROM t001 INTO TABLE @DATA(companies).

Antes, fazias assim de forma imperativa:

LOOP AT companies INTO FIELD-SYMBOL(<company>).
  <company>-butxt = 'Abapinho'.
ENDLOOP.

Agora, usando a sintaxe funcional fazes assim:

FINAL(hacked_companies) = VALUE t_t001(
  FOR company IN companies
  ( VALUE #( BASE company
             butxt = 'Abapinho' ) ) ).

Se só quiseres alterar o campo em alguns ou mesmo apenas um registo adicionas um WHERE:

FINAL(hacked_companies) = VALUE t_t001(
  FOR company IN companies
  WHERE ( bukrs = 'SAP' )
  ( VALUE #( BASE company
             butxt = 'Abapinho' ) ) ).

O truque é usar o BASE com o company para definir o ponto de partida e depois alterar só os campos que quiseres. Neste caso alterei só o BUTXT.

O Abapinho saúda-vos.