Как создать отсортированную или хешированную таблицу на основе атрибута члена в ABAP - PullRequest
4 голосов
/ 16 апреля 2020

Я пытаюсь создать отсортированную таблицу на основе экземпляров. Вот мое кодирование:

CLASS my_fancy_pony DEFINITION.
  PUBLIC SECTION.
    DATA mv_nice_key TYPE i.
ENDCLASS.

CLASS my_fancy_pony IMPLEMENTATION.
ENDCLASS.


DATA lt_my_fancy_ponys TYPE SORTED TABLE OF REF TO my_fancy_pony WITH UNIQUE KEY mv_nice_key.
DATA lt_my_fancy_ponys TYPE SORTED TABLE OF REF TO my_fancy_pony WITH UNIQUE KEY table_line->mv_nice_key.

Это не проходит проверку синтаксиса. Не могли бы вы дать мне знать, как мне этого добиться?

1 Ответ

1 голос
/ 17 апреля 2020

Вы не можете использовать классы напрямую как структуры.

Однако вы можете создать карту, которая будет делать то, что вам нужно:

TYPES:
  BEGIN OF map_entry,
    mv_nice_key   TYPE i,
    ref_to_object TYPE REF TO my_fancy_pony,
  END OF map_entry.

TYPES map_type TYPE SORTED TABLE OF map_entry WITH UNIQUE KEY mv_nice_key.

DATA(lt_my_fancy_pony_map) = VALUE map_type(
  FOR each IN lt_my_fancy_ponys
    ( mv_nice_key   = each->mv_nice_key
      ref_to_object = each ) ).

Карта может содержать любые атрибуты класса что вам нужно:

TYPES:
  BEGIN OF map_entry,
    mv_nice_key    TYPE i,
    some_other_att TYPE i,
    " ...
    ref_to_object  TYPE REF TO my_fancy_pony,
  END OF map_entry.

TYPES map_type TYPE SORTED TABLE OF map_entry WITH NON-UNIQUE KEY table_line.

DATA(lt_my_fancy_pony_map) = VALUE map_type(
  FOR each IN lt_my_fancy_ponys
    ( mv_nice_key    = each->mv_nice_key
      some_other_att = each->some_other_att 
      " ...
      ref_to_object  = each ) ).
...