はじめに
バッチファイル的に、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 "処理完了"
0 件のコメント:
コメントを投稿