【SAP ECC 6.0】VBScriptで RPAっぽいこと実現させる

スポンサーリンク

はじめに

この記事は SAP Advent Calendar 2019 の12月17日分の記事として執筆しています。

SAP Advent Calendar 2019 - Adventar
今年もSAPアドベントカレンダーをやります! SAPに関する話題なら何でもOK。 ハッシュタグは #SAPアドベントカレンダー 参加者向け 投稿ルール ・担当日よりも前に記事を完成 ・予約投稿機能で担当日に公開 ・記事の冒頭には SAPアドベントカレンダーページへのリンクをはり参加記事であることを明記  例「この記...

Mino Katoさんからのバトンパス

蜜蜂ハチ
蜜蜂ハチ

アドベントカレンダーがHANA一色の中、私は ECC 6.0について、野菊のようにささやきます

スポンサーリンク

VBScriptで、SAP ECC 6.0を動かす

タイトル通りです。VBScriptで、SAP ECC 6.0をRPAのように動かします。

ハッチインプットほと話し合い複雑なことはできませんが、自動化はできそうです。

事前設定

Uipathのサイトに完璧な事前設定のサイトがあったので、ご参照ください。ありがとうUipathさん。

404 エラー
UiPath Studio は組織の業務プロセスを視覚的にモデル化できるツールです。結果のオートメーション プロジェクトは実行のために Robot に送信できます。

スクリプト記録と再生

今回はVBScriptを実行して、SAP ECC 6.0をログインする です。

VBScriptをスラスラかける人はあまり関係ないです。ガンガン書いて、自動化しましょう。

ですが、ゼロから書き始めるのは大変です。SAP ECC 6.0はスクリプトを記録してくれる機能があります。

これがenjoyだ!

スクリプト記録と再生を押すと、ボタンが表示されるので、記録ボタンを押してみましょう。(画像取り忘れた。。。)

そして、実際にログインしてみます。

  1. クライアント 入力
  2. ユーザ    入力 
  3. パスワード  入力

ログイン完了。

記録ボタンを、再度おして、記録するのもやめます。すると、指定のフォルダにVBScriptのファイルができてます。ソースコードは下記の通り。クライアントとユーザとパスワードは変更してます。

!注意!パスワードは記録されません!そのため、コードを書き換える必要があります。

If Not IsObject(application) Then
    Set SapGuiAuto  = GetObject("SAPGUI")
    Set application = SapGuiAuto.GetScriptingEngine
 End If
 If Not IsObject(connection) Then
    Set connection = application.Children(0)
 End If
 If Not IsObject(session) Then
    Set session    = connection.Children(0)
 End If
 If IsObject(WScript) Then
    WScript.ConnectObject session,     "on"
    WScript.ConnectObject application, "on"
 End If
 session.findById("wnd[0]").maximize
 session.findById("wnd[0]/usr/txtRSYST-MANDT").text = "クライアント"
 session.findById("wnd[0]/usr/txtRSYST-BNAME").text = "ユーザ"
 session.findById("wnd[0]/usr/pwdRSYST-BCODE").text = "パスワード"
 session.findById("wnd[0]/usr/pwdRSYST-BCODE").setFocus
 session.findById("wnd[0]/usr/pwdRSYST-BCODE").caretPosition = 7
 session.findById("wnd[0]").sendVKey 0

これで、セッションを立ち上げて、VBScriptを実行すれば、クライアント、ユーザ、パスワードを入力せずにログオンできます。

以上です。

いや、さすがにこれで終わらないです。

ユーザ別が使用したトランザクションコードの使用回数を調べる

月に一回、ユーザが使用したトランザクションコードのログを取ってます。別になんかするわけでもなく、一年で消えちゃうので、取っておこう的な感じです。

取得方法ですが、下記の通りです。

  1. TCD:ST03N
  2. サーバーが複数ある場合、合計を選択
  3. ユーザプロファイルを選択
  4. 表示されたユーザIDをダブルクリック
  5. ユーザー別 トランザクションコードが表示される。

合計を選択。

ユーザプロファイル選択。表示されたら、ユーザIDをダブルクリック。

すると、上記のように、とあるユーザーが使用したトランザクションコードが表示されます。

この画面を見たことある人は気づいていると思いますが、一人ずつしか、表示されないんです。一括で取得できないんです。一人ずつ紹介して、ログを取ってくるのは現実的ではありません。

(もしかしたら、標準機能で存在してるのかもしれないけど、私は知らない。)

そしたら、どうすればよいかというと、実は汎用モジュール「SWNC_COLLECTOR_GET_AGGREGATES」で一括でとることができます。

なので、スクリプト記録と再生で下記の手順を実行します。

  1. セッション立ち上げ
  2. TCD:/nSE37
  3. SWNC_COLLECTOR_GET_AGGREGATES を入力
  4. テスト実行
  5. component に ”TOTAL” 入力
  6. periodtype に”M” 入力
  7. periodstrt に ”2019/11/01″ 入力(ログを取りたい月の初日)
  8. 実行
  9. usertcode を選択
  10. すべて表示
  11. ダウンロードボタンをクリック
  12. 保存先入力
  13. ファイルの保存
  14. F3×3で最初の画面に戻る

そうすると、下記の VBScript が作成されます。次回からは、日付を変えれば取得可能です。

If Not IsObject(application) Then Set SapGuiAuto = GetObject(“SAPGUI”) Set application = SapGuiAuto.GetScriptingEngine End If If Not IsObject(connection) Then Set connection = application.Children(0) End If If Not IsObject(session) Then Set session = connection.Children(0) End If If IsObject(WScript) Then WScript.ConnectObject session, “on” WScript.ConnectObject application, “on” End If session.findById(“wnd[0]”).maximize session.findById(“wnd[0]/tbar[0]/okcd”).text = “/nse37” session.findById(“wnd[0]”).sendVKey 0 session.findById(“wnd[0]/usr/ctxtRS38L-NAME”).text = “SWNC_COLLECTOR_GET_AGGREGATES” session.findById(“wnd[0]/usr/ctxtRS38L-NAME”).caretPosition = 29 session.findById(“wnd[0]/tbar[1]/btn[8]”).press ‘”TOTAL”固定 session.findById(“wnd[0]/usr/txt[34,9]”).text = “TOTAL” ‘月別で取得するので”M”固定 session.findById(“wnd[0]/usr/txt[34,11]”).text = “M” ‘取得したい月の月初を入力”YYYY/MM/DD” session.findById(“wnd[0]/usr/txt[34,12]”).text = “2019/11/01” session.findById(“wnd[0]/usr/txt[34,12]”).setFocus session.findById(“wnd[0]/usr/txt[34,12]”).caretPosition = 4 session.findById(“wnd[0]/tbar[1]/btn[8]”).press session.findById(“wnd[0]/usr”).verticalScrollbar.position = 1 session.findById(“wnd[0]/usr”).verticalScrollbar.position = 2 session.findById(“wnd[0]/usr”).verticalScrollbar.position = 3 session.findById(“wnd[0]/usr”).verticalScrollbar.position = 4 session.findById(“wnd[0]/usr”).verticalScrollbar.position = 5 session.findById(“wnd[0]/usr/lbl[34,37]”).setFocus session.findById(“wnd[0]/usr/lbl[34,37]”).caretPosition = 0 session.findById(“wnd[0]”).sendVKey 2 session.findById(“wnd[0]/mbar/menu[0]/menu[0]”).select session.findById(“wnd[0]/mbar/menu[3]/menu[5]/menu[2]/menu[2]”).select session.findById(“wnd[1]/usr/subSUBSCREEN_STEPLOOP:SAPLSPO5:0150/sub:SAPLSPO5:0150/radSPOPLI-SELFLAG[1,0]”).select session.findById(“wnd[1]/usr/subSUBSCREEN_STEPLOOP:SAPLSPO5:0150/sub:SAPLSPO5:0150/radSPOPLI-SELFLAG[1,0]”).setFocus session.findById(“wnd[1]/tbar[0]/btn[0]”).press ‘ファイルの保存先” session.findById(“wnd[1]/usr/ctxtDY_PATH”).text = “C:\ 保存先” ‘ファイル名” session.findById(“wnd[1]/usr/ctxtDY_FILENAME”).text = “USERTCODE201911.txt” session.findById(“wnd[1]/usr/ctxtDY_PATH”).setFocus session.findById(“wnd[1]/usr/ctxtDY_PATH”).caretPosition = 28 session.findById(“wnd[1]/tbar[0]/btn[0]”).press session.findById(“wnd[0]/usr/lbl[17,17]”).setFocus session.findById(“wnd[0]/usr/lbl[17,17]”).caretPosition = 35 session.findById(“wnd[0]”).sendVKey 3 session.findById(“wnd[0]”).sendVKey 3 session.findById(“wnd[0]”).sendVKey 3 session.findById(“wnd[0]”).sendVKey 3
スポンサーリンク

どんな時、こんなの使うの?

今回の VBScript はいつ使うの?って話ですが、発送次第です。いろいろ可能です。

  • 繰り返しの作業の自動化
  • VBScript が書ける人はエクセルと組み合わせで処理の自動化
  • RPAでSAPECCも処理可能ですが、SAPECCを知らない人は開発が少々難しいです。RPAを依頼してる事業部の人に VBScript を記録してもらい、その VBScript をRPAをキックする。(RPAの部品として使用)
  • RPAですべてやりたい場合は、記録した VBScript と同等の動きをしているかテストに使用する。  
スポンサーリンク

当初、やりたかったこと。

Excelから汎用モジュール「SWNC_COLLECTOR_GET_AGGREGATES」を呼び出して、Excelに落としてきて、自動でユーザ別使用一覧を作りたかった。しかし、 SWNC_COLLECTOR_GET_AGGREGATESがどうやってもExcelから、エラーになり呼び出せず。。。断念。なので、スクリプトに変更。

汎用モジュール「SWNC_COLLECTOR_GET_AGGREGATES」がExcelから呼び出せない。
蜜蜂ハチ
蜜蜂ハチ

ご愛読、ありがとうございました。

すみっこ様、アドベントカレンダーに誘っていただき、ありがとうございました。

編集後期を書こうと思います。

明日(2019/12/18)のSAP Advent Calendar 2019は、Mona Lisacoさん

@monamonaのマイページ - Qiita
ドリフ大爆笑が好きというわけではないです。JavaScriptやSAPUI5やSwiftだけでなく、ABAPも大好き。投稿や発言は個人の見解であり、所属組織を代表するものではありません。
イベント参加
スポンサーリンク
スポンサーリンク
シェアお願い致します!
蜜蜂ハチをフォローする
スポンサーリンク
社内SEと次期基幹系システム
タイトルとURLをコピーしました