Создать глубокую сущность SAPUI5 - данные позиции не передаются - PullRequest
0 голосов
/ 06 августа 2020

Я использовал следующий учебник для создания приложения Fiori с глубокой сущностью (я использовал заголовок счета-фактуры + элементы): https://blogs.sap.com/2017/07/18/steps-to-create-deep-insert-odata/

Все работает нормально, пока я не начну отладку в бэкэнд. Сервис отправляет данные правильно, но в бэкэнде элементы отсутствуют. Бэкэнд-код:

METHOD /iwbep/if_mgw_appl_srv_runtime~create_deep_entity.
    DATA custom_create_deep_entity TYPE zcl_xxx_mpc_ext=>ts_deep_entity.

    CASE iv_entity_set_name.
      WHEN 'xxxSet'.
        CALL METHOD me->custom_create_deep_entity
          EXPORTING
            iv_entity_name          = iv_entity_name
            iv_entity_set_name      = iv_entity_set_name
            iv_source_name          = iv_source_name
            it_key_tab              = it_key_tab
            it_navigation_path      = it_navigation_path
            io_expand               = io_expand
            io_tech_request_context = io_tech_request_context
            io_data_provider        = io_data_provider
          IMPORTING
            er_deep_entity          = custom_create_deep_entity.

        copy_data_to_ref(
          EXPORTING
            is_data = custom_create_deep_entity
          CHANGING
            cr_data = er_deep_entity
        ).
    ENDCASE.
  ENDMETHOD.

  METHOD custom_create_deep_entity.
    DATA: lr_deep_entity TYPE zcl_xxx_mpc_ext=>ts_deep_entity,
          lt_items       TYPE zcl_xxx_mpc=>tt_zinvoiceitem,
          ls_items       TYPE zcl_xxx_mpc=>ts_zinvoiceitem.

    io_data_provider->read_entry_data(
      IMPORTING
        es_data = lr_deep_entity ).

    ls_header_input = VALUE #(
      bukrs = lr_deep_entity-bukrs
      wrbtr = lr_deep_entity-wrbtr
    ).

    LOOP AT lr_deep_entity-items ASSIGNING FIELD-SYMBOL(<ls_item>).
      "never reached because 'items' is empty
    ENDLOOP.

    er_deep_entity = VALUE #(
      bukrs = ls_header_input-bukrs
      wrbtr = ls_header_input-wrbtr
      items = lr_deep_entity-items
    ).
  ENDMETHOD.

Переопределенный метод DEFINE в классе MPC_EXT:

  METHOD define.
    super->define( ).
    DATA:
      lo_annotation   TYPE REF TO /iwbep/if_mgw_odata_annotation,
      lo_entity_type  TYPE REF TO /iwbep/if_mgw_odata_entity_typ,
      lo_complex_type TYPE REF TO /iwbep/if_mgw_odata_cmplx_type,
      lo_property     TYPE REF TO /iwbep/if_mgw_odata_property,
      lo_entity_set   TYPE REF TO /iwbep/if_mgw_odata_entity_set.

    lo_entity_type = model->get_entity_type( iv_entity_name = 'Zxxxxxx' ). 

    lo_entity_type->bind_structure( iv_structure_name  = 'ZCL_XXX_MPC_EXT=>TS_DEEP_ENTITY' ).
    ENDMETHOD.

Нужно ли мне переопределять какие-либо другие методы, которые запрещают передачу данных элемента?

Спасибо :)

1 Ответ

0 голосов
/ 10 августа 2020

Как выглядит структура zcl_xxx_mpc_ext => ts_deep_entity. ?

Изменить имена навигации и имя базовой структуры для навигации в соответствии с типами, упомянутыми в Вкладка типов в классе __MPC_EXT вашего проекта. [Источник]

Как выглядит ваша полезная нагрузка при вызове Сервиса?

Если полезная нагрузка выглядит правильно, у вас явно проблема с вашей структурой ts_deep_entity

...