こんにちは。CData Software Japan リードエンジニアの杉本です。
以前汎用モジュール・RFCの作成およびCData SAP Driver での利用方法の記事を紹介しました。
そんな中、お客様から一つとてもいい質問がありましたので、Tipsを紹介したいと思います。
それは「RFC・BAPIの結果をビューのように取得できるようにしたい」というものです。
以前の記事でも書かれている通り、RFC・BAPIはCData ERP Driver ではストアド・プロシージャとして利用しなければいけません。
ただ、RFC・BAPIをビジネスロジックの処理としてだけでなく、データの取得・レポーティング・クエリのような役割として利用されているケースも多くあります。
その場合ストアド・プロシージャの形式では扱いが難しい場合がありますよね。特にBIツールなどで利用する場合は遭遇してしまうことがあるかと思います。
そんなときにこのアプローチが参考になるかと思いますので、紹介します。
CreateFunctionSchema を使って RFC・BAPI をビューとして定義する
CData SAP Driver には「CreateFunctionSchema」というストアド・プロシージャが提供されています。
これは任意のRFC・BAPIをビューとして利用したり、ストアド・プロシージャの引数や返り値をカスタマイズするための定義ファイルを生成する機能です。
これにより、テーブル形式のレスポンスを持つBAPI などをビューとしてうまく活用することができるようになります。
ちなみに定義ファイルは、「Location」のプロパティに指定したフォルダパスに生成されるので、予め指定しておきましょう。
使い方
それでは実際に使ってみましょう。今回はCData SAP JDBC Driverを利用していますが、ODBCやADO.NETなどでも同様に利用できます。
今回は「COMPANY」の一覧を取得できるBAPIである「BAPI_COMPANY_GETLIST」をビューとして定義してみたいと思います。
通常は以下のようにストアド・プロシージャで呼び出すようになっています。
Exec BAPI_COMPANY_GETLIST;
このBAPIを対象として「CreateFunctionSchema」を実行します。このときにFunctionにBAPIの名前、そして「SchemaType」をViewとして指定します。
Exec CreateFunctionSchema Function = 'BAPI_COMPANY_GETLIST', SchemaType = 'View';
これで以下のようにファイルが生成されます。
定義ファイルは以下のようなXMLで構成されています。attrの部分がカラム定義になっているので、不要なカラムを削除したりすることもできます。
<api:script xmlns:api="http://apiscript.com/ns?v1"> <api:info title="BAPI_COMPANY_GETLIST" other:version="20" description="The SAP table for function BAPI_COMPANY_GETLIST."> <attr name='COMPANY_LIST_COMPANY#' xs:type='string' description='Company' readonly='false columnsize="2000" ' other:datatype='CHAR' other:abaptype='C' other:fieldname='COMPANY' other:tablename='COMPANY_LIST'/> <attr name='COMPANY_LIST_NAME1#' xs:type='string' description='Company name' readonly='false columnsize="2000" ' other:datatype='CHAR' other:abaptype='C' other:fieldname='NAME1' other:tablename='COMPANY_LIST'/> </api:info> <api:set attr="input_tables" value="COMPANY_LIST"/> <api:script method='GET'> <api:set attr='function' value='BAPI_COMPANY_GETLIST'/> <api:set attr='returntables' value='*'/> <api:set attr='schematype' value='View'/> <api:call op='sapadoExecuteFunction'> <api:push/> </api:call> </api:script> </api:script>
あとは通常通りSELECTで呼び出すことができます。
SELECT * FROM BAPI_COMPANY_GETLIST;
おわりに
このようにCData SAP Driver ではSAP ERPのデータ・ロジックを扱う上で便利な機能が多く搭載されています。
ぜひ気になることがあれば、お気軽にテクニカルサポートフォームまでお問い合わせください。