Compartir a través de


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 es input.

  • 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 ser InputOutput o Output.

  • 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.