Exemples pour l’instruction EXEC
Cette rubrique présente un exemple de syntaxe pour différentes instructions EXEC.
Exemples d’instructions
Pour exécuter une BAPI qui ne prend aucun paramètre d’entrée, utilisez la syntaxe suivante : les données sont retournées par le biais d’un objet DataReader :
EXEC BAPI_COMPANYCODE_GETLIST
Pour exécuter une RFC qui prend des paramètres d’entrée, utilisez la syntaxe suivante :
EXEC RFC_CUSTOMER_GET @NAME1='Contoso'
Pour exécuter une RFC qui prend des paramètres d’entrée spécifiés en tant que variable, utilisez la syntaxe suivante :
EXEC RFC_CUSTOMER_GET @var=@var
Dans cet exemple, vous devez créer un paramètre nommé
@var
et définir explicitement la valeur (par exemple, sur 1001), car le premier paramètre pour RFC_CUSTOMER_GET correspond à KUNNR (Customer Number)Pour exécuter une RFC qui utilise une variable pour le nom du paramètre d’entrée, utilisez la syntaxe suivante :
EXEC RFC_CUSTOMER_GET @KUNNR=@var1, @NAME1='Contoso'
Vous devez créer un paramètre nommé
@var1
, spécifier la valeur, puis le lier à l’objet de commande correspondant. La direction par défaut de l’objet de paramètre nouvellement créé estinput
.Pour exécuter un BAPI et retourner des tables en tant que paramètre, utilisez la syntaxe suivante :
EXEC BAPI_COMPANYCODE_GETLIST @COMPANYCODE_LIST=@var1 OUTPUT
Vous devez créer un paramètre nommé
@var1
, spécifier la valeur et le lier à l’objet de commande correspondant. La direction de l’objet de paramètre nouvellement créé doit êtreInputOutput
ouOutput
.L’exemple EXEC suivant utilise un paramètre de type complexe table. Dans l’exemple, @fields est un paramètre TABLE.
exec rfc_read_table @query_table='BNKA', @fields='<FIELDS xmlns='http://Microsoft.LobServices.Sap/2007/03/Rfc/'> <RFC_DB_FLD xmlns="http://Microsoft.LobServices.Sap/2007/03/Types/Rfc/"> <FIELDNAME>BANKL</FIELDNAME> </RFC_DB_FLD> <RFC_DB_FLD xmlns="http://Microsoft.LobServices.Sap/2007/03/Types/Rfc/"> <FIELDNAME>BANKS</FIELDNAME> </RFC_DB_FLD> </FIELDS>', @fields=@flds output
L’exemple EXEC suivant utilise un type complexe STRUCT. Dans l’exemple, @equimaster est un paramètre STRUCT.
exec BAPI_EQMT_MODIFY @equipment='000000000000000637', @equimaster='<EQUIMASTER> <EQUIPMENT xmlns="http://Microsoft.LobServices.Sap/2007/03/Types/Rfc/">equip</EQUIPMENT> <EQUICATGRY xmlns="http://Microsoft.LobServices.Sap/2007/03/Types/Rfc/">E</EQUICATGRY> <MATERIAL xmlns="http://Microsoft.LobServices.Sap/2007/03/Types/Rfc/">mat</MATERIAL> </EQUIMASTER >', @equimaster=@em output
Prise en charge des types de paramètres complexes
Il existe deux façons de prendre en charge des paramètres RFC complexes (tables et structures) lorsque vous utilisez le fournisseur de données pour SAP :
Fournissez une valeur XML inline pour le type complexe. Cet exemple montre comment passer du code XML aux champs de type de paramètre complexes. Dans l’exemple suivant, @fields est un paramètre de table.
exec rfc_read_table @query_table='BNKA', @fields='<FIELDS xmlns='http://Microsoft.LobServices.Sap/2007/03/Rfc/'> <RFC_DB_FLD xmlns="http://Microsoft.LobServices.Sap/2007/03/Types/Rfc/"> <FIELDNAME>BANKL</FIELDNAME> </RFC_DB_FLD> <RFC_DB_FLD xmlns="http://Microsoft.LobServices.Sap/2007/03/Types/Rfc/"> <FIELDNAME>BANKS</FIELDNAME> </RFC_DB_FLD> </FIELDS>', @fields=@flds output
Créez un paramètre DataTable avec des colonnes pour les champs du type complexe et définissez la valeur du paramètre SAP sur DataTable. Cet exemple montre comment définir le type complexe à l’aide @fields d’un DataTable.
cmd.CommandText = "exec rfc_read_table @query_table='BNKA', @fields = @p_fields"; DataTable dt = new DataTable(); dt.Columns.Add("FIELDNAME"); SAPParameter p = new SAPParameter("@p_fields"); p.Value = dt;
Limites
Le fournisseur de données pour SAP présente les limitations suivantes pour les types complexes.
Lorsque vous passez un type complexe dans un paramètre à l’aide d’un DataTable, vous devez inclure tous les champs (colonnes) du type complexe dans le DataTable.
L’adaptateur Microsoft BizTalk pour mySAP Business Suite ne prend pas en charge DbNull. Vous ne pouvez pas définir DbNull comme valeur pour les paramètres.