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

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

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

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

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

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

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

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

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

Трансформации — одновременно и хранилище шаблонов, и метод их обработки. Два-в-одном!

Допустим, что мы сложили данные в структуру вида:

Вот пример простой трансформации (ST, Simple Transformation):

ST — это такая личная саповская реализация упрощенных XSLT-преобразований, которые требуют меньших знаний и обладают большей интегрированностью в систему.

Запустить преобразование можно при помощи такой конструкции:

И вот мне понадобилось добавить малюсенькую деталь: дату в человеческом формате. ST такого не умеет. Только YYYY-MM-DD, только хардкор. Из более-менее применимого форматирования есть только обрезка лидирующих нулей:

Соответственно появляется выбор:

  • добавить поля в исходную структуру, не захотелось засорять
  • добавить вызов метода прямо в трансформацию, не сложилось
  • уходить от простых трансформаций к обычным

Вызов abap-метода из трансформации делается прмерно так:

Я попытался быстро встроить вызов своего класса, но не сложилось. [UPD. При случае надо вернуться к этой теме]

В результате я ушел в обычные широкоизвестные трансформации:

Работает. Кратко о впечатлениях:

Простоты поменьше. Появляются неочевидные вещи. Желательно глядеть исходный XML(результат трансформации данных ABAP), доступен через отладку. Функция format-date не поддерживается в моей системе. Редактор и отладка ошибок оставляют желать лучшего.

Всю отправку почты я завернул под капот небольшого помогательного класса:

 

PS. Транзакция для отдельного доступа к трансформациям — STRANS

PPS. Надо запомнить урл хорошей помогалки в разработке http://xsltransform.net/. Делает ровно то, что мне нужно.

Добавить комментарий

Ваш e-mail не будет опубликован.