Как Выбрать Тексты Sapscript В Cds

Все больше и больше разработчиков ABAP используют различные CDS .

Внутри CDS вы можете выбирать данные из таблиц и производить некоторые манипуляции с выборками с помощью методов AMDP и виртуальных элементов.

Однако выбрать, например, тексты SAPScript в CDS не получится, так как тексты хранятся в таблице в двоичном виде.

Я расскажу вам о своем собственном решении и о том, которое я нашел позже.

стандартный .



Фон или собственный велосипед

Пару месяцев назад мы столкнулись с проблемой выборки текста SAPScript внутри CDS. В приложении Fioiri для списка договоров необходимо было добавить фильтр по атрибуту «Тип цены».

Значение параметра определялось наличием текста для конкретного текстового TDID SapScript. Если текста не было, тип определялся как фиксированный, в противном случае — как индексный.

Список был реализован с использованием метода AMDP. Мы искали ответ в основном со стороны семплирования, т.е.

как выделять текст внутри CDS. Ничего толком не найдя, мы решили сохранить текст в Z-таблицу и выбирать из нее.

Мы создали две таблицы: одна определяла, какие тексты будут сохраняться, вторая хранила сами данные.



Как выбрать тексты SAPScript в CDS

Схема нашего решения В методе, который сохранял тексты SAPScript, мы добавили сохранение в наши таблицы.

Выбор из ZABAP_LTEXT_DAT был добавлен в CDS. Проблема была решена.

Спустя четыре месяца обнаружились проблемы — у некоторых контрактов текст сохранялся в других процессах, где сохранение в таблице ZABAP_LTEXT* не работало.

Мы начали искать место в коде, которое бы обрабатывало любые изменения в тексте SAPScript и где можно было бы сохранить их в Z-таблицах.

Мы такого места не нашли, но нашли стандартное решение этой проблемы.



Стандартное решение

При поиске расширений в функциональном модуле COMMIT_TEXT мы обнаружили класс CL_RSTX_TEXT_CHANGE_POSTPROC, появившийся в выпуске 740. В этом классе мы встретили метод HANDLE_TEXT_CHANGES, внутри которого динамически вызывается метод UPDATE_LONGTEXT_DB класса CL_ESH_SR_LTXT_UTLY. Скромный комментарий рядом с константой подтвердил гипотезу, что это то, что нам нужно:

Как выбрать тексты SAPScript в CDS

Метод, сохраняющий некоторые тексты SAPscript в незашифрованном виде.

Далее мы нашли таблицы ESH_SR_TXT_OBJ и ESH_SR_LTXT. ESH_SR_TXT_OBJ хранит длинные текстовые идентификаторы, которые при сохранении копируются в ESH_SR_LTXT. Их схема очень похожа на то, что мы сделали:

Как выбрать тексты SAPScript в CDS

Стандартная схема решения Остается только создать представление обслуживания для ESH_SR_TXT_OBJ, добавить в таблицу необходимые идентификаторы и выбрать открытый текст из ESH_SR_LTXT в CDS. Я надеюсь, что эта статья сэкономит время не одному разработчику, а также покажет, как разные взгляды на проблему могут дать разные решения.

Хотя наше решение было похоже на стандартное, было бы неплохо обнаружить стандартное раньше.

Теги: #ERP-системы #abap #abap sap

Вместе с данным постом часто просматривают: