こんにちは。CData Software Japan リードエンジニアの杉本です。
先日 CData SAP ERP Driver について、以下のような記事を書きました。
これを元に少しCData SAP ERP Driver について深堀りをすると、実はDriverのすべての処理は汎用モジュール・RFCを通じて行っていると言っても過言ではありません。
テーブル一覧を取得したり、テーブルのデータを呼び出したりも、それぞれ専用の汎用モジュール・RFCを通じて行っています。
また、CData SAP ERP Driver ではSAP TableをすべてViewとして読み取り専用で提供します。ですので、これらSAP Tableに対する操作は基本的に汎用モジュールを通して実施しなければいけません。
SAP ERPの画面・Dynpro がそれぞれのモジュールを通じて処理を行っていることと似ていますね。
そこで今回はこのCData SAP ERP Driver のコアとなっている汎用モジュール・RFCの呼び出しを行う方法を紹介したいと思います。
ちなみに、記事中ではCData SAP ERP JDBC Driverを利用していますが、ODBCやADO.NETでも同じように利用できます。
汎用モジュール・RFCの実行方法
まず、CData SAP ERP Driver を通じた汎用モジュール・RFCの実行方法について紹介します。
以下のドキュメントで書かれている通り、CData SAP ERP Driver では汎用モジュールをストアド・プロシージャとして直接実行できるようになっています。
CData JDBC Driver を通じて見てみると、以下のようにストアド・プロシージャの一覧としてリストアップされているのが確認できますね。
例えば汎用モジュールの「RFC_READ_TABLE」を実行する場合は以下のように実行できます。
EXEC RFC_READ_TABLE OPTIONS='{ \"TEXT\": \"TABNAME LIKE ''MARA%''\" }', QUERY_TABLE='DD02L', ROWCOUNT='1', ReturnTables='DATA';
この時、「Import」がパラメータとなり、「Export」が結果セットとして確認できます。
この汎用モジュール実行で1つポイントになるのは「RFC」つまりRemote Function Call として定義されている汎用モジュールかどうかです。
今回の「RFC_READ_TABLE」も以下のようにRemote-Enabled Moduleとして定義されているため、CData SAP ERP Driverを通じて、外部からコールできるようになっています。
カスタムの汎用モジュール・RFCを作成して呼び出してみる
それでは、カスタムで汎用モジュール・RFCを作って、CData Driverから呼び出しを行ってみましょう。
今回作成する汎用モジュールは「Z_HELLO_MODULE_1」というものです。INPUTとして受け取った値を元に「HELLO:{INPUT}」というような文字列を返す、Echo系のシンプルな汎用モジュールですね。
以下のように「KAZUYA」というImportパラメータの「INPUT」を渡すと「HELLO:KAZUYA」をExportパラメータの「OUTPUT」で受け取ります。
早速新しく汎用モジュールを作成していきましょう。
「SE37」のショートカットキーでFunction Builderに移動して Function Moduleに「Z_HELLO_MODULE_1」を入力し「Create」をクリックします。
「Function Group」は予め作成しておいた「Z_FUNCTION_GROUP」を指定しました。適当なShort Textも入力して「Save」します。
汎用モジュールの開発画面が立ち上がったら、ImportとExportのパラメータをそれぞれ定義していきます。INPUTとOUTPUTというCHAR100のパラメータをそれぞれ作成しました。
RFCにする上で一点注意しなければいけないのは「Pass Value」として定義することです。
そして、Source CodeタブでABAPを記述します。
FUNCTION Z_HELLO_MODULE_1. *"---------------------------------------------------------------------- *"*"Local Interface: *" IMPORTING *" VALUE(INPUT) TYPE CHAR100 DEFAULT 'TEST' *" EXPORTING *" VALUE(OUTPUT) TYPE CHAR100 *"---------------------------------------------------------------------- DATA: VALUE TYPE string. VALUE = 'HELLO:'. CONCATENATE VALUE INPUT INTO OUTPUT. ENDFUNCTION.
あとは「Attributes」タブで「Remote-Enabled Module」にチェックを入れて、この汎用モジュールをRFCとして有効化し、保存。その後、アクティベートします。
アクティベート完了後、CData SAP ERP Driverで接続すれば、以下のように追加した汎用モジュールが表示されます。
SQLで「EXEC Z_HELLO_MODULE_1 INPUT = 'KAZUYA';」と実行すれば、以下のように結果が取得できます!
対象の汎用モジュールが表示されない場合の対処方法
もし利用したい対象の汎用モジュールが表示されない場合は、以下の接続設定を確認してみてください。
https://cdn.cdata.com/help/RYG/jp/jdbc/RSBSAP_p_StoredProcedureFilter.htm
デフォルトではあまりにも汎用モジュールの数が多いので、BAPIの汎用モジュールのみ表示されるよう設定されています。
以下のように接続プロパティを追加することで
StoredProcedureFilter="*";
以下のようにすべての汎用モジュール・RFCを確認できるようになります。
おわりに
このようにCData SAP ERP Driver は汎用モジュール・RFCをうまく駆使しながら、製品として構成されています。
ぜひこの部分を使いこなしながら、SAP ERP連携を実現してみてください。
もしよくわからな点があれば、お気軽にテクニカルサポートまでお問い合わせください。