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

Например, я сделал простой исполняемый файл с одной командой:

echo «SAP running» >> sap.log

Наша задача научиться его запускать локально на сервере, где работает SAP. А затем удаленно, где SAP не работает.

Для начала настроим сам SAP на выполнение заданной нами команды. Для этого в транзакции SM69 нужно создать запись.

Запускаем.

Обратите внимание, что команда запускается из одного каталога, а результат выводится в другой — рабочий каталог SAP. Во избежание такого нужно указывать абсолютные пути или использовать переменные среды окружения пользователя adm.

Если присмотреться, то на экране есть еще возможность запуска удаленно, указав Target или Remote Host, Но это варианты для SAP систем.

Если вы помните предыдущие заметки, то мы можем планировать задания в SM36. Если приглядеться, то там есть вот такая штучка:

Это позволит нам запускать команду операционной системы из планировщика SAP.

Если мы хотим в ABAP сделать что-то интересное, то можно запустить команду из ABAP несколькими способами:
Функциональный модуль SXPG_COMMAND_EXECUTE или команда OPEN DATASET.

Программа RSBDCOS0 позволит запустить программу без создания каких-либо записей в SM69.

Остлось выяснить как же запустить команду на удаленном сервере, где нет SAP. Исходя из моих изысканий и прошлого опыта работы админом, могу только предложить удаленное выполнение команд с помощью PowerShell и ssh. То есть мы на стороне САП сервера пишем скрипт, который по ssh логинится на удаленную машину и запускает выполнение скрипта.

ssh osuser@host «cd testdir;./test.sh»

Либо для Windows
Invoke-Command -ComputerName Server01, Server02 -ScriptBlock {Get-UICulture}

Prooflink: https://docs.microsoft.com/en-us/powershell/scripting/core-powershell/running-remote-commands?view=powershell-5.1

Таким образом, типичный интеграционной процесс может выглядеть так:
— делаем File Event Scheduler, который мы написали ранее. Он смотрит на появление файла.
— файл появился, запускается HR программа по считыванию файла. Программа читает файл и удаляет/архивирует его в случае успеха

Либо
— запускается программа выгрузки данных для внешней системы
— запускается команда операционной системы для подачи сигнала внешней системе о наличии файла (или передача файла средствами FTP/CURL)

Хотя все это можно сделать и в самом ABAP напрямую вызывая сервисы FTP/HTTP/SMTP/WebService внешних систем. Пожалуй, единственный способ, когда АБАП бессилен, это если нам нужно на уровне ОС запустить команду под другим пользователем. АБАП так не сможет.