Все больше и больше разработчиков ABAP используют различные CDS .
Внутри CDS вы можете выбирать данные из таблиц и производить некоторые манипуляции с выборками с помощью методов AMDP и виртуальных элементов.
Однако выбрать, например, тексты SAPScript в CDS не получится, так как тексты хранятся в таблице в двоичном виде.
Я расскажу вам о своем собственном решении и о том, которое я нашел позже.
Фон или собственный велосипед
Пару месяцев назад мы столкнулись с проблемой выборки текста SAPScript внутри CDS. В приложении Fioiri для списка договоров необходимо было добавить фильтр по атрибуту «Тип цены».Значение параметра определялось наличием текста для конкретного текстового TDID SapScript. Если текста не было, тип определялся как фиксированный, в противном случае — как индексный.
Список был реализован с использованием метода AMDP. Мы искали ответ в основном со стороны семплирования, т.е.
как выделять текст внутри CDS. Ничего толком не найдя, мы решили сохранить текст в Z-таблицу и выбирать из нее.
Мы создали две таблицы: одна определяла, какие тексты будут сохраняться, вторая хранила сами данные.
Схема нашего решения В методе, который сохранял тексты 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 в незашифрованном виде.
Далее мы нашли таблицы ESH_SR_TXT_OBJ и ESH_SR_LTXT. ESH_SR_TXT_OBJ хранит длинные текстовые идентификаторы, которые при сохранении копируются в ESH_SR_LTXT. Их схема очень похожа на то, что мы сделали:
Стандартная схема решения Остается только создать представление обслуживания для ESH_SR_TXT_OBJ, добавить в таблицу необходимые идентификаторы и выбрать открытый текст из ESH_SR_LTXT в CDS. Я надеюсь, что эта статья сэкономит время не одному разработчику, а также покажет, как разные взгляды на проблему могут дать разные решения.
Хотя наше решение было похоже на стандартное, было бы неплохо обнаружить стандартное раньше.
Теги: #ERP-системы #abap #abap sap
-
Почему Стоит Ходить На Конференции?
19 Oct, 24 -
Удержание Пространства От Flurry
19 Oct, 24