"
Apoiado por

O READ TABLE vai desaparecer!

Pré 7.4:


DATA l_idade type i.
READ TABLE lt_gente 
  INTO ls_gente WITH KEY nome = l_nome.
l_idade = ls_gente-idade.

Pós 7.4:


data(l_idade) = lt_gente[ nome = l_nome ]-idade.

Obrigado Sérgio Fraga pela dica.

O Abapinho saúda-vos.

11 comentários a “O READ TABLE vai desaparecer!”

  1. Enio Diz:

    Opa, excelente dica! Anotada…

  2. Ederson Diz:

    Vai dar merda.
    Esta fechando o parentes sem abri-lo.
    Quase um lambda

  3. Jamal Diz:

    Acho que não ativa.
    Tem um parênteses no final que não foi aberto em nenhum lugar

  4. Rui Nunes Diz:

    Olá Nuno,

    Convém referir que se não existir o registo correspondente a l_nome, este método gera uma exception CX_SY_ITAB_LINE_NOT_FOUND.

    (acabei de descobrir, porque gostei tanto da ideia que tive que ir logo a correr experimentar ;)

    Um abraço,
    Rui

  5. Sérgio Fraga Diz:

    Boas Rui,

    O que eu costumo fazer é verificar se a linha existe antes de aceder à mesma. Fica o exemplo:

    IF line_exists( lt_gente[ nome = l_nome ]-idade ) = abap_true.
    data(l_idade) = lt_gente[ nome = l_nome ]-idade.
    ELSE.
    ” Error Handling
    ENDIF.

    NOTA: Se por acaso já tiveres o SP8 no teu sistema, podes omitir o abap_true :)

    Abraço
    Sérgio Fraga

  6. Nuno Godinho Diz:

    Obrigado. Parêntesis corrigido.

  7. Mauricio Diz:

    E se fossemos fazer um READ BINARY SEARCH? Só colocar BINARY SEARCH no fim?

  8. Custodio Diz:

    Sergio, nao e necessario verificar se a linha existe, basta usar value e optional:

    data(l_idade) = value #(lt_gente[ nome = l_nome ]-idade optional ).

    ou ainda DEFAULT:

    data idade_default = 18. “ja pode beber no Brasil
    data(l_idade) = value #(lt_gente[ nome = l_nome ]-idade defaul idade_default).

    Abraco,
    Custodio

  9. Rui Nunes Diz:

    Olá Sérgio,

    Tinha pensado usar o tradicional Try / Catch, mas a tua abordagem é mais interessante ;)

    Hoje pude finalmente usar este método para aceder às linhas de uma tabela interna. No meu caso para atribuir um valor a um dos campos, do estilo:

    lt_gente[ nome = l_nome ]-idade = 10.

    Muito interessante.

    Abraço,
    Rui

  10. Gus Diz:

    Interessante.

    READ TABLE lt_0001 INTO DATA(ls_0002) INDEX 1.

    Abs.

  11. Gus Diz:

    Achei …
    http://scn.sap.com/community/abap/blog/2013/05/29/abap-news-for-release-740–table-expressions

    wa = itab[ idx ].

    Faz o mesmo que:

    READ TABLE itab INDEX idx INTO wa.

    Legal! Valeu pelas dicas! Abs.

Deixe um comentário


Acerca do Abapinho
O Abapinho é suportado pelo WordPress
Artigos (RSS) e Comentários (RSS).