Passaggio 3b: Recuperare i dettagli sull'opportunità da Salesforce usando l'adapter WCF-WebHttp
In questa sezione verrà migliorata l'orchestrazione per elaborare la notifica dell'opportunità in arrivo. Verrà inoltre estratto il nome dalla notifica il quale sarà utilizzato per creare una query di richiesta da inviare a Salesforce. Questa operazione consente di recuperare dettagli specifici sui prodotti associati all'opportunità. La risposta della query da Salesforce viene ricevuta di nuovo in BizTalk Server. A questo scopo, vengono effettuate le operazioni seguenti.
Creazione di uno schema e di variabili di messaggio per inviare un messaggio di query a Salesforce
Creazione di una mappa che utilizza i valori della notifica dell'opportunità per creare una query e recuperare i dettagli sul prodotto associati all'opportunità
Creazione di uno schema per ricevere una risposta alla query da parte di Salesforce
Creazione di variabili di messaggio per gli schemi di richiesta e risposta
Creazione di uno schema e di variabili di messaggio per inviare messaggi di query a Salesforce
Per recuperare dettagli sul prodotto da Salesforce utilizzando le informazioni rese disponibili dalla notifica dell'opportunità, è necessario eseguire una query su Salesforce. La query viene eseguita su Salesforce sotto forma di messaggio XML. Pertanto, nella procedura seguente verrà creato uno schema per il messaggio di richiesta. Nella procedura successiva, verrà eseguito il mapping dello schema di notifica dell'opportunità con questo schema per creare una query che consenta di recuperare i dettagli sul prodotto per l'opportunità.
Per creare uno schema per l'invio di una richiesta di query, effettuare le operazioni riportate di seguito.
Aggiungere un nuovo schema al progetto BizTalk Server. Assegnare all'elemento il nome
QueryRequest.xsd
.Rinominare il nodo radice in
QueryRequest
. Aggiungere un elemento campo figlio sotto il record QueryRequest e denominarloQuery
.Alzare di livello l'elemento Query nello schema in modo che sia disponibile per l'uso all'interno dell'orchestrazione. Nei passaggi successivi si utilizzerà questo elemento innalzato di livello per assegnare la stringa della query.
Fare clic con il pulsante destro del mouse sull'elemento Query , scegliere Alza di livello e quindi fare clic su Promozioni rapide. Ciò comporta la creazione di uno schema PropertySchema.xsd con un elemento Query . Annotare lo spazio dei nomi per PropertySchema. Questa operazione sarà necessaria nei passaggi successivi durante la configurazione delle porte fisiche nella console di amministrazione di BizTalk Server.
Salvare tutte le modifiche.
Mapping dello schema di notifica dell'opportunità sullo schema della query
Per recuperare i dettagli del prodotto associati all'opportunità, è necessario eseguire su Salesforce una query simile alla seguente:
SELECT Amount, Id, Name,(SELECT Quantity, ListPrice, PricebookEntry.UnitPrice, PricebookEntry.Name FROM OpportunityLineItems) FROM Opportunity Where Name = '<opportunity_name>'
Nella procedura precedente si è già creato lo schema del messaggio di query. In questa procedura si esegue il mapping dello schema di notifica dell'opportunità sullo schema di richiesta della query e si utilizzano functoid per creare la query. Questa query verrà passata come valore all'elemento Query nello schema QueryRequest.xsd .
Per eseguire il mapping della notifica dell'opportunità, effettuare le operazioni seguenti.
Aggiungere una mappa al progetto BizTalk Server. Assegnare alla mappa
Notification_QueryRequest.btm
il nome .Impostare lo schema di origine su NotificationService_soap_sforce_com_2005_09_outbound.xsd. Impostare lo schema di destinazione su QueryRequest.xsd.
Aggiungere un functoid String Concatenate alla superficie di mapping. Aprire la finestra di dialogo Configura functoid Concatenare stringhe e specificare i valori di input come indicato di seguito:
Input Valore Input[0] SELECT Amount, Id, Name,(SELECT Quantity, ListPrice, PricebookEntry.UnitPrice, PricebookEntry.Name FROM OpportunityLineItems) FROM Opportunity Where Name = ' Input[1] Collegare l'elemento Nome dello schema di origine al functoid per utilizzarne il valore come secondo input. Input[2] ' Nota: per l'ultimo valore di input, specificare solo una virgoletta di chiusura ('). Lo screenshot seguente illustra la configurazione per il functoid String Concatenate .
Quando i tre parametri di input sono concatenati, la query da inviare a Salesforce è pronta.
Collegare il functoid Concatenazione di stringhe all'elemento Query nello schema di destinazione, come illustrato nella schermata seguente.
query
Salvare le modifiche alla mappa.
Creazione di uno schema per ricevere il messaggio di risposta alla query
In questa sezione si creerà lo schema per ricevere il messaggio di risposta alla query da parte di Salesforce. Lo schema per la risposta alla query verrà creato manualmente.
Per creare uno schema di ricezione della risposta alla query, effettuare le operazioni seguenti.
Aggiungere un nuovo schema al progetto BizTalk Server e denominarlo
QueryResult.xsd
.L'oggetto Salesforce QueryResult illustra la risposta della query ricevuta da Salesforce. Pertanto, verrà creato uno schema per descrivere quanto segue:
<?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 struttura dello schema dovrebbe avere l'aspetto illustrato di seguito:
Salvare le modifiche apportate allo schema.
Creazione di variabili di messaggio per gli schemi QueryRequest e QueryResult
Una volta creati gli schemi QueryRequest e QueryResult, è necessario creare due variabili di messaggio nell'orchestrazione per rappresentare i due tipi di messaggio.
Per creare le variabili di messaggio
Aprire l'orchestrazione NotificationService.odx e nella visualizzazione orchestrazione aggiungere due nuovi messaggi. Impostare i nomi dei messaggi come
QueryRequestMsg
eQueryResultMsg
.Impostare il tipo di messaggio per QueryRequestMsg su BtsSalesforceIntegration.QueryRequest.
Impostare il tipo di messaggio per QueryResultMsg come BtsSalesforceIntegration.QueryResult.
Salvare le modifiche all'orchestrazione.
Aggiornamento dell'orchestrazione per inviare messaggi a Salesforce e ricevere una risposta
Nell'argomento Step 3a: Receive Salesforce Opportunity Notification into BizTalk Server (Passaggio 3a: Ricevere la notifica dell'opportunità di Salesforce in BizTalk Server), è stata creata l'orchestrazione che riceve notifiche di opportunità da Salesforce e invia un acknowledgement. In questo passaggio viene configurata l'orchestrazione per inviare una richiesta di query a Salesforce e ottenere così dettagli sul prodotto correlati all'opportunità e ricevere una risposta. Sono già stati creati gli schemi (QueryRequest.xsd e QueryResult.xsd) e le variabili di messaggio (QueryRequestMsg e QueryResultMsg) da utilizzare in questo passaggio.
Per inviare una richiesta di query a Salesforce e ricevere una risposta, effettuare le operazioni seguenti.
Aggiungere una forma Construct Message dopo la forma SendNotificationAck . Impostare il nome della forma su
ConstructQuery
e impostare la proprietà Messages Constructed su QueryRequestMsg.All'interno della forma ConstructQuery aggiungere una forma Transform . Fare doppio clic sulla forma Trasforma per visualizzare la finestra di dialogo Configurazione trasformazione. Nella finestra di dialogo selezionare l'opzione Mappa esistente e quindi nell'elenco a discesa selezionare BtsSalesforceIntegration.Notification_QueryRequest. Impostare Source su NotificaitonMessage, Destination su QueryRequestMsg e quindi fare clic su OK.
All'interno della forma ConstructQuery , dopo la forma Trasforma, aggiungere una forma Assegnazione messaggio. Fare doppio clic sulla forma Assegnazione messaggio e aggiungere la seguente espressione:
QueryRequestMsg(BtsSalesforceIntegration.PropertySchema.Query) = QueryRequestMsg.Query;
In questo modo, si passa il valore dell'elemento Query nello schema QueryRequestMsg all'elemento promosso Query nello schema delle proprietà. Durante la configurazione della porta WCF-WebHttp, si utilizzerà questo elemento per passare in modo dinamico il valore della query al messaggio di richiesta.
Dopo la forma ConstructQuery , aggiungere una forma Send. Denominare la forma
SendQueryRequest
e impostare il tipo di messaggio come QueryRequestMsg.Dopo la forma Invia aggiungere una forma Receive e denominarla
ReceiveQueryResult
. Impostare il tipo di messaggio della forma su QueryResultMsg.Aggiungere una porta per inviare richieste di query a Salesforce e ricevere in risposta il risultato della query. In Configurazione guidata porta selezionare le seguenti opzioni:
Specificare il nome della porta come
SalesforceRESTInterface
.Selezionare l'opzione per creare un nuovo tipo di porta.
Impostare Modello di comunicazione su Request-Response.
Impostare Direzione porta della comunicazione su Verrà inviata una richiesta e si riceverà una risposta e si imposterà l'associazione porta su Specificare in un secondo momento.
Connettere l'operazione di richiesta della porta alla forma Send (SendQueryRequest) e all'operazione Response della porta alla forma Receive (ReceiveQueryResult). Nella schermata seguente viene descritta la parte dell'orchestrazione che rappresenta il processo di invio della richiesta di query a Salesforce e di ricezione di una risposta.
In questo argomento si è aggiornata l'orchestrazione per inviare una richiesta di query a Salesforce e ricevere maggiori dettagli (ad esempio prodotti, quantità ecc.) sull'opportunità creata in Salesforce. Negli argomenti successivi si aggiornerà questa soluzione per immettere la risposta di Salesforce in un database SQL Server locale.
Vedere anche
Passaggio 3: Creare la soluzione BizTalk Server in Visual Studio