「SAP Basis概要の教科書」NO.18 移送コマンド(TP.exe)の活用
INDEX LINK
はじめに
今回は外部移送コマンドであるTP.exeについて、お話します。SAPシステムの運用の中で、移送管理はベーシスのメインタスクになってきます。この移送の数が増えてくると、毎回手動で実施するのは工数も増えて、作業ミスを誘発することもあります。そこで、今回説明するコマンドを活用することで、移送作業を安全に自動化することが可能になります。
1.TP.exeとは
SAPシステムをインストールすると、標準で組み込まれるOSコマンドになります。用途としては、移送におけるインポートキューの調整、移送ファイルのインポート、さらにはクライアントのエクスポート処理でも使われています。
クライアントもエクスポート時には1つの移送ファイルとして抽出されるため、通常の移送と同様にTP.exeで取り扱うことができます。また、このTP.exeを使うことで、SAPシステムにログインせずともこれら移送処理が実行できるため、スケジュール機能で自動実行させたい場合には有効なコマンドとなります。
2.自動移送スクリプトサンプル
今回はPowerShellでのサンプルをご紹介します。もちろん、TP.exeが使える環境であれば、従来からありバッチファイルや、UNIX系であればシェルスクリプトで記述することも可能です。まずは、シェル全体像を記し、その後、個別にポイントごとに説明を追加します。
$env:DBMS_TYPE=”<DBタイプ>”
$env:MSSQL_DBNAME=”<SID>”
$env:MSSQL_SCHEMA=”<スキーマ名>”
$env:MSSQL_SERVER=”<サーバ名>”
$script:TPEXE=”\\<サーバ名>\sapmnt\EED\SYS\exe\uc\NTAMD64\tp.exe”
$script:PF=”\\<サーバ名>\SAPMNT\trans\bin\TP_DOMAIN_EED.PFL”
$script:ERRCNT=$null
$script:DBNAME=”<DB名>”
$script:SCHEMA=”<スキーマ名>”
$script:FROMDIR=”\\<移送元サーバ名>\sapmnt\trans”
$script:TODIR=”E:\usr\sap\trans”
$script:USER=”<サーバ管理者アカウント>”
$script:PASS=”<パスワード>”
$script:USEDRIVE=”\\<サーバ名>\sapmnt”
function file_copy{
Invoke-Command -ScriptBlock {net use $USEDRIVE /user:$USER $PASS}
get-content C:\temp\<移送事前定義ファイル>.txt | foreach-object {
$isounum,$client = $_.split(‘,’,2)
$num=$isounum.substring($isounu:m.length – 6,6)
$DATA=”R”+$num
$COFILE=”K”+$num
$COFILE
$result = (copy-item $FROMDIR\data\$DATA.$DBNAME $TODIR\data -Force)
$result = (copy-item $FROMDIR\cofiles\$COFILE.$DBNAME $TODIR\cofiles -Force)
}
Invoke-Command -ScriptBlock {net use $USEDRIVE /delete /yes}
}
function isou{
get-content c:\temp\isou.txt | foreach-object {
$isounum,$client = $_.split(‘,’,2)
& $TPEXE pf=$PF addtobuffer $isounum $DBNAME
& $TPEXE pf=$PF import $isounum $DBNAME client=$client u012
if($LASTEXITCODE -ge 8 ) {
$ERRCNT=99
exit $ERRCNT
}
}
}
switch ($args[0]){
“copy”{
file_copy
}
default{
isou
}
}
3.変数の事前定義
$env:DBMS_TYPE=”<DBタイプ>”
$env:MSSQL_DBNAME=”<SID>”
$env:MSSQL_SCHEMA=”<スキーマ名>”
$env:MSSQL_SERVER=”<サーバ名>”
TP.exeを実行する際に要求される各種環境変数を定義します。<DBタイプ>は使っているデータベースソフトを記載します。SQLServerであればmss、Oracleであればora、DB2であればdb2などになります。
$script:TPEXE=”\\<サーバ名>\sapmnt\EED\SYS\exe\uc\NTAMD64\tp.exe”
$script:PF=”\\<サーバ名>\SAPMNT\trans\bin\TP_DOMAIN_EED.PFL”
TP.exeと移送ドメインプロファイルの格納場所を指定します。これらも含め「$script」で始まる変数は、上記「$env」で始まる環境変数とは異なり、このPowershellの中でのみ使用する変数を事前定義しています。
4.file_copy関数
ここでは物理移送ファイルをシステム間で移動する処理を記述しています。トランザクションコード:STMSにおける「インポートキュー調整」をここで行っています。
get-content C:\temp\<移送事前定義ファイル>.txt | foreach-object {$isounum,$client = $_.split(‘,’,2)
このスクリプトは、事前に移送対象をメモ帳に記載し、それを読み込んで実行します。このサンプルでは<移送番号>、<クライアント番号>という形で移送対象を記載しておきます。クライアント依存、非依存の移送が存在するので、移送対象クライアントを指定できるようにしました。
$result = (copy-item $FROMDIR\data\$DATA.$DBNAME $TODIR\data -Force)
$result = (copy-item $FROMDIR\cofiles\$COFILE.$DBNAME $TODIR\cofiles -Force)
ここでシステム間(例えば開発機から検証機へ)の、OS移送物理ファイル(cofilesとdata)コピーを行っています。このコピーしたファイルを使って、次に説明するisou関数の中で自動移送を行います。
5.isou関数
自動移送は二段階で行います。まず移送物理ファイルをSAPシステムのバッファに読込み、その後実際にインポート行います。下記がそのコマンドになります。
& $TPEXE pf=$PF addtobuffer $isounum $DBNAME
& $TPEXE pf=$PF import $isounum $DBNAME client=$client u012
バッファ読込み(tp addtobuffer)は1回読み込めばよいのでクライアントは指定しませんが、
移送自体はクライアントを指定する必要があるため、インポート(tp import)の引数にクライアントを指定しています。「u012」というのはTPコマンド自体のオプションになります。詳細は以下URLを参考下さい。このサンプルでは、オリジナル上書きの無条件インポートを指定しています。
~TPコマンドのオプションについて~
https://help.sap.com/doc/saphelp_nw70/7.0.12/ja-JP/3d/ad5b814ebc11d182bf0000e829fbfe/content.htm?no_cache=true
6.実行方法
メイン処理の引数で、物理ファイルのコピーなのか、自動移送なのか処理を分けるようにしています。<自動移送プログラム名> 「copy」と指定して実行すると移送物理ファイルのコピー、それ以外では自動移送が実行されるようにしています。
おわりに
いかがでしたでしょうか。TP.exeによる自動移送の実装、簡単に実現できそうと思って頂けたのではないでしょうか。
これをタスクスケジューラ等でスケジュール実行させる、ジョブ管理ソフトなどで、夜間のユーザロック処理が終わった後に移送を自動で行うというような制御も可能になります。
また、事前に定義しておいた移送メモに基づいて移送されるため、そのメモ内容を自動移送前にその内容をダブルチェックしておくことで誤った移送を未然に防ぐことができます。
移送番号の間違いの他に移送順序の間違いも、現場では起きやすいので、正しい順番で移送メモが書かれているかを事前にチェックできることは、大きなメリットではないかと思います。SAPベーシス運用作業の安全・効率化の一助になれば幸いです。