Résolution des problèmes avec le fournisseur de données pour SAP
Cette section décrit l’utilisation de techniques de résolution des problèmes pour résoudre les erreurs opérationnelles que vous pouvez rencontrer lors de l’utilisation du fournisseur de données .NET Framework pour mySAP Business Suite.
Erreur de paramètre inconnu à l’aide du fournisseur de données pour SAP
Problème
Le fournisseur de données pour SAP génère l’erreur suivante :
Microsoft.Data.SAPClient.SAPException: Failed to retrieve data from SAP server --- > Microsoft.ServiceModel.Channels.Common.XmlReaderParsingException: Unknown Parameter OUT_ZDATATABLE.
Cause
Le RFC personnalisé, Z_EXTRACT_DATA_OO, installé dans votre système SAP n’est pas le dernier. Le fournisseur de données pour SAP utilise une RFC personnalisée, Z_EXTRACT_DATA_OO, pour effectuer des opérations SELECT sur la table SAP.
Résolution :
Vous devez mettre à jour le RFC personnalisé vers la dernière version disponible. Cette RFC, Z_EXTRACT_DATA_OO, est disponible avec adapterpacknoversion. Pour plus d’informations sur l’installation et la désinstallation du RFC personnalisé, consultez Installer des RFC personnalisés pour le fournisseur de données pour SAP.
Exceptions de mémoire insuffisante lors de la sélection de données à partir d’une table SAP
Problème
Le fournisseur de données pour SAP lève une exception de mémoire insuffisante lors de la sélection de données à partir d’un système SAP.
Cause
Par défaut, le fournisseur de données pour SAP récupère 10 000 lignes à la fois. En outre, chaque lot de lignes récupérées à partir du système SAP est stocké dans la mémoire. Ainsi,
Si la table à partir de laquelle les données sont récupérées contient un grand nombre de lignes, ou
Si la table contient des colonnes de types de données qui consomment une quantité importante de mémoire,
La consommation de mémoire par le fournisseur de données pour SAP augmente considérablement et peut entraîner une exception de mémoire insuffisante.
Résolution :
Vous pouvez modifier le nombre maximal de lignes récupérées à partir du système SAP. Pour ce faire, spécifiez une option « batchsize » avec l’instruction SELECT. Par exemple :
SELECT * FROM <tablename> OPTION 'batchsize 1000'
Le fournisseur de données pour SAP ne récupère désormais que 1 000 lignes à la fois et ne consomme donc pas une grande quantité de mémoire.
Exception lors de l’exécution d’une requête qui prend des paramètres avec des valeurs de date
Problème
Vous obtenez l’exception suivante lorsque vous exécutez une requête à l’aide de la commande EXECQUERY qui a un paramètre qui prend une valeur de date :
ErrorCode=RFC_SYS_EXCEPTION. ErrorGroup=RFC_ERROR_SYSTEM_FAILURE.
SapErrorMessage=Enter date in the format __.__.____.
Cause
Lorsque vous exécutez des requêtes à l’aide de la commande EXECQUERY, vous devez toujours spécifier des valeurs de date au format AAAAMMJJ.
Résolution :
Veillez à spécifier des valeurs de date au format AAAAMMJJ. Par exemple :
EXECQUERY ZTEST3 @USERGROUP='SYSTQV000024', @P1='20080606'
NO_VARIANT exception exécutant des requêtes à l’aide de la commande EXECQUERY
Problème
Vous obtenez l’exception suivante lorsque vous exécutez une requête à l’aide de la commande EXECQUERY :
Exception: Details: ErrorCode=RFC_EXCEPTION. ErrorGroup=RFC_ERROR_APPLICATION_EXCEPTION. SapErrorMessage=NO_VARIANT.
AdapterErrorMessage=Error returned by RfcCallReceiveEx while calling RFC: <RFC name>
Cause
Il peut y avoir deux causes probables pour cette exception :
La requête que vous essayez d’exécuter comporte des variantes définies dans le système SAP. Les variantes font référence à un ensemble enregistré de critères de sélection que vous pouvez spécifier lors de l’exécution d’une requête SAP. Par exemple, vous pouvez utiliser des variantes pour spécifier des valeurs par défaut pour les requêtes.
La requête que vous essayez d’exécuter n’a pas de variante définie et elle s’attend à ce qu’une valeur de paramètre soit transmise.
Résolution :
Pour la raison 1, veillez à spécifier le nom de la variante associée à la requête. Par exemple :
EXECQUERY ZTEST3 @USERGROUP='SYSTQV000024', @variant = ‘variant1’
Pour la raison 2, veillez à fournir un nom et une valeur de paramètre factices lors de la spécification de la commande de requête. Par exemple, si la requête « myquery » ne nécessite aucun paramètre pour s’exécuter, la commande EXECQUERY doit être spécifiée comme suit :
EXECQUERY myquery @usergroup='mygroup',@P1 = 'dummy_value'