PR

【SAP】外部コマンドの実行方法を3分で解説―SM69

ABAP

外部コマンドとは、その名の通りSAP上からOSコマンド(LinuxやAIXなど)やバッチやシェルを動かすときに利用る機能です。

例えば、サーバー上に配置されているファイル名称を取得したい!(Linuxのlsコマンド)といった場合や、ABAPからFTP連携できる仕組みを実現したい!といった場合に外部コマンドが活躍します。

このページでは、外部コマンドの仕組みを初心者向けに1から分かりやすく解説し、ABAPプログラミングのサンプルまでをご紹介します。

このページで学べる内容
  • 外部コマンドとは?
    • SM69―外部コマンドの登録
  • ABAPからの呼び出し方法
  • 外部コマンドを利用したサンプルプログラム

ちょっとニッチな機能ですが、これを知っていればABAPerとしての幅が広がる便利な知識です。是非最後までご覧ください。

スポンサーリンク

外部コマンドとは?

外部コマンドとは、その名の通りサーバ上で直接OSコマンド(もしくはバッチorシェル)を実行する仕組みのこと。

トランザクションコード:SM69で事前に定義しておき、ABAPプログラムから呼び出す形で利用します。

SM69,外部コマンド,外部OSコマンド

SAPはあくまでもソフトウェア製品の1つなので、あくまでも何かしらのサーバー上に乗っかっている状態。このサーバーに対して直接コマンドを受け渡す唯一の手段は外部コマンドです。

SM69:外部コマンドの登録方法

外部コマンドの事前定義はトランザクションコード:SM69から実行します。ここでは、外部コマンドの定義方法を必要最低限の項目に絞って解説。

外部コマンドというと何か難しいように感じますが、決して難しくはありませんので1個1個ゆっくり確認していきましょう。

コマンド定義

SM69

まずはじめにコマンド名を定義します。コマンド名は、特に制約なくどのような名称でも問題ありません。

標準であらかじめ用意されているコマンドも存在するため、頭に「Z」を付与しておくのがお勧めです。

オペレーティングシステムの項目で、OSの種類を指定します。上の画像では「Linux」を指定していますが、他にUNIX系のサーバやWindowsなどを選択することができます。

オペレーティングシステムの選択

オペレーティングシステム項目の選択は、入力ミス防止の観点から検索ヘルプ経由の入力しか認められていません。

なお、ここで何も選択しないことも可能です。その場合、SAPは自動的に対象のオペレーティングシステムを選定する仕組みです。ただし、この自動選定には限界があるため、動作環境が確定している場合は明示的に対象のOSを指定するのがおすすめです。

OSコマンド定義

SM69

OSコマンド項目に外部コマンドを定義します。画像の例は、Linux上でファイル一覧を取得する「ls」コマンド定義です。

OSコマンドのパラメータに、例えば特定のディレクトリを指定しておけばそのディレクトリにあるファイル一覧を表示することができます。

OSコマンドのパラメータ

あえて何も設定せず、追加パラメータはABAPのプログラムから渡すようにするのが一般的です。

実際のコーディング方法はページ後半で。

これで、外部コマンド定義は完了。SM69の画面上で実行ボタンを押せば実際に外部コマンドをサーバー上に渡すことが可能で、結果も確認することが可能です。

ABAPプログラムからの外部コマンド実行

ここからはSM69で定義した外部コマンドをプログラム上で実行する方法を解説します。

SXPG_CALL_SYSTEM

外部コマンドの実行は、SAP標準の汎用モジュール「SXPG_CALL_SYSTEM」を利用します。

汎用モジュール「SXPG_CALL_SYSTEM」のサンプルプログラムはこちら。

  CALL FUNCTION 'SXPG_CALL_SYSTEM'
    EXPORTING
      COMMANDNAME                    = 'ZLS'
      ADDITIONAL_PARAMETERS          = '/test/test/test/'
    IMPORTING
      STATUS                         = LV_STATUS
      EXITCODE                       = LV_EXITCODE
    TABLES
      EXEC_PROTOCOL                  = LT_TBL
    EXCEPTIONS
      NO_PERMISSION                  = 1
      COMMAND_NOT_FOUND              = 2
      PARAMETERS_TOO_LONG            = 3
      SECURITY_RISK                  = 4
      WRONG_CHECK_CALL_INTERFACE     = 5
      PROGRAM_START_ERROR            = 6
      PROGRAM_TERMINATION_ERROR      = 7
      X_ERROR                        = 8
      PARAMETER_EXPECTED             = 9
      TOO_MANY_PARAMETERS            = 10
      ILLEGAL_COMMAND                = 11
      OTHERS                         = 12.
Exportパラメータ説明
COMMANDNAME外部コマンド名称(SM69で定義したコマンド名)
ADDITIONAL_PARAMETERS外部コマンドへ渡すパラメータ
Importパラメータ説明
STATUS外部コマンドが正常に実行できたかどうか?
EXITCODE外部コマンドから返却されるリターンコード
Tablesパラメータ説明
EXEC_PROTOCOL外部コマンドの出力結果

たったこれだけで、SAPにおける外部コマンドの利用はOKです。

実際に外部コマンドを利用するサンプルコードを以下に記載します。

REPORT Z_EXECUTE_OS_COMMAND.

DATA: LS_COMMAND TYPE XSTRING,
      LT_OUTPUT  TYPE TABLE OF STRING,
      LS_OUTPUT  LIKE LINE OF LT_OUTPUT.

LS_COMMAND = 'LS -L'. " 実行するOSコマンドを設定

CALL FUNCTION 'SXPG_CALL_SYSTEM'
  EXPORTING
    COMMANDNAME            = LS_COMMAND
  TABLES
    EXEC_PROTOCOL          = LT_OUTPUT
  EXCEPTIONS
    NO_PERMISSION          = 1
    COMMAND_NOT_FOUND      = 2
    PARAMETERS_TOO_LONG    = 3
    SECURITY_RISK          = 4
    WRONG_SHELL            = 5
    CANNOT_EXECUTE_COMMAND = 6
    PROGRAM_START_FAILED   = 7
    PROGRAM_TERMINATION_FAILED = 8
    X_ERROR                = 9
    PARAMETER_EXPECTED     = 10
    TOO_MANY_PARAMETERS    = 11
    ILLEGAL_COMMAND        = 12
    WRONG_ASYNCHRONOUS_TYPE = 13
    JOBCOUNT_ERROR         = 14
    OTHERS                 = 15.

IF SY-SUBRC = 0.
  LOOP AT LT_OUTPUT INTO LS_OUTPUT.
    WRITE: / LS_OUTPUT.
  ENDLOOP.
ELSE.
  WRITE: / 'ERROR OCCURRED: ', SY-SUBRC.
ENDIF.

上記のコードでは、 汎用モジュール "SXPG_CALL_SYSTEM" を使用して、 "ls -l" コマンドを実行し、その結果を出力します。

SXPG_CALL_SYSTEM 関数は、 commandname パラメーターに実行するコマンドを指定し、 exec_protocol パラメーターに出力を格納するテーブルを指定します。関数の呼び出し後、出力をループして表示します。

関連 DATA命令 / LOOP命令 / SY-SUBRC / WRITE命令

ABAPを1から学習したい方は

初めてABAPを勉強するのは結構難しいですよね。

でもその悩みを抱えているのは一人じゃありません。全てのABAP使いが同じ道を進んできました。

ABAPをはじめとするプログラミングスキルを武器に、時間と場所に捉われない自由な生き方を目指してみませんか?

あなたの技術、もっと価値ある場所で活かしませんか?
SAPエンジニアのキャリア支援はこちらから↓

No.1 > 外資系・IT業界などハイクラスの転職なら【アクシスコンサルティング】blank
4人に1人のコンサルタントが選ぶパートナー!
ビッグ4やアクセンチュアへの転職を実現し年収1000万へ。

No.2 > IT・Web転職特化エージェント【レバテックキャリアblank
blank
サービス利用者数20万人突破。

平均年収アップ率77%であなたの転職成功を保証します。

No.3 > blankリクルートエージェント
blank
\転職支援実績NO.1/

応募が殺到しすぎるが故に・・・非公開にせざるを得ない魅力的な求人が多数!

読者料典 【完全無料】ABAP:学習カリキュラム ←こちらから!

このWebサイトは現役のエンジニアが以下3点を目的として運営しています。

  1. 勉強:一度理解した内容を忘れないように。
    → アウトプットは「最強のインプット」である! 
  2. 備忘:忘れたとしても後から見返せるように。
    → 未来の自分への「お手紙」を書いています。 
  3. 共有:〇〇ってこうだったんだ!の感動をシェアできるように。
    → あなたの知識は誰かにとっての「価値ある情報」です。 

副業ブログの始め方はこちらから

スポンサーリンク
ABAPBASISSAP
シェアする
ビズドットオンラインをフォローする
blank
ビズドットオンライン
タイトルとURLをコピーしました