CData Software Blog

クラウド連携のCData Software の技術ブログです。

SAP ERP 汎用モジュールをRFCとしてを作成し、CData SAP ERP Driverからコールする方法

f:id:sugimomoto:20211216164802p:plain

こんにちは。CData Software Japan リードエンジニアの杉本です。

先日 CData SAP ERP Driver について、以下のような記事を書きました。

www.cdatablog.jp

これを元に少しCData SAP ERP Driver について深堀りをすると、実はDriverのすべての処理は汎用モジュール・RFCを通じて行っていると言っても過言ではありません。

テーブル一覧を取得したり、テーブルのデータを呼び出したりも、それぞれ専用の汎用モジュール・RFCを通じて行っています。

また、CData SAP ERP Driver ではSAP TableをすべてViewとして読み取り専用で提供します。ですので、これらSAP Tableに対する操作は基本的に汎用モジュールを通して実施しなければいけません。

SAP ERPの画面・Dynpro がそれぞれのモジュールを通じて処理を行っていることと似ていますね。

help.sap.com

そこで今回はこのCData SAP ERP Driver のコアとなっている汎用モジュール・RFCの呼び出しを行う方法を紹介したいと思います。

ちなみに、記事中ではCData SAP ERP JDBC Driverを利用していますが、ODBCADO.NETでも同じように利用できます。

www.cdata.com

汎用モジュール・RFCの実行方法

まず、CData SAP ERP Driver を通じた汎用モジュール・RFCの実行方法について紹介します。

以下のドキュメントで書かれている通り、CData SAP ERP Driver では汎用モジュールをストアド・プロシージャとして直接実行できるようになっています。

cdn.cdata.com

CData JDBC Driver を通じて見てみると、以下のようにストアド・プロシージャの一覧としてリストアップされているのが確認できますね。

f:id:sugimomoto:20211216164252p:plain

例えば汎用モジュールの「RFC_READ_TABLE」を実行する場合は以下のように実行できます。

f:id:sugimomoto:20211216164256p:plain

EXEC RFC_READ_TABLE OPTIONS='{ \"TEXT\": \"TABNAME LIKE ''MARA%''\" }', QUERY_TABLE='DD02L', ROWCOUNT='1', ReturnTables='DATA';

この時、「Import」がパラメータとなり、「Export」が結果セットとして確認できます。

f:id:sugimomoto:20211216164301p:plain

この汎用モジュール実行で1つポイントになるのは「RFC」つまりRemote Function Call として定義されている汎用モジュールかどうかです。

今回の「RFC_READ_TABLE」も以下のようにRemote-Enabled Moduleとして定義されているため、CData SAP ERP Driverを通じて、外部からコールできるようになっています。

f:id:sugimomoto:20211216164306p:plain

カスタムの汎用モジュール・RFCを作成して呼び出してみる

それでは、カスタムで汎用モジュール・RFCを作って、CData Driverから呼び出しを行ってみましょう。

今回作成する汎用モジュールは「Z_HELLO_MODULE_1」というものです。INPUTとして受け取った値を元に「HELLO:{INPUT}」というような文字列を返す、Echo系のシンプルな汎用モジュールですね。

以下のように「KAZUYA」というImportパラメータの「INPUT」を渡すと「HELLO:KAZUYA」をExportパラメータの「OUTPUT」で受け取ります。

f:id:sugimomoto:20211216164311p:plain

早速新しく汎用モジュールを作成していきましょう。

「SE37」のショートカットキーでFunction Builderに移動して Function Moduleに「Z_HELLO_MODULE_1」を入力し「Create」をクリックします。

f:id:sugimomoto:20211216164315p:plain

「Function Group」は予め作成しておいた「Z_FUNCTION_GROUP」を指定しました。適当なShort Textも入力して「Save」します。

f:id:sugimomoto:20211216164320p:plain

汎用モジュールの開発画面が立ち上がったら、ImportとExportのパラメータをそれぞれ定義していきます。INPUTとOUTPUTというCHAR100のパラメータをそれぞれ作成しました。

RFCにする上で一点注意しなければいけないのは「Pass Value」として定義することです。

f:id:sugimomoto:20211216164324p:plain

f:id:sugimomoto:20211216164328p:plain

そして、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.

f:id:sugimomoto:20211216164333p:plain

あとは「Attributes」タブで「Remote-Enabled Module」にチェックを入れて、この汎用モジュールをRFCとして有効化し、保存。その後、アクティベートします。

f:id:sugimomoto:20211216164338p:plain

アクティベート完了後、CData SAP ERP Driverで接続すれば、以下のように追加した汎用モジュールが表示されます。

f:id:sugimomoto:20211216164354p:plain

SQLで「EXEC Z_HELLO_MODULE_1 INPUT = 'KAZUYA';」と実行すれば、以下のように結果が取得できます!

f:id:sugimomoto:20211216164359p:plain

対象の汎用モジュールが表示されない場合の対処方法

もし利用したい対象の汎用モジュールが表示されない場合は、以下の接続設定を確認してみてください。

https://cdn.cdata.com/help/RYG/jp/jdbc/RSBSAP_p_StoredProcedureFilter.htm

デフォルトではあまりにも汎用モジュールの数が多いので、BAPIの汎用モジュールのみ表示されるよう設定されています。

f:id:sugimomoto:20211216164404p:plain

以下のように接続プロパティを追加することで

StoredProcedureFilter="*";

以下のようにすべての汎用モジュール・RFCを確認できるようになります。

f:id:sugimomoto:20211216164409p:plain

おわりに

このようにCData SAP ERP Driver は汎用モジュール・RFCをうまく駆使しながら、製品として構成されています。

ぜひこの部分を使いこなしながら、SAP ERP連携を実現してみてください。

もしよくわからな点があれば、お気軽にテクニカルサポートまでお問い合わせください。

https://www.cdata.com/jp/support/submit.aspx