Ejemplos de la instrucción EXEC
En este tema se muestra una sintaxis de ejemplo para varias instrucciones EXEC.
Instrucciones de ejemplo
Para ejecutar un BAPI que no toma parámetros de entrada, utilice la sintaxis siguiente; los datos se devuelven a través de un objeto DataReader :
EXEC BAPI_COMPANYCODE_GETLIST
Para ejecutar una RFC que toma parámetros de entrada, use la sintaxis siguiente:
EXEC RFC_CUSTOMER_GET @NAME1='Contoso'
Para ejecutar una RFC que toma los parámetros de entrada especificados como una variable, use la sintaxis siguiente:
EXEC RFC_CUSTOMER_GET @var=@var
En este ejemplo, debe crear un parámetro denominado
@var
y establecer el valor explícitamente (por ejemplo, en 1001), porque el primer parámetro para RFC_CUSTOMER_GET corresponde a KUNNR (número de cliente).Para ejecutar una RFC que use una variable para el nombre del parámetro de entrada, use la siguiente sintaxis:
EXEC RFC_CUSTOMER_GET @KUNNR=@var1, @NAME1='Contoso'
Debe crear un parámetro denominado
@var1
, especificar el valor y, a continuación, enlazarlo al objeto de comando correspondiente. La dirección predeterminada del objeto de parámetro recién creado esinput
.Para ejecutar un BAPI y devolver tablas como parámetro, use la sintaxis siguiente:
EXEC BAPI_COMPANYCODE_GETLIST @COMPANYCODE_LIST=@var1 OUTPUT
Debe crear un parámetro denominado
@var1
, especificar el valor y enlazarlo al objeto de comando correspondiente. La dirección del objeto de parámetro recién creado debe serInputOutput
oOutput
.En el ejemplo EXEC siguiente se usa un parámetro de tipo complejo de tabla. En el ejemplo, @fields es un parámetro 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
En el ejemplo EXEC siguiente se usa un tipo complejo STRUCT. En el ejemplo, @equimaster es un parámetro 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
Compatibilidad con tipos de parámetros complejos
Hay dos maneras de admitir parámetros RFC complejos (tablas y estructuras) al usar el proveedor de datos para SAP:
Proporcione un valor XML insertado para el tipo complejo. En este ejemplo se muestra cómo pasar XML a los campos de tipo de parámetro complejo. En el ejemplo siguiente, @fields es un parámetro de tabla.
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
Cree un parámetro DataTable con columnas para los campos del tipo complejo y establezca el valor del parámetro de SAP en DataTable. En este ejemplo se muestra cómo establecer el @fields tipo complejo mediante una 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;
Limitaciones
El proveedor de datos para SAP tiene las siguientes limitaciones para los tipos complejos.
Cuando se pasa un tipo complejo en un parámetro mediante dataTable, debe incluir todos los campos (columnas) del tipo complejo en DataTable.
El adaptador de Microsoft BizTalk para mySAP Business Suite no admite DbNull. No se puede establecer DbNull como un valor para los parámetros.