以前.NETからSAPへ接続する方法を紹介したが、それを一歩進め、テーブルやクエリのデータを抽出できるようにしたライブラリを開発した。
開発せず単純にデータを抜きたい場合に備え、コマンドラインのツールも搭載した。
SAPでは会社のマスタデータがT001
というテーブルに入っているが、そのデータを抽出しtable.txt
に書き出す場合以下のように実行する。
saploader MY_SAP T001 table.txt
MY_SAP
は接続先のインスタンスで、exeと同じフォルダにあるconfigファイルで設定を行う(詳細はこちら)。
また、抽出元がクエリの場合は以下のように行う。
saploader MY_SAP ZQUERY01/ZGROUP query.txt /q /v MY_VARIANT
これは、ユーザーグループがZGROUP
、クエリ名がZQUERY01
であるクエリについて、クエリバリアントMY_VARIANT
を利用しクエリを抽出する例となる。
クエリで特に便利なのは、クエリバリアントの条件に現在日付などの条件(もしくはTVARV変数)を設定しておくことで、差分抽出が可能な点だ。
これを利用すれば、面倒な開発なくバッチファイルのみでマスタやトランザクションデータのI/Fが可能になる。
数万件のデータでも割とすぐ返ってくるので、既存プログラムに組み込みリアルタイムで使うもよし、バッチ実行でBIツールのデータとして貯めるもよし、である。
開発の背景
SAPはいわゆるERPであり、そこには業務に関する様々なデータが入っている(受注伝票、請求伝票、出荷伝票、会計伝票etc・・・)。
これはSAPがデータ分析のための宝の山ということを意味しているが、SAPからのデータ抽出は非常に手間がかかるというのもまた事実。
SAPから他システムへデータを飛ばす場合、通常はABAPと呼ばれるSAPのプログラム言語でファイルを出力するプログラムを開発し、出力したファイルを転送する。
当然ABAPなんていう謎言語を扱える人はそういないので、開発者を集めにくかったり高くなったりしてしまうのだ。
- IDoc/ALEといったデータ転送用の仕組みもあるにはあるが、これに精通している人はABAPを知っている人の10倍くらいレアなので(会ったことない)話にならない。
- 「SAPからデータを取り出せる」とうたうEAIやETLツールが山ほどあるが、どれもライセンス料が高くつくので厳しい(それでも開発するよりましなことは多い。DataSpiderなどは知らなければ試してみる価値はある)。
- BW(今はBO)というSAP製のBIツールを使うとさすがにデータ連携は可能になるが、これはEAI/ETLツール以上にライセンスが高くつく。
要はSAPからデータを取り出すには、
1.開発、またその後の運用保守料を献上する(特殊技術なのでベンダロックイン覚悟)
2.EAI/ETLツール会社、もしくはSAP様に高額ライセンス料を献上する
3.あきらめる
の3択状態だったので、それを解消すべく開発した次第である。
なお、SAPもいつまでも殿様商売をしているわけではない。
最近はSAP NetWeaver GatewayというデータI/Fのための仕組みが発表されており、この導入によりSAP内のデータをREST形式などで飛ばすことができるようになった(こちらは活用事例)。
心配な追加のライセンスコストはかけずに導入できるようなので安心だ(逆に不安になるが)。
試してみたい方はSAPがデモ環境を提供してくれているので、こちらで試すことができる(SAPのデベロッパーサイトであるSCNへの登録が必要)。なお、ABAPを試してみたい方はこちらからどうぞ。最近はEclipseで開発できるようになった。