бы получить значения виртуальных колонок из ABAPа, а не из Fiori приложения.
Через http запрос к одата сервису, где реализована эта cds
Да, если не получится никак больше реализовать, то придётся так. Но это как-то через чур. Может, всё таки есть какие-то вспомогательные классы или ещё какие обходные пути...
Не пробовал, но думаю что возможно сделать через amdp функцию
это тогда придётся полностью все CDS на эту AMPD функцию переписать. тоже так себе работка)
можно покопать в сторону класса cl_sadl_abqi или дебагом пройти http вызов по классам sadl
Спасибо! Получилось так: DATA(lo_abqi) = cl_sadl_abqi_factory=>create_for_entity( EXPORTING io_mdp = cl_sadl_mdp_exposure=>get_for_entity( iv_type = 'CDS' iv_id = '<CDS_NAME>' ) iv_entity_id = cl_sadl_mdp_exposure=>get_exposure_entity_id( iv_entity_type = 'CDS' iv_entity_id = '<CDS_NAME>' ) ). TYPES: BEGIN OF ts_data, valuetext TYPE string, tablehead TYPE string, tablecells TYPE string, END OF ts_data. DATA lt_data TYPE STANDARD TABLE OF ts_data. lo_abqi->select( EXPORTING is_requested = VALUE #( fill_data = abap_true elements = VALUE #( ( `VALUETEXT` ) ( `TABLEHEAD` ) ( `TABLECELLS` ) ) ) is_paging = VALUE #( maximum_rows = 10 ) IMPORTING et_data_rows = lt_data ).
А что за задача была поставлена ? Из-за виртуальных элементов нет возможности через open sql?
Виртуальные элементы не заполняются при простом SELECT. Как уже написали выше, нужно чтобы SADL запускался.
Ещё придумал вариант попроще: выбрать нужные данные простым ABAP SQL, а затем вручную запустить методы if_sadl_exit_calc_element_read~get_calculation_info if_sadl_exit_calc_element_read~calculate чтобы заполнить вычисляемые колонки :)
Их параметры тоже вручную заполнить?
Да. У меня просто один класс для вычисляемых полей и поэтому просто получается: SELECT ColumnNeededForCalculation, CalculatedColumn FROM zcds_calc_test INTO TABLE @DATA(lt_data) UP TO 1 ROWS. DATA(lo_calc) = new zcl_cds_virtual_calc( ). DATA(lt_elem) = VALUE if_sadl_exit_calc_element_read=>tt_elements( ( `CALCULATEDCOLUMN` ) ). lo_calc->if_sadl_exit_calc_element_read~get_calculation_info( EXPORTING it_requested_calc_elements = lt_elem iv_entity = `ZCDS_CALC_TEST` ). lo_calc->if_sadl_exit_calc_element_read~calculate( EXPORTING it_original_data = lt_data it_requested_calc_elements = lt_elem CHANGING ct_calculated_data = lt_data ).
А вы свой универсальный сделали?
Нет. Просто для этой задачи. Здесь просто нужно знать какие ColumnsNeededForCalculation нужно выбирать, чтобы вычислялись CalculatedColumns. Может даже if_sadl_exit_calc_element_read~get_calculation_info не понадобится запускать, но в моём случае нужно...
Эт понятно. Я вот и спросила что за задача была, ведь если запроектировали виртуальные значит так и придумали через sadl . Если бы цели были выбирать из абапа там же рядом бы и программировали логику
Нужно, чтобы и через SADL и через ABAP были видны одни и те же данные. И да, спасибо! Именно твой вопрос и подтолкнул к использованию ABAP как и описал выше. Так меньше оверхеда получается, если данные нужны для ABAP.
А ALV with IDA уже ещё пока не выбирает виртуальные поля? (Она ж тоже через SADL)
Неа, IDA вываливается в ошибку (дамп) при использовании CDS с вычисляемыми параметрами.
А вот это интересно
https://blogs.sap.com/2023/08/22/alv-ida-using-cds-view-long-text-using-calculation-field/ Вот недавно был пост по этому поводу
Да, но это про вычисляемые поля в IDA, а не в CDS
Обсуждают сегодня