Есть мнение, что каждый ABAP-разработчик написал свой логгер. Но может ли ваш логгер добавлять произвольные поля или например «проваливаться в транзакции»? И все это стандартными возможностями без каких-либо точек расширения. Ниже представляю описание своего класса для ведения логов. Скачать его можно через ABAP Git по ссылке.
Читать дальше…Бинарный поиск по таблице LOOP AT … BINARY SEARCH
Иногда удобно найти записи в таблице используя бинарный поиск. Конструкция LOOP AT … BINARY SEARCH в ABAP отсутствует, но можно ее смоделировать. При выполнении READ TABLE … BINARY SEARCH, в переменную sy-tabix возвращается индекс первой найденной строки. Для поиска остальных строк необходимо считать следующие строки проверить в них значения ключевых полей.
Читать дальше…Структурная печать XML документа
На ABAP уровне XML документы обычно не содержат разделители между тэгами, т.е. содержимое XML представлено в виде одной строки. Это не мешает работать программе, но если потребуется вывести XML на просмотр или сохранить в файл, то он будет не читаемый. Повысить читаемость можно если каждый новый тэг писать на новой строке и делать отступ, соответствующий уровню иерархии тэга. Ниже представлен код, который делает структурную печать XML строки.
Читать дальше…Произношение текста через ABAP
Оказывается, в SAP можно получить доступ к голосовому ассистенту
1 2 3 4 5 6 7 8 9 10 11 12 |
INCLUDE ole2incl. DATA ole TYPE ole2_object. DATA voice TYPE ole2_object. CREATE OBJECT voice 'SAPI.SpVoice'. CALL METHOD OF voice 'speak' = ole EXPORTING #1 = 'Привет, мир'. |
Передача INITIAL значений в ABAP Proxy
Недавно я настраивал интеграцию одного сервиса, где из 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.
Читать дальше…Сериализация данных и типов данных
Существует несколько способов сериализации и десериализации данных. Самые популярные из них:
- В формате XML через CALL TRANSFORMATION
- В формате JSON через класс /UI2/CL_JSON
- В кластер данных через оператор EXPORT
В некоторых случаях, помимо самих данных, требуется сериализовать тип данных (например, если тип сериализуемых данных определяется в рантайме). Сделать это можно через класс CL_SALV_BS_DDIC.
Читать дальше…Доступ к приватным атрибутам класса
В языке ABAP есть реализация паттерна «снимок» (Memento), цель которого сохранять и восстанавливать состояния объектов. Под состоянием понимается значения всех его атрибутов. Используя данный паттерн можно считать PROTECTED и PRIVATE атрибуты и изменять из значения в произвольном объекте.
Читать дальше…Поиск объектов в ABAP-словаре
Зачастую программисту проще создать новый элемент данных, структуру или тип диапазона данных, чем найти уже существующий объект. Это связано с отсутствием удобного инструмента поиска объектов в ABAP-словаре. В связи с этим, в разработках образуется избыточное количество словарных объектов, дублирующие друг друга. Для сокращения времени поиска нужных объектов, представляю вам свою утилиту.
Древовидное представления данных на примерах
Ниже представлены различные варианты реализации древовидного представления данных.