Exercice : utiliser le code personnalisé
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.
Accédez à Microsoft Power Automate et vérifiez que vous vous trouvez dans l’environnement approprié.
Sélectionnez Données > Connecteurs personnalisés dans le volet de navigation de gauche.
Vérifiez que vous disposez déjà du connecteur personnalisé Contoso Invoicing dans votre environnement.
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.
Cliquez sur Solutions > Importer.
Cliquez sur Parcourir.
Sélectionnez la solution ContosoInvoicingExtensions_1_0_0_0.zip qui se trouve dans le dossier des ressources, puis cliquez sur Ouvrir.
Cliquez sur Suivant.
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.
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.
Sélectionnez la solution Contoso Invoicing - Extensions que vous avez importée. Le composant connecteur personnalisé Contoso Invoicing - Extensions doit s’afficher.
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.
Cliquez sur l’onglet Définition, puis sélectionnez + Nouvelle action.
Accédez à la section Demande et cliquez sur + Importer à partir de l’échantillon.
Dans la section Verbe, sélectionnez Get, coller
https://contosoinvoicingtest.azurewebsites.net/GetLastInvoice
dans la zone URL, puis sélectionnez Importer.Faites défiler vers le bas jusqu’à la section Réponse et sélectionnez + Ajouter une réponse par défaut.
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" }
Sélectionnez l’onglet Test, cliquez sur Mettre à jour le connecteur, puis attendez la fin de la mise à jour du connecteur.
Ouvrez une nouvelle fenêtre ou un nouvel onglet de navigateur, puis accédez à Contoso Invoicing.
Cliquez sur le lien Clé API.
Copiez la clé API.
Enregistrez cette clé sur un bloc-notes.
Revenez au connecteur, sélectionnez l’onglet Test, puis cliquez sur + Nouvelle connexion.
Collez la clé que vous avez copiée dans le champ Clé API, puis cliquez sur Créer une connexion.
Sélectionnez Actualiser les connexions.
Faites défiler vers le bas jusqu’à la section Opérations, sélectionnez GetLastInvoice, puis cliquez sur Opération de test.
Vous devriez obtenir une erreur 404, car l’API n’a pas d’opération GetLastInvoice.
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.
Sélectionnez l’onglet Code, puis activez le bouton bascule Code activé.
Sélectionnez le menu déroulant Opérations, puis l’opération GetLastInvoice.
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; } }
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
Sélectionnez l’onglet Test, cliquez sur Mettre à jour le connecteur, puis attendez la fin de la mise à jour du connecteur.
Faites défiler vers le bas jusqu’à la section Opérations, sélectionnez GetLastInvoice, puis cliquez sur Opération de test.
Vous recevrez une réponse montrant la dernière facture.