こんにちは。CData Software Japan リードエンジニアの杉本です。
CData でも数多くのお客様にご利用頂いているSAP ERP Driverですが、SAPのRFCやBAPIを活用している側面もあり、それら既存のRFC側の制約でエラーなどに遭遇することがあります。
代表的なのが、特定のテーブルをクエリした際に発生する以下のようなエラーです。
これは、CData SAP Driverが内部的に利用している「RFC_READ_TABLE」の汎用モジュールにおいて、取得できるレコードあたりのバイト数制限が存在し、発生している問題です。
ヘルプでも回避策について解説を行っていますが、今回は画面キャプチャなども交えながら詳しく詳細を解説したいと思います。
そもそもなぜこのカスタマイズが必要なのか?
まず、なぜこのような回避策が必要なのかについてざっくりと解説しましょう。
前述の通り、CData DriverはSAPのテーブルを読み取って、ODBC上で表現する際に「RFC_READ_TABLE」汎用モジュールを利用しています。
しかしながら、「RFC_READ_TABLE」ではデータ取得のためのバイト数制限があるため、今回のようなエラーに遭遇してしまうことがあります。
そこで CData は RFC_READ_TABLE をベースにした、汎用モジュールの作り方をお客様に提供し、テーブル呼び出しの際に利用する汎用モジュールを変更することで、制約を回避していただくというアプローチを取っています。
具体的には以下のRFC_READ_TABLEベースで作成した汎用モジュールのテーブル定義において、「DATA」項目のタイプを変更し、内部ロジックを追加チューニングすることにより、制約を回避します。
作成した汎用モジュールはRFCとして外部から呼び出せるように定義して、最終的にはCData Driverの接続プロパティ「ReadTableFunction」を「RFC_READ_TABLE」から切り替えて使用します。
手順
それでは具体的な手順を解説していきましょう。
手順としてはまず「SE37」画面で「RFC_READ_TABLE」をコピーしてください。「RFC_READ_TABLE」をテンプレートとして作り込んでいくためです。
この際に汎用モジュールの名前を一例として「Z_CUSTOM_READ_TABLE」としています。
その上で、外部からこの汎用モジュールを呼び出せるように「Remote-Enabled Module」Typeを選択します。 (上記画面では「Processing Type」の項目部分です)
続いて、Tablesタブで「DATA」を「CHAR8000」に変更します。
次にSource Codeタブに必要なプログラムを貼り付けます。
このプログラムはCData Driverのdbフォルダ、例えばODBCの場合ですと「C:\Program Files\CData\CData ODBC Driver for SAP ERP\db」のフォルダにインストールされています。
ABAPのバージョンに応じて「Z_CUSTOM_READ_TABLE.txt 」もしくは「Z_CUSTOM_READ_TABLE_752.txt」をご利用ください。
併せてソースコードのファイルで定義されているように、IMPORTING、TABLES、EXCEPTIONSを定義してください。
各画面の設定は以下のとおりです。
- Import
- Export
- Tables
- Exceptions
- Source Code
これで準備が完了するので、汎用モジュールを有効化します。
最後に作成した汎用モジュール「例:Z_CUSTOM_READ_TABLE」を接続プロパティの「ReadTableFunction」に指定することで、機能するようになります。
以上で、テーブルデータを読み取るための汎用モジュールが切り替えられます。
おわりに
他にもSAP ERP Driverでは様々なチューニングをサポートしています。
もし使っていて、ここがよくわからない等ありましたら、お気軽にテクニカルサポートフォームまでお問い合わせください。