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