Solucionar problemas relacionados con el proveedor de datos para SAP
En esta sección se describe el uso de técnicas de solución de problemas para resolver los errores operativos que puede encontrar al usar el proveedor de datos de .NET Framework para mySAP Business Suite.
Error de parámetro desconocido mediante el proveedor de datos para SAP
Problema
El proveedor de datos para SAP proporciona el siguiente error:
Microsoft.Data.SAPClient.SAPException: Failed to retrieve data from SAP server --- > Microsoft.ServiceModel.Channels.Common.XmlReaderParsingException: Unknown Parameter OUT_ZDATATABLE.
Causa
La RFC personalizada, Z_EXTRACT_DATA_OO, instalada en el sistema SAP no es la más reciente. El proveedor de datos para SAP usa una RFC personalizada, Z_EXTRACT_DATA_OO, para realizar operaciones SELECT en la tabla de SAP.
Resolución
Debe actualizar la RFC personalizada a la versión más reciente disponible. Este RFC, Z_EXTRACT_DATA_OO, está disponible con adapterpacknoversion. Para obtener más información sobre cómo instalar y desinstalar la RFC personalizada, consulte Instalación de RFC personalizados para el proveedor de datos para SAP.
Excepciones de memoria insuficiente al seleccionar datos de una tabla de SAP
Problema
El proveedor de datos para SAP produce una excepción de memoria insuficiente al seleccionar datos de un sistema SAP.
Causa
De forma predeterminada, el proveedor de datos para SAP recupera 10 000 filas a la vez. Además, cada lote de filas recuperadas del sistema SAP se almacena en la memoria. Por lo tanto,
Si la tabla de la que se recuperan los datos contiene un gran número de filas, o
Si la tabla contiene columnas de tipos de datos que consumen una cantidad significativa de memoria,
El consumo de memoria por parte del proveedor de datos para SAP aumenta significativamente y puede dar lugar a una excepción de memoria insuficiente.
Resolución
Puede cambiar el número máximo de filas recuperadas del sistema SAP. Para ello, especifique una opción "batchsize" con la instrucción SELECT. Por ejemplo:
SELECT * FROM <tablename> OPTION 'batchsize 1000'
El proveedor de datos de SAP ahora recupera solo 1000 filas a la vez y, por tanto, no consume una gran cantidad de memoria.
Excepción al ejecutar una consulta que toma parámetros con valores de fecha
Problema
Se obtiene la siguiente excepción al ejecutar una consulta mediante el comando EXECQUERY que tiene un parámetro que toma un valor de fecha:
ErrorCode=RFC_SYS_EXCEPTION. ErrorGroup=RFC_ERROR_SYSTEM_FAILURE.
SapErrorMessage=Enter date in the format __.__.____.
Causa
Al ejecutar consultas mediante el comando EXECQUERY, siempre debe especificar valores de fecha en formato AAAAMMDD.
Resolución
Asegúrese de especificar valores de fecha en formato AAAAMMDD. Por ejemplo:
EXECQUERY ZTEST3 @USERGROUP='SYSTQV000024', @P1='20080606'
NO_VARIANT excepción que ejecuta consultas mediante el comando EXECQUERY
Problema
Obtiene la siguiente excepción al ejecutar una consulta mediante el comando EXECQUERY:
Exception: Details: ErrorCode=RFC_EXCEPTION. ErrorGroup=RFC_ERROR_APPLICATION_EXCEPTION. SapErrorMessage=NO_VARIANT.
AdapterErrorMessage=Error returned by RfcCallReceiveEx while calling RFC: <RFC name>
Causa
Puede haber dos causas probables para esta excepción:
La consulta que intenta ejecutar tiene variantes definidas en el sistema SAP. Las variantes hacen referencia a un conjunto guardado de criterios de selección que puede especificar al ejecutar una consulta de SAP. Por ejemplo, puede usar variantes para especificar valores predeterminados para las consultas.
La consulta que está intentando ejecutar no tiene definida una variante ni espera que se pase un valor de parámetro.
Resolución
Por el motivo 1, asegúrese de especificar el nombre de la variante asociada a la consulta. Por ejemplo:
EXECQUERY ZTEST3 @USERGROUP='SYSTQV000024', @variant = ‘variant1’
Por el motivo 2, asegúrese de proporcionar un nombre de parámetro ficticio y un valor al especificar el comando de consulta. Por ejemplo, si la consulta "myquery" no requiere que se ejecute ningún parámetro, el comando EXECQUERY debe especificarse como:
EXECQUERY myquery @usergroup='mygroup',@P1 = 'dummy_value'