Exercice : utiliser le code personnalisé

Effectué

Dans ce labo, vous allez ajouter une nouvelle opération à un connecteur personnalisé existant. Ensuite, vous utiliserez un code personnalisé pour implémenter l’opération et transformer la réponse.

Vous allez modifier le connecteur personnalisé Contoso Invoicing qui a une opération ListInvoice mais n’a pas d’opération LastInvoice. Par conséquent, vous allez ajouter l’opération LastInvoice pour récupérer la facture la plus récente qui a été créée. L’API réseau pour Contoso Invoicing ne prend pas en charge cette opération, vous utilisez donc le code personnalisé qui s’exécute sur l’opération LastInvoice pour rediriger la demande vers ListInvoice sur l’API, puis transformer la réponse afin de ne renvoyer que la dernière facture créée.

Important

Utilisez un environnement de test avec Microsoft Dataverse configuré. Si vous n’en avez pas déjà un, accédez à l’offre Développeur Microsoft Power Apps pour vous inscrire à l’offre Développeur.

Tâche : préparer votre environnement

Dans cette tâche, vous allez importer une solution dans votre environnement.

  1. Accédez à Microsoft Power Automate et vérifiez que vous vous trouvez dans l’environnement approprié.

  2. Sélectionnez Données > Connecteurs personnalisés dans le volet de navigation de gauche.

  3. Vérifiez que vous disposez déjà du connecteur personnalisé Contoso Invoicing dans votre environnement.

    Capture d’écran montrant le connecteur personnalisé.

  4. Si vous disposez déjà du connecteur personnalisé Contoso Invoicing dans votre environnement, passez à la tâche suivante de cet exercice. Si vous ne disposez pas du connecteur personnalisé, passez à l’étape 5.

  5. Cliquez sur Solutions > Importer.

  6. Cliquez sur Parcourir.

  7. Sélectionnez la solution ContosoInvoicingExtensions_1_0_0_0.zip qui se trouve dans le dossier des ressources, puis cliquez sur Ouvrir.

  8. Cliquez sur Suivant.

  9. Cliquez sur Importer, puis attendez la fin du processus d’importation. Une fois l’importation terminée, un message devrait vous indiquer que vous avez réussi.

  10. Cliquez sur Publier toutes les personnalisations et attendez la fin de la publication. Ne quittez pas cette page.

Tâche : créer l’opération LastInvoice

Dans cette tâche, vous allez créer une nouvelle opération dans le connecteur personnalisé Contoso Invoicing.

  1. Sélectionnez la solution Contoso Invoicing - Extensions que vous avez importée. Le composant connecteur personnalisé Contoso Invoicing - Extensions doit s’afficher.

  2. Sélectionnez le connecteur Contoso Invoicing - Extensions, puis cliquez sur Modifier. Le nom de votre connecteur ne contient peut-être pas le mot Extensions, si vous l’avez créé à partir d’un autre exercice, mais ce n’est pas un problème.

    Capture d’écran du bouton Modifier la solution.

  3. Cliquez sur l’onglet Définition, puis sélectionnez + Nouvelle action.

    Capture d’écran illustrant le bouton + Nouvelle action permettant de créer une action.

  4. Accédez à la section Demande et cliquez sur + Importer à partir de l’échantillon.

    Capture d’écran montrant le bouton Importer à partir de l’exemple.

  5. Dans la section Verbe, sélectionnez Get, coller https://contosoinvoicingtest.azurewebsites.net/GetLastInvoice dans la zone URL, puis sélectionnez Importer.

    Capture d’écran montrant la boîte de dialogue Demande Importer à partir de l’échantillon.

  6. Faites défiler vers le bas jusqu’à la section Réponse et sélectionnez + Ajouter une réponse par défaut.

    Capture d’écran illustrant le bouton Ajouter une réponse par défaut.

  7. Collez le code JSON suivant dans le champ Corps, puis cliquez sur Importer.

    {
      "invoiceId": "1934",
      "date": "2023-03-19T06:55:45.9039452+00:00",
      "createDate": "2023-03-14T06:55:45.9039456Z",
      "amount": 8000,
      "accountId": "1001",
      "accountName": "Wing Tips",
      "status": "Invoiced",
      "typeId": 1,
      "purchaseOrderId": "3004",
      "tags": "New Account;Special Pricing;Non-returnable"
    }
    
  8. Sélectionnez l’onglet Test, cliquez sur Mettre à jour le connecteur, puis attendez la fin de la mise à jour du connecteur.

    Capture d’écran montrant le bouton Mettre à jour le connecteur.

  9. Ouvrez une nouvelle fenêtre ou un nouvel onglet de navigateur, puis accédez à Contoso Invoicing.

  10. Cliquez sur le lien Clé API.

  11. Copiez la clé API.

  12. Enregistrez cette clé sur un bloc-notes.

  13. Revenez au connecteur, sélectionnez l’onglet Test, puis cliquez sur + Nouvelle connexion.

    Capture d’écran du bouton d’ajout d’une connexion.

  14. Collez la clé que vous avez copiée dans le champ Clé API, puis cliquez sur Créer une connexion.

  15. Sélectionnez Actualiser les connexions.

  16. Faites défiler vers le bas jusqu’à la section Opérations, sélectionnez GetLastInvoice, puis cliquez sur Opération de test.

    Capture d’écran du bouton Opération de test.

    Vous devriez obtenir une erreur 404, car l’API n’a pas d’opération GetLastInvoice.

    Capture d’écran montrant l’opération qui a échoué.

    Ne quittez pas cette page.

Tâche : ajouter un code au connecteur

Dans cette tâche, vous allez ajouter le code qui exécute l’opération GetLastInvoice.

  1. Sélectionnez l’onglet Code, puis activez le bouton bascule Code activé.

    Capture d’écran illustrant le bouton bascule Code activé.

  2. Sélectionnez le menu déroulant Opérations, puis l’opération GetLastInvoice.

    Capture d’écran montrant l’opération sélectionnée.

  3. Collez le code suivant dans le champ Code, puis cliquez sur l’onglet Test.

    public class Script : ScriptBase
    {
        public override async Task<HttpResponseMessage> ExecuteAsync()
        {
            // Check if the operation ID matches what is specified in the OpenAPI definition of the connector
            if (String.Equals(this.Context.OperationId, "GetLastInvoice", StringComparison.OrdinalIgnoreCase))
            {
                this.Context.Request.RequestUri = ReplaceUri(this.Context.Request.RequestUri, "GetLastInvoice", "ListInvoices");
                return await this.HandleGetLastInvoiceOperation().ConfigureAwait(false);
            }
            else
            {
                //pass-thru any other operation to the API directly
                return await this.HandleForwardOperation().ConfigureAwait(false);
            }
        }
        private Uri ReplaceUri(Uri original, string fromValue, string toValue)
        {
            try
            {
                var builder = new UriBuilder(original.ToString().Replace(fromValue, toValue));
                return builder.Uri;
            }
            catch (Exception ex)
            {
                throw new Exception(original.ToString().Replace(fromValue, toValue));
            }
        }
        private async Task<HttpResponseMessage> HandleGetLastInvoiceOperation()
        {
            JObject newResult = null;
            // Use the context to send an HTTP request
            HttpResponseMessage response = await this.Context.SendAsync(this.Context.Request, this.CancellationToken).ConfigureAwait(continueOnCapturedContext: false);
            // Do the transformation if the response was successful, otherwise return error responses as-is
            if (response.IsSuccessStatusCode)
            {
                if (response.StatusCode == HttpStatusCode.OK)
                {
                    var responseString = await response.Content.ReadAsStringAsync().ConfigureAwait(continueOnCapturedContext: false);
                    var result = JObject.Parse(responseString);
                    // Wrap the original JSON object into a new JSON object with just two properties
                    if (result != null && result.ContainsKey("invoices") && result["invoices"].HasValues)
                    {
                        var sortedArray = result["invoices"].OrderBy(jo => (DateTime)jo["date"]).ToArray();
                        var lastInvoice = sortedArray[0];
                        newResult = new JObject
                        {
                            ["invoiceid"]   = lastInvoice["invoiceid"],
                            ["date"]        = lastInvoice["date"],
                            ["createDate"]  = lastInvoice["createDate"],
                            ["amount"]      = lastInvoice["amount"],
                            ["accountId"]   = lastInvoice["accountId"],
                            ["accountName"] = lastInvoice["accountName"],
                            ["status"]      = lastInvoice["status"],
                            ["typeId"]      = lastInvoice["typeId"],
                            ["purchaseOrderId"] = lastInvoice["purchaseOrderId"],
                            ["tags"]        = lastInvoice["tags"]
    
                        };
                    }
                    else
                    {
                        newResult = new JObject
                        {
                            ["invoiceid"] = "-9999",
                            ["status"] = "No Invoices",
                        };
                    }
                }
                else
                {
                    newResult = new JObject
                        {
                            ["invoiceid"] = "-9999",
                            ["status"] = "Error retrieving invoices",
                        };
                }
                response.Content = CreateJsonContent(newResult.ToString());
                response.StatusCode = HttpStatusCode.OK;
            }
            return response;
        }
        private async Task<HttpResponseMessage> HandleForwardOperation()
        {
            // Use the context to forward/send an HTTP request
            HttpResponseMessage response = await this.Context.SendAsync(this.Context.Request, this.CancellationToken).ConfigureAwait(continueOnCapturedContext: false);
            return response;
        }
    }
    

    Capture d’écran illustrant le code et l’onglet test.

  4. Examinez le code. Le code doit contenir la logique suivante :

    • Vérifie s’il s’agit de l’opération GetLastInvoice et, si ce n’est pas le cas, transmet la demande non modifiée à l’API réseau

    • Modifie la demande pour utiliser l’opération ListInvoice sur l’API réseau

    • Appelle l’API réseau à l’aide de SendAsync

    • Transforme la réponse pour n’inclure qu’un seul objet Invoice qui correspond à la dernière facture créée

  5. Sélectionnez l’onglet Test, cliquez sur Mettre à jour le connecteur, puis attendez la fin de la mise à jour du connecteur.

  6. Faites défiler vers le bas jusqu’à la section Opérations, sélectionnez GetLastInvoice, puis cliquez sur Opération de test.

    Capture d’écran de l’action Opération de test.

Vous recevrez une réponse montrant la dernière facture.

Capture d’écran montrant la réponse de l’opération.