Ещё один способ работы с файлами – теперь Base64

Есть много неочевидных способов хранить файлы. Вот ещё один из примерно двадцати семи.

Есть такой cпособ представления двоичного контента в виде текста: Base64.

Следовательно, любой файл можно представить в виде длинной константы типа string.  Чем больше файл, тем длиннее будет строка символов.

Вот только файл размером 10кб займёт примерно 200 строк текста.

Когда такое может пригодиться?

Например: для юнит-тестов с небольшим исходным файлом.  Тестовый класс получается более самодостаточным, переносимым и независимым от внешних обстоятельств.

В моём случае инсайт пришёл при работе с Excel-файлом в моём предыдущем посте “Ещё один способ прочитать содержимое Excel-файла”. Не всегда есть смысл изобретать какое-то особое место хранения файла, если можно положить файл напрямую в код.

Ещё один способ прочитать содержимое Excel-файла

Иногда просто удивительно, какой стоянкой велосипедов может быть SAP.

Есть в целом типичная задача – прочитать содержимое Excel-файла. И есть примерно двадцать семь способов её решить. В моём недавнем случае были ограничения: должно работать не только в SAP-GUI, должно уметь работать с несколькими листами, не должно требовать установки отдельных громоздких библиотек. Это отсекло большинство моих предыдущих подходов, и я отправился на поиски новых велосипедов.

И найденный велосипед имеет имя CL_FDT_XL_SPREADSHEET. Работать с ним проще простого: (далее…)

ABAP Test Double Framework – первое знакомство

Cтолкнулся с новым фреймворком Test Double. В чём же основной смысл и назначение этого фреймворка, с чем его едят?

Дано: Основной класс ZCL_ACTION

И реализация класса ZCL_ACTOR при этом следующая:

Требуется: написать юнит-тест для класса ZCL_ACTION.

(далее…)

Два способа выгрузить файл

Без предисловий, сразу код в начальной итерации:

А теперь можно его покритиковать. (далее…)

Как варить компот

Иногда так получается, что в одном глобальном расширении внутри одного большого куска ABAP-кода скапливается много маленьких кусочков, делающие совершенно разные вещи для совершенно разных людей/модулей/пакетов.

Вот для примера типичный код из события OpenFI BTE 1120 (замещения перед сохранением бухгалтерской проводки):
User-exit source sample
Вот такой компот, бывает что и на тысячи строк тянется эта простыня.

Почему так получается? Это скорее следствие скупости, лени, спешки плюс недостаток фантазии.

Работать – работает, больших проблем не доставляет. Открыл – всё видно. Можно даже копипастить подходы, использовать общие переменные.

Особая проблема с таким подходом возникает только в ситуации конкурентных правок. Но если такие ситуации всплывают раз в год, то проще перебороть и запинать, чем вылечить проблему в корне.

Хорошая идея – категорический запрет на решение разных задач в рамках  одного ABAP фрагмента (инклюда, функции, метода). Совсем уж общего решения предложить нельзя, так как есть нюансы, да и многое дело вкуса.

Приступим к первой итерации.

(далее…)

Трансформации, простые и не очень

Вполне бытовая задача при разработке ERP-системы – настройка оповещений посредством электронной почты.

Соответственно сразу возникает несколько идей, куда ложить текст шаблона:

  • непосредственно в тексте программы, хардкод никто не отменял
  • в хранилищах  OAOR/SMW0 – по обстоятельстам
  • в текстах SO10, если они довольно простые и/или ведутся прямо в продуктивной системе

… хотя можно встретить и более экзотические варианты.

Задача может стать чуть более изощренной, если потребуется в письмо добавить красоты в виде HTML. В первом приближении HTML – это простой текст со специальной разметкой в виде тегов. Поэтому можно не отказываться от старых вариантов и мириться с неудобствами в виде редактирования plain-text и отсутствия проверок.

Однако задача может стать еще сложнее, если появляется динамичный контент в виде таблиц. И тут появляется развилка:

  • дополнительно нагружать текстовый шаблон особой разметкой и реализовать её обработку на ABAP, что не технологично
  • искать альтернативные технологии

И как вы уже поняли из заголовка статьи – далее речь пойдёт о втором варианте в подробностях. (далее…)

Всё под контролем – очередь транспортных запросов

Есть у меня один повод для переживаний – это запросы, которые не доехали до продакшена.

Они всё время норовят где-то затеряться и забыться.

Я-то сделал, отдал в тест. А дальше дело ответственного консультанта, мяч уже на его стороне. 

Дано:

  • Проект поддержки системы ERP
  • Обычный ландшафт DEV-QAS-PRD
  • Сторонняя система управления задачами
  • Куча мелких задач на доработку

При этом стоит в обязательном порядке связывать создаваемый запрос с задачей/инцидентом.

Раз-два и вот прототип маленькой помогалки готов:

Обзор транспортных запросов

Номер запроса, дата, владелец, описание, привязка к задаче и куча зеленых галочек.

Всё понятно – один сложный запрос ещё варится, два запроса уехали в прод, четвёртый на тесте.

Как же я люблю когда много зеленых галочек. Успокаивает. Что ещё нужно?

А некоторые солидные господа используют для этого Solution Manager ChaRM. Но, мне почему-то кажется, что там не будет такой кучи зеленых галочек. Это фатальный недостаток.