Data Provider for SAP に関する問題のトラブルシューティング
このセクションでは、トラブルシューティング手法を使用して、.NET Framework Data Provider for mySAP Business Suite を使用するときに発生する可能性のある操作エラーを解決する方法について説明します。
DATA Provider for SAP を使用した不明なパラメーター エラー
問題
DATA Provider for SAP では、次のエラーが発生します。
Microsoft.Data.SAPClient.SAPException: Failed to retrieve data from SAP server --- > Microsoft.ServiceModel.Channels.Common.XmlReaderParsingException: Unknown Parameter OUT_ZDATATABLE.
原因
SAP システムにインストールされているカスタム RFC Z_EXTRACT_DATA_OOは最新ではありません。 DATA Provider for SAP では、カスタム RFC Z_EXTRACT_DATA_OOを使用して、SAP テーブルに対して SELECT 操作を実行します。
解決策
カスタム RFC を利用可能な最新バージョンに更新する必要があります。 この RFC Z_EXTRACT_DATA_OOは、adapterpacknoversion で使用できます。 カスタム RFC をインストールおよびアンインストールする方法の詳細については、「 Data Provider for SAP のカスタム RFC をインストールする」を参照してください。
SAP テーブルからデータを選択するときのメモリ不足例外
問題
SAP システムからデータを選択すると、データ プロバイダー for SAP によってメモリ不足の例外がスローされます。
原因
既定では、DATA Provider for SAP は一度に 10,000 行を取得します。 また、SAP システムから取得された行の各バッチは、メモリに格納されます。 そのため、
データの取得元のテーブルに多数の行が含まれている場合、または
テーブルに大量のメモリを消費するデータ型の列が含まれている場合、
DATA Provider for SAP によるメモリ消費量が大幅に増加し、メモリ不足の例外が発生する可能性があります。
解決策
SAP システムから取得される行の最大数を変更できます。 これを行うには、SELECT ステートメントで 'batchsize' オプションを指定します。 次に例を示します。
SELECT * FROM <tablename> OPTION 'batchsize 1000'
DATA Provider for SAP は一度に 1000 行しか取得しないため、大量のメモリを消費しません。
日付値を持つパラメーターを受け取るクエリの実行中の例外
問題
日付値を受け取るパラメーターを持つ EXECQUERY コマンドを使用してクエリを実行すると、次の例外が発生します。
ErrorCode=RFC_SYS_EXCEPTION. ErrorGroup=RFC_ERROR_SYSTEM_FAILURE.
SapErrorMessage=Enter date in the format __.__.____.
原因
EXECQUERY コマンドを使用してクエリを実行する場合は、常に日付値を YYYYMMDD 形式で指定する必要があります。
解像度
日付値は必ず YYYYMMDD 形式で指定してください。 次に例を示します。
EXECQUERY ZTEST3 @USERGROUP='SYSTQV000024', @P1='20080606'
EXECQUERY コマンドNO_VARIANT使用してクエリを実行する例外
問題
EXECQUERY コマンドを使用してクエリを実行すると、次の例外が発生します。
Exception: Details: ErrorCode=RFC_EXCEPTION. ErrorGroup=RFC_ERROR_APPLICATION_EXCEPTION. SapErrorMessage=NO_VARIANT.
AdapterErrorMessage=Error returned by RfcCallReceiveEx while calling RFC: <RFC name>
原因
この例外には、次の 2 つの原因が考えられます。
実行しようとしているクエリには、SAP システムで定義されているバリアントがあります。 バリアントは、SAP クエリの実行中に指定できる、保存された選択基準のセットを参照します。 たとえば、バリアントを使用してクエリの既定値を指定できます。
実行しようとしているクエリには、バリアントが定義されておらず、パラメーター値が渡される必要もありません。
解像度
理由 1 では、クエリに関連付けられているバリアントの名前を必ず指定してください。 次に例を示します。
EXECQUERY ZTEST3 @USERGROUP='SYSTQV000024', @variant = ‘variant1’
理由 2 では、クエリ コマンドを指定するときに、ダミーパラメーターの名前と値を指定してください。 たとえば、"myquery" クエリでパラメーターを実行する必要がない場合、EXECQUERY コマンドは次のように指定する必要があります。
EXECQUERY myquery @usergroup='mygroup',@P1 = 'dummy_value'