Invocación de TRFC en SAP mediante BizTalk Server
Las llamadas a funciones remotas transaccionales (TRFC) garantizan una ejecución única y única de una RFC en un sistema SAP. Puede invocar cualquiera de las RFC expuestas por el adaptador de SAP como tRFC. Invocar un tRFC es similar a invocar una RFC (consulte Invocación de RFC en SAP mediante BizTalk Server) con las siguientes diferencias:
El adaptador de SAP muestra TRFC en un nodo diferente (TRFC) que los RFC (RFC).
Las operaciones tRFC incluyen un parámetro GUID que se asigna al identificador de transacción de SAP para el tRFC mediante el adaptador de SAP.
Después de invocar un tRFC, debe invocar la operación RfcConfirmTransID para confirmar (confirmar) el tRFC en el sistema SAP. Esta operación se muestra directamente bajo el nodo TRFC en Consumir complemento de servicio de adaptador.
Para obtener más información sobre cómo el adaptador de SAP admite la invocación de un tRFC, consulte Operaciones en TRFC en SAP. Para obtener más información sobre la estructura de los mensajes SOAP para invocar un tRFC, vea Esquemas de mensajes para operaciones de tRFC.
¿Cómo invocar un tRFC en un sistema SAP mediante BizTalk Server?
La realización de una operación en un sistema SAP mediante BizTalk Server implica tareas de procedimientos descritas en Bloques de creación para crear aplicaciones SAP. Para invocar un tRFC en un sistema SAP, estas tareas son:
Cree un proyecto de BizTalk y genere el esquema para el tRFC que desea invocar en el sistema SAP. También debe generar el esquema para la operación RfcConfirmTransID para confirmar el TID en el sistema SAP.
Cree mensajes en el proyecto de BizTalk para enviar y recibir mensajes desde el sistema SAP.
Cree una orquestación para invocar un tRFC en el sistema SAP y, a continuación, confirme el TID que se crea en el sistema SAP en respuesta a la llamada tRFC realizada por el adaptador de SAP.
Compile e implemente el proyecto de BizTalk.
Configure la aplicación de BizTalk mediante la creación de puertos físicos de envío y recepción.
Inicie la aplicación de BizTalk.
En este tema se proporcionan instrucciones para realizar estas tareas.
Ejemplo basado en este tema
También se proporciona un ejemplo de tRFCClient basado en este tema con el paquete de adaptadores de BizTalk. Para más información, consulte Ejemplos del adaptador de SAP.
Generar esquema
En este tema, para demostrar cómo invocar un tRFC mediante el adaptador de SAP, generaremos el esquema para:
BAPI_SALESORDER_CREATEFROMDAT2 tRFC.
Operación RfcConfirmTransID. Debe usar esta operación para confirmar el TID que se crea en el sistema SAP. Una vez que el sistema SAP recibe esta llamada, elimina el TID del sistema.
Consulte Examinar, buscar y obtener metadatos para operaciones de tRFC en SAP para obtener más información sobre cómo generar el esquema.
Definición de mensajes y tipos de mensajes
El esquema que generó anteriormente describe los "tipos" necesarios para los mensajes de la orquestación. Normalmente, un mensaje es una variable, el tipo para el que se define mediante el esquema correspondiente. Debe vincular el esquema que generó a los mensajes desde la vista orquestación del proyecto de BizTalk.
Para este tema, debe crear cuatro mensajes: un mensaje de solicitud-respuesta establecido para invocar el tRFC y otro mensaje de solicitud-respuesta establecido para invocar la operación RfcConfirmTransID.
Realice los pasos siguientes para crear mensajes y vincularlos al esquema.
Para crear mensajes y vincular al esquema
Abra la vista de orquestación del proyecto de BizTalk, si aún no está abierto. Haga clic en Ver, seleccione Otras ventanas y haga clic en Vista de orquestación.
En la vista Orquestación, haga clic con el botón derecho en Mensajes y, a continuación, haga clic en Nuevo mensaje.
Haga clic con el botón derecho en el mensaje recién creado y seleccione Ventana Propiedades.
En el panel Propiedades de Message_1, haga lo siguiente.
Use Para hacer esto Identificador Escriba Solicitud. Tipo de mensaje En la lista desplegable, expanda Esquemas y seleccione el tipo de mensaje. Por ejemplo, seleccione tRFC_Client.SAPBindingSchema1.BAPI_SALESORDER_CREATEFROMDAT2, donde tRFC_Client es el nombre del proyecto de BizTalk. SAPBindingSchema1 es el esquema generado para BAPI_SALESORDER_CREATEFROMDAT2. Repita el paso anterior para crear tres mensajes más. En el panel Propiedades de los nuevos mensajes, haga lo siguiente.
Establecer identificador en Establecer el tipo de mensaje en Response tRFC_Client.SAPBindingSchema1.BAPI_SALESORDER_CREATEFROMDAT2Response TIDRequest tRFC_Client.SAPBindingSchema3.RfcConfirmTransID TIDResponse tRFC_Client.SAPBindingSchema3.RfcConfirmTransIDResponse
Configuración de la orquestación
Debe crear una orquestación de BizTalk para usar BizTalk Server para invocar TRFC en un sistema SAP. En esta orquestación, quitará un mensaje de solicitud en una ubicación de recepción definida. La orquestación consume este mensaje y lo pasa al sistema SAP. La respuesta se recibe de SAP y se guarda en otra ubicación. El mensaje de respuesta contiene un GUID. La orquestación incluye una forma Construir mensaje para extraer el GUID de la respuesta y construir un mensaje que se ajuste al esquema de la operación RfcConfirmTransID . El mensaje para invocar la operación RfcConfirmTransID se envía al sistema SAP con el GUID como parámetro _ Una orquestación típica para invocar tRFC en un sistema SAP, seguida de una operación RfcConfirmTransID contendrá:
Enviar y recibir formas para enviar mensajes al sistema SAP y recibir respuestas.
Forma Construir mensaje y dentro de esa forma de asignación de mensajes para construir un mensaje para la operación RfcConfirmTransID .
Un puerto de recepción unidireccional para recibir mensajes de solicitud que se enviarán al sistema SAP para invocar el tRFC.
Puerto de envío bidireccional para enviar mensajes para invocar el tRFC y recibir respuesta.
Puerto de envío bidireccional para enviar mensajes para invocar la operación RfcConfirmTransID y recibir respuesta.
Dos puertos de envío unidireccionales para enviar las respuestas del sistema SAP a una carpeta.
Una orquestación de ejemplo es similar a la siguiente:
Agregar formas de mensaje
Especifique las siguientes propiedades para cada una de las formas de mensaje. Los nombres que aparecen en la columna Shape son los nombres de las formas de mensaje que se muestran en la orquestación anterior.
Forma | Tipo de forma | Propiedades |
---|---|---|
ReceiveXml | Recepción | - Establecer el nombre en ReceiveXml - Establecer Activar enTrue |
SendToLOB | Envío | - Establecer nombre en SendToLOB |
ReceiveResponse | Recepción | - Establecer nombre en ReceiveResponse - Establecer Activar en False |
SendResponse | Envío | - Establecer nombre en SendResponse |
SendTIDMsg | Envío | - Establecer nombre en SendTIDMsg |
ReceiveTIDRsp | Recepción | - Establecer nombre en ReceiveTIDRsp - Establecer Activar en False |
SendTIDRsp | Envío | - Establecer nombre en SendTIDRsp |
Adición de la forma Construir mensaje
La respuesta del sistema SAP para la llamada tRFC contiene un GUID. Para confirmar la llamada tRFC, debe pasar el mismo GUID a la operación RfcConfirmTransID. Para ello, debe incluir una forma Construir mensaje y dentro de esa forma de asignación de mensajes, en la orquestación. Aquí, el propósito de la forma Construir mensaje es:
Para extraer el GUID de la respuesta que se recibe del sistema SAP para la llamada tRFC.
Para construir un mensaje que se ajuste al esquema del mensaje para la operación RfcConfirmTransID.
Para la forma Construir mensaje, debe establecer la propiedad Construido de mensaje en TIDRequest.
Debe agregar el siguiente fragmento de código a la forma Asignación de mensajes:
XmlDoc = new System.Xml.XmlDocument();
XmlDoc.LoadXml("<RfcConfirmTransID xmlns='http://Microsoft.LobServices.Sap/2007/03/RfcApi/'><TransactionalRfcOperationIdentifier /></RfcConfirmTransID>");
TIDRequest = XmlDoc;
TIDRequest.TransactionalRfcOperationIdentifier = xpath(Response,"string(/*[local-name()='BAPI_SALESORDER_CREATEFROMDAT2Response']/*[local-name()='TransactionalRfcOperationIdentifier']/text())");
Para usar el fragmento de código anterior, debe tener:
Ha creado una variable, XmlDoc, en el proyecto de BizTalk y establece su tipo en System.Xml. Xmldocument. Para obtener más información sobre la creación de variables, vea Using Variables in Orchestrations.
Se ha promovido la propiedad TransactionalRfcOperationIdentifier en el esquema para la operación RfcConfirmTransID. Para obtener más información sobre cómo promover una propiedad, vea Promoción de propiedades.
Adición de puertos
Asegúrese de especificar las siguientes propiedades para cada uno de los puertos lógicos. Los nombres enumerados en la columna Puerto son los nombres de los puertos que se muestran en la orquestación.
Port | Propiedades |
---|---|
FileIn | - Establecer identificador en FileIn - Establecer tipo en FileInPortType - Establecer el patrón de comunicación en unidireccional - Establecer la dirección de comunicación para recibir |
tRFC_Port | - Establecer identificador entRFC_Port - Establecer tipoen tRFC_PortType - Establecer el patrón de comunicación en Solicitud-respuesta - Establecer la dirección de comunicación en enviar y recibir |
SavetRFCResponse | - Establecer identificador en SavetRFCResponse - Establecer tipo en SavetRFCResponsePortType - Establecer el patrón de comunicación en unidireccional - Establecer la dirección de comunicación en Enviar |
TID_Port | - Establecer identificador en TID_Port - Establecer tipo en TIDPortType - Establecer el patrón de comunicación en Solicitud-respuesta - Establecer la dirección de comunicación en enviar y recibir |
SaveTIDResponse | - Establecer identificador en SaveTIDResponse - Establecer tipo en SaveTIDResponsePortType - Establecer el patrón de comunicación en unidireccional - Establecer la dirección de comunicación en Enviar |
Especificar mensajes para formas de acción y conectarse a puertos
En la tabla siguiente se especifican las propiedades y sus valores que se van a establecer para especificar mensajes para las formas de acción y vincularlas a los puertos. Los nombres enumerados en la columna Shape son los nombres de las formas de mensaje tal como se muestran en la orquestación anterior.
Forma | Propiedades |
---|---|
ReceiveXml | - Establecer mensaje en solicitud - Establecer operación en FileIn.tRFC.Request |
SendToLOB | - Establecer mensaje en solicitud - Establecer operaciónen tRFC_Port.tRFC.Request |
ReceiveResponse | - Establecer mensaje en respuesta - Establecer operaciónen tRFC_Port.tRFC.Response |
SendResponse | - Establecer mensaje en respuesta - Establecer operación en SavetRFCResponse.tRFC.Request |
SendTIDMsg | - Establecer mensaje en TIDRequest - Establecer operaciónen TID_Port.TID.Request |
ReceiveTIDRsp | - Establecer mensaje en TIDResponse - Establecer operaciónen TID_Port.TID.Response |
SendTIDRsp | - Establecer mensaje en TIDResponse - Establecer operación en SaveTIDResponse.TID.Request |
Después de especificar estas propiedades, las formas y los puertos de mensaje están conectados y se completa la orquestación.
Ahora debe compilar la solución de BizTalk y, a continuación, implementarla en un BizTalk Server. Para obtener más información, vea Compilar y ejecutar orquestaciones.
Configuración de la aplicación de BizTalk
Después de implementar el proyecto de BizTalk, la orquestación que creó anteriormente aparece en el panel Orquestaciones de la consola de administración de BizTalk Server. Debe usar la consola de administración de BizTalk Server para configurar la aplicación. Para obtener más información sobre cómo configurar una aplicación, vea How to Configure an Application.
La configuración de una aplicación implica:
Selección de un host para la aplicación.
Asignación de los puertos que creó en la orquestación a puertos físicos en la consola de administración de BizTalk Server. Para esta orquestación, debe:
Defina una ubicación en el disco duro y un puerto de archivo correspondiente donde quitará un mensaje de solicitud. La orquestación de BizTalk consumirá el mensaje de solicitud para enviarlo al sistema SAP.
Defina una ubicación en el disco duro y un puerto de archivo correspondiente donde la orquestación de BizTalk quitará el mensaje de respuesta que contiene la respuesta del sistema SAP.
Defina puertos de envío físicos WCF-Custom o WCF-SAP (uno para el mensaje de solicitud tRFC y el mensaje RfcConfirmTransID) para enviar mensajes al sistema SAP. También debe especificar la acción en el puerto de envío. Para obtener información sobre cómo crear puertos, consulte Configuración manual de un enlace de puerto físico al adaptador de SAP.
Nota
La generación del esquema mediante el Complemento de proyecto consumir servicio de adaptador de BizTalk también crea un archivo de enlace que contiene información sobre los puertos y las acciones que se van a establecer para esos puertos. Puede importar este archivo de enlace desde la consola de administración de BizTalk Server para crear puertos de envío (para llamadas salientes) o puertos de recepción (para llamadas entrantes). Para más información, consulte Configuración de un enlace de puerto físico mediante un archivo de enlace de puerto a SAP.
Iniciar la aplicación
Debe iniciar la aplicación de BizTalk para invocar TRFC en un sistema SAP. Para obtener instrucciones sobre cómo iniciar una aplicación de BizTalk, vea Cómo iniciar una orquestación o Cómo iniciar una aplicación.
En esta fase, asegúrese de:
El puerto de recepción FILE para recibir mensajes de solicitud para la orquestación se está ejecutando.
El puerto de envío FILE para recibir los mensajes de respuesta de la orquestación se está ejecutando.
Los puertos de envío de WCF-Custom o WCF-SAP para enviar mensajes al sistema SAP se están ejecutando.
La orquestación de BizTalk para la operación se está ejecutando.
Ejecución de la operación
Después de ejecutar la aplicación, debe quitar un mensaje de solicitud para la orquestación. Consulte Esquemas de mensajes para las operaciones de tRFC para conocer el esquema del mensaje de solicitud para invocar un tRFC en un sistema SAP. Por ejemplo, el mensaje de solicitud para invocar BAPI_SALEASORDER_CREATEFROMDAT2 como tRFC es:
<BAPI_SALESORDER_CREATEFROMDAT2 xmlns="http://Microsoft.LobServices.Sap/2007/03/Trfc/">
<ORDER_HEADER_IN>
<DOC_TYPE xmlns="http://Microsoft.LobServices.Sap/2007/03/Types/Rfc/">TA</DOC_TYPE>
<SALES_ORG xmlns="http://Microsoft.LobServices.Sap/2007/03/Types/Rfc/">1000</SALES_ORG>
<DISTR_CHAN xmlns="http://Microsoft.LobServices.Sap/2007/03/Types/Rfc/">10</DISTR_CHAN>
<DIVISION xmlns="http://Microsoft.LobServices.Sap/2007/03/Types/Rfc/">00</DIVISION>
<SALES_OFF xmlns="http://Microsoft.LobServices.Sap/2007/03/Types/Rfc/">1000</SALES_OFF>
<REQ_DATE_H xmlns="http://Microsoft.LobServices.Sap/2007/03/Types/Rfc/">2006-09-01T23:50:00</REQ_DATE_H>
<PURCH_DATE xmlns="http://Microsoft.LobServices.Sap/2007/03/Types/Rfc/">2006-08-25T23:50:00</PURCH_DATE>
<PURCH_NO_C xmlns="http://Microsoft.LobServices.Sap/2007/03/Types/Rfc/">Cust PO</PURCH_NO_C>
<CURRENCY xmlns="http://Microsoft.LobServices.Sap/2007/03/Types/Rfc/">EUR</CURRENCY>
</ORDER_HEADER_IN>
<ORDER_ITEMS_IN>
<BAPISDITM xmlns="http://Microsoft.LobServices.Sap/2007/03/Types/Rfc/">
<MATERIAL>P-109</MATERIAL>
<PLANT>1000</PLANT>
<TARGET_QU>ST</TARGET_QU>
</BAPISDITM>
</ORDER_ITEMS_IN>
<ORDER_PARTNERS>
<BAPIPARNR xmlns="http://Microsoft.LobServices.Sap/2007/03/Types/Rfc/">
<PARTN_ROLE>AG</PARTN_ROLE>
<PARTN_NUMB>0000001390</PARTN_NUMB>
</BAPIPARNR>
</ORDER_PARTNERS>
<RETURN/>
<TransactionalRfcOperationIdentifier>def689b1-b514-4627-a861-d6d7f51c84e3</TransactionalRfcOperationIdentifier>
</BAPI_SALESORDER_CREATEFROMDAT2>
La orquestación consume el mensaje, lo pasa al sistema SAP y recibe una respuesta del sistema SAP. El mensaje de respuesta se guarda en la otra ubicación de archivo especificada como parte de la orquestación. La respuesta del sistema SAP contiene un GUID. A continuación, la orquestación genera otro mensaje de solicitud de la respuesta y lo pasa al sistema SAP para ejecutar RfcConfirmTransID. Una vez recibida la respuesta del sistema SAP para la operación RfcConfirmTransID, se copia en la ubicación del archivo. En resumen, una vez ejecutada correctamente la operación:
Se copia un mensaje de respuesta de SAP para invocar tRFC en la ubicación del archivo. Contiene el mismo GUID que se envió al sistema SAP. El mensaje de respuesta que invoca BAPI_SALESORDER_CREATEFROMDAT2 como tRFC es:
<?xml version="1.0" encoding="utf-8"?> <BAPI_SALESORDER_CREATEFROMDAT2Response xmlns="http://Microsoft.LobServices.Sap/2007/03/Trfc/"> <TransactionalRfcOperationIdentifier>def689b1-b514-4627-a861-d6d7f51c84e3</TransactionalRfcOperationIdentifier> </BAPI_SALESORDER_CREATEFROMDAT2Response>
Se copia un mensaje de respuesta para RfcConfirmTransID en la misma ubicación. Se trata de una respuesta vacía. El mensaje de respuesta para RfcConfirmTransID es:
<?xml version="1.0" encoding="utf-8"?> <RfcConfirmTransIDResponse xmlns="http://Microsoft.LobServices.Sap/2007/03/RfcApi/"></RfcConfirmTransIDResponse>
Nota
Puede usar el método público ConvertGuidToTid() expuesto por el ensamblado del adaptador de SAP para recuperar el TID en el sistema SAP asignado al GUID. Para obtener más información, consulte Operaciones especiales.
Posibles excepciones
Para obtener información sobre las excepciones que puede encontrar al invocar un tRFC en un sistema SAP mediante BizTalk Server, consulte Excepciones y control de errores con el adaptador de SAP.
Prácticas recomendadas
Después de haber implementado y configurado el proyecto de BizTalk, puede exportar las opciones de configuración a un archivo XML denominado archivo de enlaces. Una vez que genere un archivo de enlaces, puede importar los valores de configuración del archivo para que no necesite crear los puertos de envío, los puertos de recepción, etc. para la misma orquestación. Para obtener más información sobre los archivos de enlace, consulte Reutilización de enlaces de adaptador de SAP.