Как выполнить запуск 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 определите внешнюю команду
Определение логических и физических путей файлов
См. Setting Platform-Independent File Names
См. справочное описание по следующему пути в SPRO:
IMG: SAP NetWeaver -> Application Server -> System Administration -> Platform-Independent File Names
Определите физический путь, куда будет выгружен python скрипт на сервере приложений посредством транзакции FILE
Также необходимо определить параметры для нового логического файла
Создание ABAP инклюда с python кодом
Создайте инклюд, содержащий python код. Выполнить это можно посредством транзакции SE80
См. Include Programs
Создание ФМ для запуска скрипта
Исходный код функционального модуля приведен у первоисточника. В результате выполнения ФМ, на сервере приложений (согласно выполненным вами настройкам) будет создан файл в формате *.py, куда переносится исходный код из ABAP инклюда. Затем осуществляется запуск самого скрипта через вызов ФМ SXPG_STEP_COMMAND_START. Если все сделано правильно, вы увидите ответ интерпретатора python
Затем выполняется удаление скрипта с сервера приложений. Как пишет автор, хранить сами скрипты на сервере приложений нет необходимости, так как они существуют в качестве инклюдов, и могут быть выгружены и запущены при наступлении такой необходимости.
Резюме
Во-первых, это красиво. Использовать это или нет - дело второстепенное. Холивары о небезопасности данного решения начинать глупо и нецелесообразно. Иметь представление о том, что такие схемы используются в принципе, а также они вполне себе реализуемые и юзабельные - вот основная суть подобных обзоров. Расширяем кругозор, и поблагодарим автора Stefan Schnell.