Как выполнить запуск Python скрипта из ABAP?

Как выполнить запуск Python скрипта из ABAP?

Признаюсь...

Эту заметку я украл написал под впечатлением от прочитанного материала на SAP Blogs. Ссылку на материал, взволновавший меня, представлен ниже:

Первоисточник: How To Use Python via External OS Commands and Embed the Scripts Seamlessly

Таким образом, читать или не читать это - дело ваше. Я, в свою очередь, выполню вольный перевод материала, представленного по ссылке выше, с небольшими вкраплениями отсебятины. Ну а заметку можно отнести к категории userhack.

О чем здесь пойдет речь?

Речь здесь пойдет о запуске python скриптов из ABAP. Для запуска скриптов применяется инструментарий внешних команд. Автор материала утверждает, что запуск внешних команд с помощью ФМ SXPG_COMMAND_EXECUTE не очень хорошая практика, с чем, в общем-то, нельзя не согласиться. Но рассматриваемый вариант не претендует на лучшие практики.

Дистрибутив Python

На сервере приложений, на котором развернута ваша SAP система, необходимо установить/скопировать дистрибутив Python.

Определение внешней команды

С помощью транзакции SM69 определите внешнюю команду

См. Maintaining External Commands

Определение логических и физических путей файлов

См. Setting Platform-Independent File Names

См. справочное описание по следующему пути в SPRO:

IMG: SAP NetWeaver -> Application Server -> System Administration -> Platform-Independent File Names

Определите физический путь, куда будет выгружен python скрипт на сервере приложений посредством транзакции FILE

Также необходимо определить параметры для нового логического файла

См. Logical File Names

Создание ABAP инклюда с python кодом

Создайте инклюд, содержащий python код. Выполнить это можно посредством транзакции SE80

См. Include Programs

Создание ФМ для запуска скрипта

Исходный код функционального модуля приведен у первоисточника. В результате выполнения ФМ, на сервере приложений (согласно выполненным вами настройкам) будет создан файл в формате *.py, куда переносится исходный код из ABAP инклюда. Затем осуществляется запуск самого скрипта через вызов ФМ SXPG_STEP_COMMAND_START. Если все сделано правильно, вы увидите ответ интерпретатора python

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

Резюме

Во-первых, это красиво. Использовать это или нет - дело второстепенное. Холивары о небезопасности данного решения начинать глупо и нецелесообразно. Иметь представление о том, что такие схемы используются в принципе, а также они вполне себе реализуемые и юзабельные - вот основная суть подобных обзоров. Расширяем кругозор, и поблагодарим автора Stefan Schnell.