"
Supported by

Bye bye READ TABLE

Pré 7.4:


DATA l_idade type i.
READ TABLE lt_folk
  INTO ls_folk WITH KEY name = l_name.
l_age = ls_folk-age.

Pós 7.4:


data(l_age) = lt_folk[ name = l_name ]-age )

Thanks Sérgio Fraga for the tip.

Greeetings from Abapinho.

11 comentários a “Bye bye READ TABLE”

  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


About Abapinho
Abapinho runs on WordPress
Articles (RSS) e Comments (RSS).