Partager via


Étape 3b : récupérer des détails d'opportunité de Salesforce via l'adaptateur WCF-WebHttp

Dans cette section, nous allons améliorer l'orchestration pour traiter la notification d'opportunité entrante, extraire le nom d'opportunité à partir de la notification et utiliser cette information pour créer une requête à la demande à envoyer à Salesforce. Cela extrait des détails spécifiques sur les produits associés à l'opportunité. La réponse à la requête de Salesforce est renvoyée dans BizTalk Server. Pour ce faire, nous allons effectuer les étapes suivantes :

  • Créer un schéma et des variables de message pour envoyer un message de requête à Salesforce.

  • Créer un mappage pour utiliser les valeurs de notification de l'opportunité pour créer une requête afin de récupérer des détails sur le produit associé à l'opportunité.

  • Créer un schéma pour recevoir une réponse à la requête de Salesforce.

  • Créer des variables de message pour les schémas associés aux requêtes et aux réponses.

Créer un schéma et des variables de message pour envoyer des messages de requête à Salesforce

Pour extraire des détails sur le produit à partir de Salesforce en utilisant les informations disponibles par le biais d'une notification d'opportunité, nous devons envoyer une requête à Salesforce. La requête est envoyée à Salesforce sous forme de message XML. Ainsi, dans la procédure suivante, nous créons un schéma pour le message de requête. Dans la procédure suivante, nous allons mapper le schéma de notification d'opportunité avec ce schéma pour construire une requête afin de récupérer des détails sur le produit de l'opportunité.

Pour créer un schéma destiné à l'envoi d'une demande de requête

  1. Ajoutez un nouveau schéma au projet BizTalk Server. Nommez-le QueryRequest.xsd.

  2. Renommez le nœud racine en QueryRequest. Ajoutez un élément de champ enfant sous l’enregistrement QueryRequest et nommez-le Query.

  3. Promouvez l’élément Query dans le schéma afin qu’il soit disponible pour une utilisation dans l’orchestration. Dans les étapes ultérieures, nous allons utiliser cet élément promu pour affecter la chaîne de requête.

    Cliquez avec le bouton droit sur l’élément Query , pointez sur Promouvoir, puis cliquez sur Promotions rapides. Cela entraîne la création d’un schéma PropertySchema.xsd avec un élément Query . Notez l'espace de noms pour PropertySchema. Vous en aurez besoin dans les étapes ultérieures lors de la configuration des ports physiques dans BizTalk Server console Administration.

  4. Enregistrez toutes les modifications.

Mapper le schéma de notification d'opportunité au schéma de requête

Pour récupérer les détails sur le produit associés à l'opportunité, nous devons envoyer à Salesforce une requête similaire à la suivante :

SELECT Amount, Id, Name,(SELECT Quantity, ListPrice, PricebookEntry.UnitPrice, PricebookEntry.Name FROM OpportunityLineItems) FROM Opportunity Where Name = '<opportunity_name>'

Dans la procédure précédente, nous avons déjà créé le schéma du message de requête. Dans cette procédure, nous mappons le schéma de notification de l'opportunité au schéma de demande de la requête et utilisons des fonctoids pour construire cette requête. Cette requête sera passée en tant que valeur à l’élément Query dans le schéma QueryRequest.xsd .

Pour mapper la notification d'opportunité

  1. Ajoutez une carte au projet BizTalk Server. Nommez la carte Notification_QueryRequest.btm.

  2. Définissez le schéma source sur NotificationService_soap_sforce_com_2005_09_outbound.xsd. Définissez le schéma de destination sur QueryRequest.xsd.

  3. Ajoutez un fonctoid de concaténation de chaîne à la surface de mappage. Ouvrez la boîte de dialogue Configurer le fonctoid de concaténation de chaîne et spécifiez les valeurs d’entrée comme suit :

    Entrée Valeur
    Input[0] SELECT Amount, Id, Name,(SELECT Quantity, ListPrice, PricebookEntry.UnitPrice, PricebookEntry.Name FROM OpportunityLineItems) FROM Opportunity Where Name = '
    Entrée[1] Connectez l'élément Name dans le schéma source au fonctoid pour utiliser la valeur de l'élément Name comme deuxième entrée.
    Entrée[2] Remarque : Pour la dernière valeur d’entrée, spécifiez uniquement un guillemet unique fermant (').

    La capture d’écran suivante montre la configuration du fonctoid String Concatenate .

    Configurer le fonctoid de concaténation

    Lorsque les trois paramètres d'entrée sont concaténés, ils forment la requête nécessaire qui doit être envoyée à Salesforce.

  4. Connectez le fonctoid Concaténation de chaînes à l'élément Query dans le schéma de destination, comme le montre la capture d'écran ci-dessous.

    Mapper la réponse de notification à l’BTS_SF_Notification_Query_Mapping de schéma requête

  5. Enregistrez les modifications apportées au mappage.

Création de schéma pour recevoir le message de réponse à la requête

Dans cette section, nous créons le schéma pour recevoir le message de réponse à la requête de Salesforce. Dans cette section, nous créons manuellement le schéma de réponse à la requête.

Pour créer un schéma afin de recevoir la réponse à la requête

  1. Ajoutez un nouveau schéma au projet BizTalk Server et nommez-le QueryResult.xsd.

  2. L’objet Salesforce QueryResult représente la réponse de requête reçue de Salesforce. Ainsi, nous allons construire un schéma pour illustrer ce qui suit :

    <?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 structure de votre schéma doit présenter l'aspect suivant :

    Schéma pour la réponse aux requêtes de Salesforce

  3. Enregistrez les modifications apportées au schéma.

Créer des variables de message pour les schémas QueryRequest et QueryResult

Après avoir créé les schémas QueryRequest et QueryResult, vous devez créer deux variables de message dans l'orchestration pour représenter les deux types de message.

Pour créer des variables de message

  1. Ouvrez l’orchestration NotificationService.odx et dans la vue d’orchestration, ajoutez deux nouveaux messages. Définissez les noms des messages comme QueryRequestMsg et QueryResultMsg.

  2. Définissez le type de message pour QueryRequestMsg sur BtsSalesforceIntegration.QueryRequest.

  3. Définissez le type de message pour QueryResultMsg sur BtsSalesforceIntegration.QueryResult.

  4. Enregistrez les modifications apportées à l'orchestration.

Mettre à jour l'orchestration pour envoyer le message à Salesforce et recevoir une réponse

Dans la rubrique Étape 3a : Recevoir la notification d’opportunité Salesforce dans BizTalk Server, nous avons créé l’orchestration qui reçoit les notifications d’opportunité de Salesforce et envoie un accusé de réception. Dans cette étape, nous nous appuyons sur cette orchestration pour envoyer une requête à la demande à Salesforce pour obtenir des détails sur le produit liés à l'opportunité et recevoir une réponse. Nous avons déjà créé des schémas (QueryRequest.xsd et QueryResult.xsd) et les variables de message (QueryRequestMsg et QueryResultMsg) que nous allons utiliser dans cette étape.

Pour envoyer une demande de requête à Salesforce et recevoir une réponse

  1. Ajoutez une forme de message de construction après la forme SendNotificationAck . Définissez le nom de la forme ConstructQuery sur et définissez la propriété Messages Constructed sur QueryRequestMsg.

  2. Dans la forme ConstructQuery , ajoutez une forme Transform . Double-cliquez sur la forme Transformer pour ouvrir la boîte de dialogue Configuration de la forme Transformer. Dans la boîte de dialogue, sélectionnez l’option Carte existante , puis, dans la liste déroulante, sélectionnez BtsSalesforceIntegration.Notification_QueryRequest. Définissez Source sur NotificaitonMessage, Destination sur QueryRequestMsg, puis cliquez sur OK.

  3. Dans la forme ConstructQuery , après la forme Transformer, ajoutez une forme Affectation de message. Double-cliquez sur la forme Assignation du message et ajoutez l'expression suivante :

    QueryRequestMsg(BtsSalesforceIntegration.PropertySchema.Query) = QueryRequestMsg.Query;
    

    Ce faisant, nous transmettons la valeur de l’élément Query dans le schéma QueryRequestMsg à l’élément promu Query dans le schéma de propriété. Lors de la configuration du port WCF-WebHttp, nous allons utiliser cet élément pour passer dynamiquement ​​la valeur de requête au message de la demande.

  4. Après la forme ConstructQuery , ajoutez une forme Send. Nommez la forme SendQueryRequest et définissez le type de message comme QueryRequestMsg.

  5. Après la forme Envoyer, ajoutez une forme de réception et nommez-la ReceiveQueryResult. Définissez le type de message de la forme sur QueryResultMsg.

  6. Ajoutez un port pour envoyer des demandes de requête à Salesforce et recevoir le résultat de la requête en réponse. Dans l'assistant Configuration du port, sélectionnez les options suivantes :

    • Spécifiez le nom du port sous la forme SalesforceRESTInterface.

    • Sélectionnez l'option pour créer un nouveau type de port.

    • Définissez Modèle de communication sur Requête-réponse.

    • Définissez Le sens de la communication du port sur J’enverrai une requête et recevra une réponse , puis définissez la liaison de port sur Spécifier ultérieurement.

      Connectez l’opération Request du port à la forme Send (SendQueryRequest) et l’opération Response du port à la forme Receive (ReceiveQueryResult). La capture d'écran ci-dessous illustre la partie de l'orchestration qui représente le processus d'envoi de la demande de requête à Salesforce et la réception d'une réponse.

      Envoyer une requête à Salesforce et recevoir des réponse

    Dans cette rubrique, nous avons mis à jour l'orchestration pour envoyer une demande de requête à Salesforce et recevoir plus de détails (comme les produits, la quantité, etc) sur l'opportunité qui est créée dans Salesforce. Dans les rubriques suivantes, nous mettrons à jour cette solution pour entrer la réponse de Salesforce dans une base de données SQL Server sur site.

Voir aussi

Étape 3 : créer la solution BizTalk Server dans Visual Studio