Lookup em tabela sem ter de lidar com a excepção CX_SY_ITAB_LINE_NOT_FOUND
2020-06-15
Antes do 7.40 ter modernizado o ABAP, um lookup a uma tabela obrigava a declarar uma variável auxiliar e a pelo menos 4 linhas de código.
Temos a seguinte tabela interna:
DATA(itbl) = VALUE t_t001( ( bukrs = 'COCA' butxt = 'Coca-cola' )
( bukrs = 'PEPS' butxt = 'Pepsi' ) ).
Antes da 7.40 tinha de ser assim:
DATA wa LIKE LINE OF itbl.
DATA butxt TYPE butxt.
READ TABLE itbl INTO wa WITH KEY bukrs = 'SPRI'.
IF SY-SUBRC = 0.
butxt = wa-butxt.
ENDIF.
Com o 7.40 a coisa tornou-se muito mais elegante. Mas mesmo assim, se o lookup falhar salta a excepção CX_SY_ITAB_LINE_NOT_FOUND com a qual temos de lidar, o que torna o código feio:
TRY.
DATA(butxt) = itbl[ bukrs = 'SPRI' ]-butxt.
CATCH CX_SY_ITAB_LINE_NOT_FOUND.
CLEAR butxt.
ENDTRY.
Mas agora descobri que podemos recorrer ao VALUE e à sua funcionalidade OPTIONAL para nos ajudar a tornar a coisa muito mais simples:
DATA(butxt) = VALUE #( itbl[ bukrs = 'SPRI' ]-butxt OPTIONAL ).
Mais legível e mais sintético e por isso muito mais bonito e elegante.
O Abapinho saúda-vos.