VBScriptでSAP R/3に接続し、テーブルの内容を抽出する(KNA1)

2018年2月13日火曜日

SAP vbs

t f B! P L

はじめに

バッチファイル的に、SAPからテーブルの内容を引っこ抜きたいことが度々ある。
SAPにはRFCライブラリというものが用意されており、様々なプログラムからSAPシステムに接続 → データを得ることができる。
その一連のロジックをvbsファイルにしておけば、コチコチっとダブルクリックするだけで抽出できるので、便利!



※野菊のハッカー(http://signal9.exblog.jp/)で、「VBScriptでSAP R/3をアクセス」という記事があり、参考にさせていただいています。

VBScriptを使って、csvファイルを抽出してみる

以下は、「KNA1:得意先マスタ」の内容を、項目を指定し、条件を絞り、csvファイルに抽出する例。


Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
Set functionCtrl = CreateObject("SAP.Functions")

' R/3に接続するためのパラメータ(環境に合わせて設定してください)
Set sapConnection = functionCtrl.Connection
sapConnection.HostName = "サーバー名"
sapConnection.SystemNumber = 0
sapConnection.Client = "クライアントNo"
sapConnection.user = "ユーザー名"
sapConnection.Language = "JA"
sapConnection.Password = "パスワード"

' Logonパラメータ2番目をTrueにするとサイレントログオン
If sapConnection.logon(0, True) <> True Then
 Wscript.Echo "接続エラー!"
Else

 ' ------------------------------------------------------
 ' RFC_READ_TABLE を使う
 Set RFC = functionCtrl.Add("RFC_READ_TABLE")

 ' ------------------------------------------------------
 ' 読み出しテーブルのパラメータを設定
 RFC.Exports("QUERY_TABLE").Value = "KNA1"
 RFC.Exports("NO_DATA") = " "
 RFC.Exports("DELIMITER").Value = vbTab
 RFC.Exports("ROWSKIPS").Value = "0"
 RFC.Exports("ROWCOUNT").Value = "0" 

 ' ------------------------------------------------------
 ' 抽出する項目を指定
 ' csvに書き出す項目名
 strHeader = """得意先コード"",""名称"",""住所1"",""住所2"",""電話番号"""
 ' SAPから抜いてくる項目名
 aryHeader = Array("KUNNR", "NAME1", "ORT01", "ORT02", "TELF1")

 For i = 0 To Ubound(aryHeader)
  Set oFields = RFC.Tables("FIELDS").Rows.Add
  oFields.Value(1)= aryHeader(i)
 Next

 ' ------------------------------------------------------
 ' 抽出する条件を指定(条件は適宜変更して使ってください)
 Set oRow = RFC.Tables("OPTIONS").Rows.Add
 oRow.Value(1)= "KUNNR > '0007000000' and KUNNR < '0007200000'"

 ' ------------------------------------------------------
 ' コール
 If not RFC.Call Then
  die_exception = RFC.exception
  ' エラーだったら、エラーコード表示
  WScript.Echo "ERROR: " & die_exception
 Else

 ' ------------------------------------------------------
 ' ファイルに書き込み
  Set objFile = objFSO.OpenTextFile("kna1.csv", 2, True)
  If Err.Number = 0 Then

   ' ヘッダ部分を出力
   objFile.WriteLine strHeader

   ' タブをカンマに置換し、空白を削除して書き込む。
   For Each oRow In RFC.Tables("DATA").Rows

    ' TAB区切りでsplitする。
    strInput = Split(oRow.Value(1), Chr(9))

    ' 最後に、前後の「"」を付けて書き込む
    objFile.WriteLine("""" & Join(strInput, """,""") & """")
   Next
         objFile.Close
     Else
         WScript.Echo "ファイルオープンエラー: " & Err.Description
     End If
 End If

    sapConnection.Logoff

End If

Set functionCtrl = Nothing
Set objFSO = Nothing

Wscript.Echo  "処理完了"

このブログを検索

サイトマップ

  • ()
  • ()
もっと見る

Google検索

マルウェア「Emotet」に感染したくないから、「EmoCheck」と「EmoKill」の使い方、利用方法をまとめてみた!

  はじめに 世間を騒がしている「Emotet」。2014年ごろから確認されているマルウェアだが、流行と鎮静化を繰り返しながら変異を続けており、今もなお大きな影響を及ぼしている。2020年は、多数の企業が被害を受けた年になった。 Emotetに一旦感染するとやっかいだ。そのモジュ...

QooQ