Paso 3b: Recuperar detalles de oportunidades de Salesforce con el adaptador WCF-WebHttp
En esta sección, mejoraremos la orquestación para procesar la notificación de oportunidad entrante, extraer el nombre de la oportunidad de la notificación y usarlo para crear una consulta que se enviará a Salesforce. Con ella, recuperaremos detalles concretos de los productos asociados con la oportunidad. La respuesta de consulta de Salesforce se recibe de nuevo en BizTalk Server. Para lograr esto, realizaremos los siguientes pasos:
Crear un esquema y variables de mensaje para enviar un mensaje de consulta a Salesforce.
Crear una asignación para usar los valores de la notificación de oportunidad para crear una consulta que recupere detalles de los productos asociados con la oportunidad.
Crear un esquema para recibir una respuesta de Salesforce a la consulta.
Crear variables de mensaje para los esquemas de la solicitud y la respuesta.
Crear un esquema y variables de mensaje para enviar mensajes de consulta a Salesforce
Para recuperar detalles de productos de Salesforce usando la información disponible en la notificación de oportunidad, debemos enviar una consulta a Salesforce. La consulta se envía a Salesforce con formato de mensaje XML. Por tanto, en el procedimiento siguiente, crearemos un esquema para el mensaje de solicitud. En el procedimiento posterior, asignaremos el esquema de la notificación de oportunidad a este esquema para construir una consulta que nos permita recuperar detalles de los productos de la oportunidad.
Para crear un esquema para enviar la solicitud de consulta
Agregue un nuevo esquema al proyecto de BizTalk Server. Asígnale el nombre
QueryRequest.xsd
.Cambie el nombre del nodo raíz a
QueryRequest
. Agregue un elemento de campo secundario en el registro QueryRequest y asígneleQuery
el nombre .Promueva el elemento Query en el esquema para que esté disponible para su uso en la orquestación. En los pasos siguientes, usaremos este elemento promovido para asignar la cadena de consulta.
Haga clic con el botón derecho en el elemento Query , seleccione Promover y, a continuación, haga clic en Promociones rápidas. Esto da como resultado la creación de un esquema PropertySchema.xsd con un elemento Query . Tome nota del espacio de nombres para PropertySchema. Lo necesitará en los pasos futuros al configurar los puertos físicos en BizTalk Server consola de administración.
Guarde todos los cambios.
Asignar el esquema de la notificación de oportunidad al esquema de la consulta
Para recuperar los detalles de productos asociados con la oportunidad, debemos enviar a Salesforce una consulta similar a la siguiente:
SELECT Amount, Id, Name,(SELECT Quantity, ListPrice, PricebookEntry.UnitPrice, PricebookEntry.Name FROM OpportunityLineItems) FROM Opportunity Where Name = '<opportunity_name>'
En el procedimiento anterior, ya creamos el esquema del mensaje de consulta. En este procedimiento, asignaremos el esquema de la notificación de oportunidad al esquema de la solicitud de consulta y usaremos functoids para construir la consulta. Esta consulta se pasará como un valor al elemento Query en el esquema QueryRequest.xsd .
Para asignar la notificación de oportunidad
Agregue un mapa al proyecto de BizTalk Server. Asigne el
Notification_QueryRequest.btm
nombre .Establezca el esquema de origen en NotificationService_soap_sforce_com_2005_09_outbound.xsd. Establezca el esquema de destino en QueryRequest.xsd.
Agregue un functoid concatenado de cadena a la superficie de asignación. Abra el cuadro de diálogo Configurar concatenar functoid de cadena y especifique los valores de entrada de la siguiente manera:
Entrada Value Entrada[0] SELECT Amount, Id, Name,(SELECT Quantity, ListPrice, PricebookEntry.UnitPrice, PricebookEntry.Name FROM OpportunityLineItems) FROM Opportunity Where Name = ' Entrada[1] Conecte el elemento Name del esquema de origen al functoid para usar el valor del elemento Name como segunda entrada. Entrada[2] ' Nota: Para el último valor de entrada, especifique solo una comilla simple de cierre ('). En la captura de pantalla siguiente se muestra la configuración del functoid Concatenado de cadenas.
Una vez concatenados los tres parámetros de entrada, formará la consulta necesaria para enviarla a Salesforce.
Conecte el functoid Concatenación de cadenas al elemento Query en el esquema de destino, como se muestra en la siguiente captura de pantalla.
Guardar cambios realizados en la asignación.
Crear un esquema para recibir el mensaje de respuesta a la consulta
En esta sección, crearemos el esquema para recibir el mensaje de Salesforce en respuesta a la consulta. Crearemos manualmente el esquema para la respuesta a la consulta.
Para crear un esquema para recibir la respuesta a la consulta
Agregue un nuevo esquema al proyecto de BizTalk Server y asígnele
QueryResult.xsd
el nombre .El objeto QueryResult de Salesforce representa la respuesta de consulta recibida de Salesforce. Por tanto, compilaremos un esquema para representar lo siguiente:
<?xml version="1.0" encoding="utf-16" ?> - <xs:schema xmlns="http://BtsSalesforceIntegration.QueryResult" xmlns:b="http://schemas.microsoft.com/BizTalk/2003" targetNamespace="http://BtsSalesforceIntegration.QueryResult" xmlns:xs="http://www.w3.org/2001/XMLSchema"> - <xs:element name="QueryResult"> - <xs:complexType> - <xs:sequence> <xs:element name="done" type="xs:string" /> - <xs:sequence> - <xs:element name="records"> - <xs:complexType> - <xs:sequence> <xs:element name="Id" type="xs:string" /> <xs:element name="Amount" type="xs:string" /> <xs:element name="Name" type="xs:string" /> - <xs:sequence> - <xs:element name="OpportunityLineItems"> - <xs:complexType> - <xs:sequence> <xs:element name="done" type="xs:string" /> - <xs:sequence minOccurs="1" maxOccurs="unbounded"> - <xs:element name="records"> - <xs:complexType> - <xs:sequence> <xs:element name="Quantity" type="xs:string" /> <xs:element name="ListPrice" type="xs:string" /> - <xs:element name="PricebookEntry"> - <xs:complexType> - <xs:sequence> <xs:element name="UnitPrice" type="xs:string" /> <xs:element name="Name" type="xs:string" /> </xs:sequence> <xs:attribute name="type" type="xs:string" /> <xs:attribute name="url" type="xs:string" /> </xs:complexType> </xs:element> </xs:sequence> <xs:attribute name="type" type="xs:string" /> <xs:attribute name="url" type="xs:string" /> </xs:complexType> </xs:element> </xs:sequence> <xs:element name="totalSize" type="xs:string" /> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:sequence> <xs:attribute name="type" type="xs:string" /> <xs:attribute name="url" type="xs:string" /> </xs:complexType> </xs:element> </xs:sequence> <xs:element name="totalSize" type="xs:string" /> </xs:sequence> </xs:complexType> </xs:element> </xs:schema>
La estructura del esquema debe ser como esta:
Guarde los cambios del esquema.
Crear variables de mensaje para los esquemas QueryRequest y QueryResult
Una vez creados los esquemas QueryRequest y QueryResult, debe crear dos variables de mensaje en la orquestación para representar los dos tipos de mensaje.
Procedimiento para crear variables de mensaje
Abra la orquestación NotificationService.odx y, en la vista de orquestación, agregue dos nuevos mensajes. Establezca los nombres de mensaje como
QueryRequestMsg
yQueryResultMsg
.Establezca el tipo de mensaje para QueryRequestMsg como BtsSalesforceIntegration.QueryRequest.
Establezca el tipo de mensaje para QueryResultMsg como BtsSalesforceIntegration.QueryResult.
Guarde los cambios de la orquestación.
Actualizar la orquestación para enviar el mensaje a Salesforce y recibir una respuesta
En el tema Step 3a: Receive Salesforce Opportunity Notification into BizTalk Server, creamos la orquestación que recibe notificaciones de oportunidades de Salesforce y envía una confirmación. En este paso, ampliaremos esta orquestación para enviar una solicitud de consulta a Salesforce con el fin de obtener detalles de los productos relacionados con la oportunidad y recibir una respuesta. Ya hemos creado los esquemas (QueryRequest.xsd y QueryResult.xsd) y las variables de mensaje (QueryRequestMsg y QueryResultMsg) que usaremos en este paso.
Para enviar una solicitud de consulta a Salesforce y recibir una respuesta
Agregue una forma Construir mensaje después de la forma SendNotificationAck . Establezca el nombre de la forma
ConstructQuery
en y establezca la propiedad Messages Con construido en QueryRequestMsg.Dentro de la forma ConstructQuery , agregue una forma Transform . Haga doble clic en la forma Transformar para abrir el cuadro de diálogo Configuración de Transformación. En el cuadro de diálogo, seleccione la opción Mapa existente y, a continuación, en la lista desplegable, seleccione BtsSalesforceIntegration.Notification_QueryRequest. Establezca Origen en NotificaitonMessage, Destino en QueryRequestMsg y, a continuación, haga clic en Aceptar.
Dentro de la forma ConstructQuery , después de la forma Transformar, agregue una forma de asignación de mensajes. Haga doble clic en la forma Asignación de mensajes y agregue la siguiente expresión:
QueryRequestMsg(BtsSalesforceIntegration.PropertySchema.Query) = QueryRequestMsg.Query;
Al hacerlo, pasamos el valor del elemento Query en el esquema QueryRequestMsg al elemento promocionado Query en el esquema de propiedades. Para la configuración del puerto WCF-WebHttp, usaremos este elemento para pasar de forma dinámica el valor de la consulta al mensaje de solicitud.
Después de la forma ConstructQuery , agregue una forma Send. Asigne un nombre a la forma
SendQueryRequest
y establezca el tipo de mensaje como QueryRequestMsg.Después de la forma Enviar, agregue una forma Receive y asígnele
ReceiveQueryResult
el nombre . Establezca el tipo de mensaje de la forma en QueryResultMsg.Agregue un puerto para enviar solicitudes de consulta a Salesforce y recibir el resultado de las consultas en respuesta. En el Asistente para configuración de puertos, seleccione las siguientes opciones:
Especifique el nombre del puerto como
SalesforceRESTInterface
.Seleccione la opción Crear un nuevo tipo de puerto.
Establezca Patrón de comunicación en Solicitud-respuesta.
Establezca Dirección del puerto de la comunicación en Enviaré una solicitud y recibiré una respuesta y establecerá Enlace de puerto en Especificar más adelante.
Conecte la operación request del puerto a la forma Send (SendQueryRequest) y la operación Response del puerto a la forma Receive (ReceiveQueryResult). La siguiente captura de pantalla muestra la parte de la orquestación que representa el proceso de envío de la solicitud de consulta a Salesforce y la recepción de una respuesta.
En este tema, hemos actualizado la orquestación para enviar una solicitud de consulta a Salesforce y recibir más detalles (como productos, cantidad, etc.) de la oportunidad que se creó en Salesforce. En los temas siguientes, actualizaremos esta solución para incluir la respuesta de Salesforce en una base de datos de SQL Server local.
Consulte también
Paso 3: Crear la solución de BizTalk Server en Visual Studio