Как импортировать параметр типа ЛЮБОЙ? - PullRequest
0 голосов
/ 17 октября 2018

Как я могу указать, какой метод, в этом примере get_properties, дает мне локальную переменную, когда тип параметра равен ANY?

"ES_ATTRIBUTES  Exporting   Type    ANY
some_object->get_properties( IMPORTING es_attributes = ????? ).

Я пытался его поместитьв эту переменную, но это не сработало:

FIELD-SYMBOLS:
      <ls_attributes> TYPE any.

Ответы [ 3 ]

0 голосов
/ 18 октября 2018

На самом деле, как вызывающая сторона, вы должны знать тип, который вы хотите импортировать для этого параметра ANY.

Вы должны знать протокол GET_PROPERTIES и отлаживать его, чтобы узнать тип возвращаемого значенияпараметр.В вашем методе вы создаете DATA REFERENCE и присваиваете ему символ поля ANY.

Data:
      lr_data type ref to data.
Field-symbols:
      <lt_properties> type any. 

create data lr_data type TYPE_NAME.  'You should know the type
assign lr_data->* to <lt_properties>.

С моей личной точки зрения, не очень хорошая практика определять метод с EXPORTING типом параметра ANY.

Вы либо определяете интерфейс с помощью IF _ **_PROPERTY и у вас есть возвратная таблица этого интерфейса.

или вы возвращаете таблицу пар имя-значение.(Из сигнатуры метода должно возвращаться TABLE, GET_ PROPERTIES ).

0 голосов
/ 18 октября 2018

Я пытался поместить ее в эту переменную, но это не сработало:

Какую ошибку вы получаете?

Вот пример со стандартным классом преобразования структуры, который также имеет ANY типизированный параметр ex_value, и он прекрасно работает с ANY символами поля.

DATA: gattrdata LIKE brelattr-gattrdata.

  FIELD-SYMBOLS: <fs_incl> TYPE ANY, <fs_wa> TYPE str_type.

      CALL METHOD cl_abap_container_utilities=>read_container_c
      EXPORTING
        im_container           = gattrdata
      IMPORTING
        ex_value               = <fs_incl>
      EXCEPTIONS
        illegal_parameter_type = 1
        OTHERS                 = 2.

    CHECK sy-subrc = 0.
    MOVE-CORRESPONDING <fs_incl> TO <fs_wa>.

В таких случаях вы можете угадать тип с помощью RTTS, а затем заменить символ поля на напечатанную ссылку ref_wa:

DATA: ref_wa      TYPE REF TO data,
      ref_rowtype TYPE REF TO cl_abap_structdescr.

ref_rowtype ?= cl_abap_typedescr=>describe_by_data( <fs_incl> ).
CREATE DATA ref_wa TYPE HANDLE ref_rowtype.

, но определенно лучше / безопаснее знать тип заранее, как сказала Сандра.

0 голосов
/ 17 октября 2018

В ABAP это означает, что вы можете использовать объект данных любого типа (самый простой способ - объявить его с помощью DATA).

Но это может быть более ограничительнымв соответствии с тем, как разработчик закодировал свой метод.

Здесь я узнаю метод компонентов WebUI (CRM, SOLMAN,…), поэтому объект данных должен соответствовать «some_object», к которому вы обращаетесь.Выполните отладку GET_PROPERTIES, если вы не уверены.

...