SXPG Framework

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

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

Существует как минимум три возможности вызова команд на сервере приложений:

  • Использование дополнения FILTER в OPEN DATASET
  • Использование команды CALL ‘SYSTEM’
  • Вызов команд через SXPG фреймворк

Первые два способа официально не рекомендуется использовать, по следующим причинам:

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

Рассмотрим третий вариант.

SXPG Framework по своей сути представляет доступ к заранее определённым и разрешённым командам и их вызовам через функциональные модули с префиксом SXPG_*. Список разрешённых команд определяется в транзакции SM69 (SM49).

SAP заранее уже определил ряд команд, которые можно переиспользовать для своих нужд, вместо заведения их аналогов. Команды ведутся в разрезе платформ, на которых они могут быть запущены — UNIX, WINDOWS и т.п. Соответственно при запуске команд сначала определяется в рамках какой ОС работает сервер приложений и уже потом происходит вызов команды относительно типа платформы.

Пользователь, под которым выполняются команды обычно имеет имя <sid>adm.

Создание и тестирование

Команды определяемые клиентом должны начинаться с Z* или Y*.

Создадим новую команду:

Определим её следующим образом:

Команда ls в UNIX системах позволяет вывести содержимое каталога.

Параметры команды могут быть заданы статически в определении команды или динамически передаваться через интерфейс SXPG. Чтобы иметь возможность задавать параметры команды динамически, необходимо включить галочку Additional parameters allowed.

Если требуется перед выполнением выполнить какую-либо валидацию команды (например доп. проверку полномочий), реализовать это можно указав в поле Check Module собственный ФМ, интерфейс которого будет аналогичен стандартному ФМ-у: SXPG_DUMMY_COMMAND_CHECK.

Протестировать команду можно там же в SM69 по F8. Зададим дополнительный параметр -a для вывода всех файлов:

При выполнении в Execution Target можно определить на каком сервере приложений её необходимо вызывать.

Результат выполнения команды:

Статус выполнения команды можно оценить по полям EXIT Code и EXIT Status. Статус О говорит об успешном выполнении команды, статус Е об ошибке при выполнении. Более подробное описание для UNIX систем описано в ноте: 1128667 — SXPG_COMMAND_EXECUTE: Parameters STATUS and EXITCODE.

Выполнение внешних команд

Перед выполнением любой команды происходит проверка полномочий по стандартному объекту полномочий — S_LOG_COM, его параметры:

  • COMMAND — определяет имя команды
  • OPSYSTEM — ОС
  • HOST — имя сервера приложений

Вызов команд из ABAP кода происходит через вызов ФМ:

  • SXPG_CALL_SYSTEM для выполнения на текущем сервере приложений
  • SXPG_COMMAND_EXECUTE для выполнения на заданном сервере приложений
  • SXPG_COMMAND_EXECUTE_LONG, аналогичен предыдущему, с возможностью передачи более длинного списка параметров для выполнения команды.

Данные ФМ-ы можно вызывать через RFC интерфейс.

Внешние команды могут быть частью фонового задания, как один из его шагов (определение команды в транзакции SM36):

Пример вызова в ABAP

Результат:

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *