最近、社内で利用を始めた「SAP GUI Scripting」なのですが、こちらでも使い方に関してまとめています。大企業などではよく利用されているSAP HANAについて、事務の現場では非常に多くの定型業務が存在しており、入出力について自動化をすることで大幅なミスの低減、手順をいちいち覚える学習コストの削減、人間が行う事による人件費の削減が可能です。

しかし、SAP GUI Scripting単体ではExcelマクロ同様、ユーザの操作を記録して再現するだけなので、ちょっと応用したいと思うとすぐに壁にぶつかったり、また個別で生成してくれるVBSだけだと他に応用するのが難しいです。ということで、これらをサポート管理する為の管理アプリケーションを作成しました。(アドホッククエリ⇒出力⇒所定のExcelに書き込みという流れです)

使用は自己責任ですが、自由に利用可能です。

ファイルのダウンロード

本プログラムは、Windows10 64bit版で検証しています。インストール自体は簡単です。管理者権限を不要にするため、インストール先はドキュメントフォルダ直下のAutomator-win32-x64フォルダにインストールされます。プログラムはElectron 13で作成されており、利用するには事前準備が必要です。

上記のVBSファイルは、SAP GUI Scriptingで出力されるVBSのコードを加えて、このアプリからの自動制御を行う為のテンプレートになります。自動ログインはサーバリストの一番上の項目が選択されてEnterキーがsendkeysで送られる仕組みになっているので、別のサーバを選びたい場合には、アプリのフォルダ¥resources¥app¥vbsの中にある「sapcheck.vbs」を改造する必要があります。

図:インストールは簡単です

SAP GUI Scriptingの問題点

大変手軽に自動化を実現できるSAP GUI Scriptingなのですが、徹底的に自動化を実現しようとした場合、以下のような問題点にぶつかります。これらをクリアする為には、今回のようなサポートアプリを利用したり、また生成されるVBSファイル自体の改造が必要になります。

  • SAP GUIが起動していないと利用することが出来ない
  • 忠実に記録を再生するだけなので、用途ごとに出力先の指定が出来ない。
  • また、パラメータをコード内に指定してしまうと、同じようなケースでそのまま流用が出来ない。
  • 完全自動化の為にはパスワードをコード内に埋め込むのは懸命ではない。
  • 指定時間に実行する為にはタスクスケジューラとBATファイルによる自動実行の環境構築と登録が必要。
  • 日付(前月末)などの常に変動するパラメータの場合、VBSを編集して月末の日付を算出してあげなければならない
  • ExcelデータをもとにSAPへの登録作業などはループ処理などをVBSファイルを編集する必要がある
  • エクスポート時に勝手に起動するExcelを終了するにはVBSで終了制御をする必要がある
  • すでに同名のファイルがある場合、そのままエクスポートの手順だと処理に分岐が生じてしまうので、被らないファイル名を生成してあげる必要がある

今回のアプリではこれらの問題点のうち、指定時間に自動実行、パラメータを渡して動的にエクスポート・書き込み、渡すパラメータをGUIで一括管理を実現しています。SAP GUIが起動していない場合には自動起動⇒自動ログインまで対応しています。

また、テンプレートのVBSでは、アプリからのパラメータ取得、日付の生成やExcelの自動終了などを加えてあります。

事前準備

SAP側の設定

  1. SAP GUIを起動する
  2. 左上のハンバーガーメニュー(≡)をクリックして、オプションを開く
  3. 左のメニューの「アクセシビリティ&スクリプト」を開く
  4. さらにスクリプトを開く
  5. 右側のパネルの「スクリプト有効化」にチェックが入ってることを確認します。
  6. スクリプト有効化以外の「通知」などのチェックは全て外します。
  7. サイドバーからセキュリティを開く
  8. セキュリティ設定を開いて、無効化します。
  9. チェックしたら、適用⇒OKをクリックして閉じる

図:有効化していればすぐ使えます。

図:セキュリティ設定は無効化します。

アプリの設定

本アプリは、SAP GUIが起動していない場合であっても、自動起動⇒自動ログインが出来るようになっています。その為の自動ログイン設定および社内で利用する場合のプロキシーアドレス、SAP⇒出力・Excel書き込み時の既定の一時出力先フォルダの指定が必要です。

アプリを起動したら右上のアプリの設定をクリックして作業します

  • SAP自動ログイン設定 – ログインIDとPWを登録します。資格情報マネージャに格納されます
  • プロキシ設定 – 社内で外部への通信でプロキシが必要な場合、URLを登録します(例:http://hogehoge.com:8080)
  • 一時フォルダの指定 – 出力・貼付の実行タイプの場合、SAPからエクスポートしたxlsxファイルを一時的に保存するフォルダを指定が必須です。但し処理が完了するとこのフォルダ内のファイルは自動で削除されます。

設定後は保存⇒アプリを再起動してください。

図:設定そのものは難しくない

SAP GUI ScriptingでVBSを生成

SAP GUI Scriptingで記録し生成する手順に関しては以下のエントリーを参考に出力してみてください。RPAと異なり非常に正確に忠実に再現されるので、作ること自体はほとんど何も意識する必要は無いです。

SAP GUI Scriptingで自動操縦してみた

生成したVBSはダブルクリックをすれば、記録した作業を再現してくれますが、このままでは、本アプリからの「出力先指定」「ファイル名指定」などのパラメータを受け取って処理をしたり、エクスポート時に勝手に起動するExcelを自動終了させたりが出来ないので、以下の作業をします。

  • VBSテンプレートの「▼ここに貼付け▼」のエリアに生成したVBSコードをコピペする
  • VBSテンプレートに用意してある引数を受けた変数fullpathおよびfilenameをそれぞれ、以下のように書き換えます。ファイル保存ダイアログの保存場所とファイル名の欄にそれぞれ該当するコードです。
  • 無事に完了時にはstatusコード3がアプリ側に返り、失敗した場合は1が返ります。

この他にも、SAP出力画面に於いて、日付を指定するようなパターンもありますが、例えば前月の月末日を指定するような場合には、VBSに以下のコードを足してあげます(記録時にもキー日付や指定期間などで操作を記録しておく)

自動起動

本アプリは、auto-launchによる自動起動を装備しています。アプリを起動するだけでレジストリに登録され、次回以降PCを起動するとアプリも自動起動するようになっています(これは登録タスクの時限起動を行わせる為)。

対象のコードはアプリのフォルダ内のresources/app以下にあるindex.jsの117〜138行目にあるコードが実体です。また、レジストリ登録位置は

となり、ここにAutomatorという名前でexeが登録されます。

バックアップ・復元

アプリに登録されたタスク一覧をバックアップ・復元する機能が備わっています。アプリの右上にある「バックアップと復元」をクリックすると、項目が出てきます。バックアップは暗号化ZIP形式で保存され、復元する場合も解凍する事なくZIPの形式のまま指定すれば、既存のデータを洗替えで入れ替える事が可能です。

バックアップ時には日付時間が付与されたファイル名が自動で付けられますが、リネームしても問題有りません。

図:簡単バックアップ

自動アップデート

本アプリは自動アップデート通知機能がついており、所定の場所に配置されてるupdate.jsonを読み取り自身のアプリのバージョンと比較し、新しいバージョンがリリースされている場合には、通知が来ます。実行するとアップデータもしくはインストーラが自動でダウンロードされて、自動で実行されます。

この時アプリは自動終了されて、デスクトップに既存のデータベースのバックアップが自動で作成されるようになっています(v2.3より)

タスクを登録する

時限タスクの登録

事前準備で用意したvbsおよび書き込むパターンの場合はその対象のExcelファイルをもとにタスクを登録してゆきます。このアプリは5分毎に登録したタスクの中で条件に合致したタスクを自動で実行する仕組みになっています。以下の要領で登録します。

  • タスク名 – 適当なタスクの名称を入力します
  • SAP自動実行ファイルの指定 – 前述で用意した加工済みVBSファイルを指定します
  • 保存先のフォルダの指定 – 実施タイプが「出力のみ」の場合、指定したフォルダにエクスポートします。「出力・貼付」の場合は設定の一時フォルダが入ります。他のファイル等が存在しない専用のフォルダを作成してから、指定してください(出力・貼付の場合、終了後にSAPからダウンロードしたファイルは削除する仕様です)
  • 出力ファイル名 – エクスポートするベースになるファイル名です
  • 実施タイプ – 出力のみがエクスポートだけ。出力・貼付が、次に指定するExcelへの書き込みを行います
  • 出力名固定 – 実施タイプが「出力のみ」の場合だけ使え、ファイル名を固定で出力します。VBS実行時に同一ファイルについては存在有無をチェックして削除を行います。
  • 実施時間 – 自動実行発動する時間を指定(5分単位で指定は可能)。HH:MMの形式で指定する。但し、同じ時間に多くのタスクを指定すると当然遅れて発動します。
  • 書き込み先Excelブック – 実施タイプが「出力・貼付」の場合にだけ入力可能。指定したExcelファイルに書き込みます。
  • 書き込みシート名 – 書き込みをするシートの名称を指定
  • 書込みセル番地 – 書込み開始する左上のセルの番地を指定します
  • 実施サイクル – 実施するサイクルを指定。毎月、毎週、毎日の3つから選択します
  • 実施タイミング – 曜日や月末などのタイミングを指定。但し、実施サイクルによって選べる項目は限られます(毎週でなければ曜日は選べません)
  • 実施日 – 実施サイクルが毎月で、タイミングが指定日の場合に入力可。毎月決まった日にだけ実施します(1-31の値を入力しますが、31などの場合は、前項で月末を指定しないと、30日しかない月には実行されなくなってしまいます。
  • 有効化 – この設定を使うかどうかのフラグ。有効化がチェックされていない場合、実行されません。

アクションにある「赤いアイコン」をクリックすれば、登録済みタスクを再編集可能です。また「青いアイコン」をクリックすれば、タスクを削除する事が可能です。

図:タスクを登録してる様子

タスクの手動実行

タスク一覧のアクションにある「緑色のアイコン」は、登録タスクを手動で実行する為のアイコンです。クリックすると、タスクの実行確認ダイアログが表示され、実行を行うと

  • SAP GUIが起動していない場合には起動⇒ログインを行う
  • SAP GUIが起動・ログイン済みの場合には、登録したパラメータに基づき、VBSを実行する

といった流れで作業が自動開始されます。SAPが起動していない場合は自動ログインが完了するまで、マウス等での操作はしてはいけません。ログインに失敗します(Sendkeysでキーを送ってログイン画面を出している為。ログイン後はSAPを直接操作しているので、マウス操作をしても問題ありません)。

図:緑のアイコンで手動実行

タスク登録の注意点

本アプリは以下のような設定でSAPを自動操縦しデータを取得・書込みをしています。

  1. 5分毎に登録タスクに合致したものがあるか調べて実行します。
  2. アプリを起動させたままの場合、ずっと待機した状態でタスクを永遠に実行し続けます。
  3. 途中でタスクの設定を変更しても、アプリの再起動は不要です。
  4. 「出力・貼付」の場合、SAPからエクスポートしたデータは、作業完了時に自動で削除します
  5. 「出力・貼付」の場合、同じVBSを指定した複数のタスクがある場合、1度だけ実行して複数の書込み先にデータをコピペします。
  6. 現在はSAP側への入力の自動化などは実装していません(Excelデータをもとに自動入力など)
  7. 本アプリはシングルタスクなので、複数のタスクを並列で実行出来ません(SAPサーバに負荷も掛かるので1個ずつ順番に実行します)
  8. シングルタスクであるため、同一の実施時間に複数のタスクを登録すると実施が遅延するタスクが出てきます
  9. シングルタスクであるため、5分前のタスクで完了していないものがある場合、次の5分のタスクの実行に影響が出ますので、時間間隔は離して登録しましょう。
  10. 「出力・貼付」の場合、SAP出力以外にExcel書込みも発生する為動作時間が長くなります。なるべく出力のみを利用し、書き込むのではなくPower Queryを活用して、出力したデータを参照するように書込み先ファイルは構造変更しておきましょう(書込み時間を削減出来るし、同一のデータを複数のブックから参照可能)
  11. 現在はまだ、タスク終了時にTeamsやOutlookで通知を送る等の機能は装備していません。
  12. 「出力・貼付」の場合、書込み先シートのデータ領域は削除してから書込みしています
  13. 「出力のみ」の場合、生成されるファイルは日時をファイル名に加えた形で、重複しない形で出力されます。前月や前々月などの日付の指定は、VBS側で行わせる必要があります。

使用してる主なモジュール

改訂履歴

  • 2022/01/31Version 2.4
    • SAP自動化において、npm cache verify –forceを実行した。
    • SAP自動化の出力・貼付けに於いて、自動実行時には指定フォルダ内がクリアされ他のファイルの巻き込み削除を防止するよう変更した。
    • SAP自動化に自動バージョンアップ時にデスクトップに自動でバックアップを取る機能を装備
    • 書込み先シートにデータが空の場合はデータクリア処理はスルーするように処理
    • SAPの出力先フォルダ指定に於いて、再編集時や別のタスクを開く場合に、一時フォルダの変数の値が呼び出されてしまうErrorを修正
  • 2021/12/17 – Version 2.1
    • 出力・貼付けのタスクが実行されていない時も一時フォルダを削除しようとしてエラーが出ていたので修正
    • DBおよび設定にファイル名固定オプションを追加した
    • オフライン判定を加えて、オフライン時にアプデ通知確認をしないように変更
    • ファイル名固定化オプションに基づく出力に対応した
  • 2021/12/15 – Version 2.0
    • 初版リリース