Workflow. Отправка электронных писем

Пояснение к заметке

В этой заметке я постараюсь не быть скучным и предсказуемым.

В этой заметке я не буду пошагово разглагольствовать о том, как же круто, что можно сформировать и отправить электронное сообщение в потоке операций через шаг типа Send Mail. Вы, скорее всего, догадываетесь об этом сами.

См. Mail Transmission

В этой заметке я представлю вариант использования задачи типа Activityдля формирования и отправки письма нужному адресату.

См. Activity

Стоит добавить, что интересно мне здесь будет не сколько отправка письма, сколько преобразование текста, содержащегося в задаче, в формат HTML.

Зачем так извращаться, блогер?

Шаг типа Activity в потоке операций - это универсальный инструмент, который помогает решать много задач. Одной из таких задач вполне себе может быть и отправка письма, учитывая, что его текст содержится в этой же самой задаче.

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

Про возможность использования условий в задачах типа Activity, я писал в заметке Стандартные возможности настройки задачи потока операций

В этой заметке я постараюсь рассказать каким образом добавить немного динамичности обычному тексту задачи, преобразовав его в формат HTML.

1. Создание потока операций

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

Для управления данной задачей я буду использовать utility-класс

См. ABAP Classes in Workflow

Пример создания utility-класса см. в заметке Поиск обработчика задачи в потоке операций (пункт #3. Создание utility-класса)

2. Текст задачи

Добавлю текст задачи, который будет отправляться адресату

2. Обработка текста задачи

Алгоритм работы метода класса в данном конкретном случае должен быть приблизительно следующий:

  1. Определить идентификатор шага/задачи (workitem id) в котором(ой) содержится отправляемый текст
  2. Считать текст из задачи (на помощь придет ФМ SWU_GET_TASK_TEXTLINES)
  3. Добавить в тело формируемого сообщения открывающий и закрывающий  <HTML>, <BODY> теги, и между ними добавить текст из задачи
  4. Сформировать электронное письмо, скажем, посредством класса CL_BCS
    Следует также помнить о том, что перед запуском потребуется выполнить binding элементов контейнера потока операций

См. Definition of Binding

Тестирование. Итерация 1

Тестирование будет проведено весьма оригинально. А именно:

  1. Я запущу поток поток операций
  2. Скопирую идентификатор нужного мне _workitem id _в котором хранится текст задачи и прогоню его через созданный ранее метод utility-класса
  3. В результате у меня должно сформироваться письмо, которое в системе SAP можно проверить через транзакцию SOST

Тестирование. Итерация 2

Усложню задачу, применив телу письма простенький CSS

N.B. Обратите свое внимание на то, что внешний вид письма, который доступен через транзакцию SOST может не соответствовать тому, что вы будете видеть в почтовом клиенте. Советую обязательно проверять как текст будет выглядеть в почтовом клиенте.

Тестирование. Итерация 3

Чтобы убедиться, что я не обманываю вас и самого себя, и то, что представлено в итерации #2 не инсценировка, я уберу в коде метода добавление HTML тэгов, и проверю, что было сформировано в транзакции SOST

Спасибо за внимание. Вы, как всегда, непревзойденны. Ваш, ignatov.