Недавно я настраивал интеграцию одного сервиса, где из SAP необходимо было передать набор полей, часть из которых были необязательны к заполнению. На стороне ABAP использовался класс, сгенерированный на основе WSDL поставщика. До определенного момента все работало хорошо. Проблемы начались, когда потребовалось передать в опциональном параметре значение по умолчанию (INITIAL). В этом случае сгенерированная полезная нагрузка не содержала нужных тегов в окончательном XML-документе. Из-за отсутствия тэгов, сервер возвращал ошибку передачи данных.
Читать дальше…Извлечение уникальных значений из внутренней таблицы
Начиная с версии ABAP 7.4 появилась возможность быстро и эффективно извлечь уникальные значения определенного столбца из таблицы.
В общем случае код выглядит следующим образом
1 2 3 4 5 6 7 8 |
DATA lt_unique TYPE STANDARD TABLE OF fieldtype. lt_unique = VALUE #( FOR GROUPS value OF <line> IN it_itab GROUP BY <line>-field WITHOUT MEMBERS ( value ) ). |
Ниже примеры извлечения таблицы и ренджа уникальных значений TADIR-DEVCLASS.
Читать дальше…Транзакция на ракурс ведения
- Создаем транзакцию с начальным объектом «Транзакция с параметрами»
- В поле транзакция указываем SM30
- Устанавливаем флаг «Пропустить первый экран»
- Указываем параметры: VIEWNAME = «имя таблицы»; UPDATE = X
Программа для снятия скриншотов
В процессе работы часто приходится обмениваться скриншотами. Для информативности и акцентирования внимания на определенные области, на скриншотах наносятся текстовые комментарии, выделяются области, рисуются стрелки и т.п.
До недавнего времени, для снятия скриншотов я пользовался программой Lightshot, но по требованию ИБ от нее пришлось отказаться. После чего я решил написать свой Lightshot с открытым исходным кодом. Оставляю ссылки на исполняемый файл и на исходный код.
Читать дальше…Сериализация данных и типов данных
Существует несколько способов сериализации и десериализации данных. Самые популярные из них:
- В формате XML через CALL TRANSFORMATION
- В формате JSON через класс /UI2/CL_JSON
- В кластер данных через оператор EXPORT
В некоторых случаях, помимо самих данных, требуется сериализовать тип данных (например, если тип сериализуемых данных определяется в рантайме). Сделать это можно через класс CL_SALV_BS_DDIC.
Читать дальше…Доступ к приватным атрибутам класса
В языке ABAP есть реализация паттерна «снимок» (Memento), цель которого сохранять и восстанавливать состояния объектов. Под состоянием понимается значения всех его атрибутов. Используя данный паттерн можно считать PROTECTED и PRIVATE атрибуты и изменять из значения в произвольном объекте.
Читать дальше…Поиск объектов в ABAP-словаре
Зачастую программисту проще создать новый элемент данных, структуру или тип диапазона данных, чем найти уже существующий объект. Это связано с отсутствием удобного инструмента поиска объектов в ABAP-словаре. В связи с этим, в разработках образуется избыточное количество словарных объектов, дублирующие друг друга. Для сокращения времени поиска нужных объектов, представляю вам свою утилиту.
Древовидное представления данных на примерах
Ниже представлены различные варианты реализации древовидного представления данных.
Архитектурные шаблоны в ABAP: MVC, MVP, MVVM, MVA
MVC (Model-View-Controller) — фундаментальный шаблон проектирования, целью которого является отделение логики интерфейса пользователя от логики программирования. MVC имеет множество вариантов реализации. Существуют модификации шаблона, самые известные из них MVP и MVVM.
Ниже описана концепция архитектурного шаблона MVC и его модификаций MVP и MVVM. Приведена концепция шаблона MVA, основанная на паттернах MVC, MVP и MVVM и адаптирована под язык ABAP. Читать дальше…
Определение имени поля по его значению
В функциях (пригодных для повторного применения) анализа и обработки данных во внутренних таблиц необходимо знать лишь часть данных о таблицах: саму таблицу и имена тех полей, которые нужно обрабатывать. Возникает вопросы: «Каким должен быть интерфейс функции?» и «Как типизировать параметры?». Интерфейсы для внутренних таблиц еще не изобрели, поэтому в параметрах функции должна передаваться обрабатываемая таблица и названия полей для обработки.
Передача имена полей через параметры через параметры накладывает ряд ограничений. Любые действия с изменением структуры (переименование или удаление полей) будет требовать особой осторожности, так как в журнале использования поля отображаться не будут. Эта задача является примером, когда требуется определить названия поля структуры.
В общем случае постановка задачи звучит следующим образом: имеется структура LS_STRUCT. Требуется написать функцию, которая по значению поля будет возвращать его имя. То есть, при LS_STRUCT-SOME_FIELD вернет строку с содержимым SOME_FIELD.
Читать дальше…