プロバイダースキーマ
CData ADO.NET Provider for SAP ERP はSAP テーブル、クエリ、および汎用モジュールのスキーマを、実行時に動的に取得します。ただし、SAP システム全体のメタデータを取得することは非効率的な場合があるため、本製品 はまたデフォルトのフィルタを適用してSAP システムの一片のみを表示します。
以下では、本製品 がSAP オブジェクトの各タイプをどのようにモデル化するかを説明します。本製品 が何を表示するかを決定する方法は、非常にカスタマイズ可能です。SAP オブジェクトの選択についての詳細は、SAP エンティティへのアクセス を参照してください。
SAP テーブル
SAP テーブルはビューとして表示されます。これは、SAP テーブルに直接変更を加えることをSAP が強く嫌っているためです。代わりに、BAPIs などの汎用モジュールを使用してテーブルデータを変更する必要があります。詳しくは、汎用モジュールを参照してください。
テーブルデータは、RFC_READ_TABLE またはZ_CUSTOM_READ_TABLE のいずれか(インストールされている場合)の汎用モジュールを使用して、SAP から取得されます。これらは基本的なSQL サポートへのアクセスを可能にしますが、join やgroup by などのより複雑なクエリはローカルで処理しなければなりません。さらに複雑なクエリは、SupportEnhancedSQL がtrue に設定されている限り、本製品 によって自動的に処理されます。
RFC_READ_TABLE の制限を回避するための詳細は、カスタム Read Table 関数の使用 を参照してください。
SAP クエリ
テーブル同様に、SAP クエリをリレーショナルビューとして扱うこともできます。デフォルトでは、多すぎるオプションで本製品 が乱雑になるのを避けるためにオフになっています。これは、QueryMode 接続プロパティを使用してオンにできます。
テーブルとは異なり、SAP クエリでは、特定の値を入力として指定する必要があります。これらのクエリ入力は、SQL のpredicate の一部として指定できます。次に例を示します。
SELECT * FROM Z_SAP_QUERY WHERE InputName='x'
すべてのSAP クエリビューにはVariant カラムが含まれ、projection の一部としても入力できます。
SAP クエリの入力のみの値は、指定された値と同じ値として結果に反映されることに注意してください。これは、実際にSAP がそのように値を返したことを示すものではありません。これは、SQL ステートメントを有効にしておくために必要なことです。
汎用モジュール
SAP の汎用モジュールは、ほぼすべてのタスクに使用できます。これにはRFC_READ_TABLE などの本製品 のRFC 呼び出しや、BAPI_PO_CREATE などのデータを変更する汎用モジュールが含まれます。
汎用モジュールは、ストアドプロシージャとして直接実行できます。SAP の汎用モジュールは、プリミティブ値と複雑な構造を受け入れて返します。対応するストアドプロシージャはSQL の型およびテーブルを受け入れて返します。次に例を示します。
EXEC STFC_CONNECTION
より複雑な例については、RFC_READ_TABLE を試してください。
EXEC RFC_READ_TABLE @QUERY_TABLE='MARA', @FIELDS='FIELDS#TEMP', @ROWCOUNT=1
上記の例では、MARA テーブルを返すためにRFC_READ_TABLE 汎用モジュールが実行されています。QUERY_TABLE およびROWCOUNT パラメータはプリミティブ値として渡されています。この汎用モジュールでは、FIELDS は入力テーブルです。この入力を提供するには、#TEMP構文とINSERT ステートメントを使用してテンポラリテーブルを作成します。例:
INSERT INTO FIELDS#TEMP (FIELDNAME) VALUES ('MANDT'); INSERT INTO FIELDS#TEMP (FIELDNAME) VALUES ('MATNR'); INSERT INTO FIELDS#TEMP (FIELDNAME) VALUES ('ERSDA'); INSERT INTO FIELDS#TEMP (FIELDNAME) VALUES ('ERNAM');
あるいは、JSON またはXML を使用して、#TEMP テーブルの使用が難しい環境用のテーブル形式データを送信できます。例:
EXEC RFC_READ_TABLE OPTIONS='{ \"TEXT\": \"TABNAME LIKE ''MARA%''\" }', QUERY_TABLE='DD02L', ROWCOUNT='1', ReturnTables='DATA'
ストアドプロシージャスキーマのカスタマイズ
動的なインメモリスキーマを使用する代わりに、GenerateSchemaFiles を使ってカスタマイズが容易な静的スキーマファイルを保存することができます。一般的なユースケースは、本製品 がストアドプロシージャにレポートする不要で余計な入出力を削除することです。
SAP には、汎用モジュールのテーブルを入力または出力のいずれかとして区別するメタデータはありません。どのテーブルが実際に入力として使用され、どのテーブルが出力として使用されているかを知る方法がないため、本製品 はテーブルを入力と出力の両方で使用可能であるとレポートします。
スキーマファイルを生成するには、GenerateSchemaFiles を"OnUse" に設定してストアドプロシージャを呼び出します。 また、Location プロパティをスキーマを出力したいフォルダに設定します。
スキーマファイルを変更するには、Location フォルダにある生成されたスキーマファイルをテキストエディタで開きます。それから不要な<input> または<output> タグを見つけて削除します。本製品 で接続を更新して、スキーマと変更内容を取得します。