Übung – Benutzerdefinierten Code verwenden

Abgeschlossen

In dieser Übung fügen Sie einem bestehenden benutzerdefinierten Konnektor einen neuen Vorgang hinzu. Dann verwenden Sie benutzerdefinierten Code, um den Vorgang zu implementieren und die Antwort zu transformieren.

Sie ändern den benutzerdefinierten Contoso Invoicing-Konnektor, der über einen ListInvoice-Vorgang, aber keinen LastInvoice-Vorgang verfügt. Dann fügen Sie zum Abrufen der zuletzt erstellten Rechnung den Vorgang LastInvoice hinzu. Die Netzwerk-API für Contoso Invoicing unterstützt diesen Vorgang nicht. Sie verwenden daher benutzerdefinierten Code, der im Vorgang LastInvoice ausgeführt wird, um die Anforderung an ListInvoice auf der API umzuleiten und die Antwort so zu transformieren, dass nur die zuletzt erstellte Rechnung zurückgegeben wird.

Wichtig

Verwenden Sie eine Testumgebung mit bereitgestelltem Microsoft Dataverse. Wenn Sie noch nicht über eine Testumgebung verfügen, wechseln Sie zum Microsoft Power Apps-Entwicklerplan, um sich für den Entwicklerplan anzumelden.

Aufgabe: Ihre Umgebung vorbereiten

Sie importieren in dieser Aufgabe eine Lösung in Ihre Umgebung.

  1. Wechseln Sie zu Microsoft Power Automate, und stellen Sie sicher, dass Sie sich in der richtigen Umgebung befinden.

  2. Wählen Sie im linken Navigationsbereich Mehr und dann die Schaltfläche Alle entdecken aus.

  3. Wählen Sie die Option Benutzerdefinierte Konnektoren unter Daten aus. Sie müssen möglicherweise nach unten scrollen, um es zu sehen.

  4. Stellen Sie sicher, dass Sie in Ihrer Umgebung bereits über den benutzerdefinierten Konnektor Contoso Invoicing verfügen.

  5. Wenn Sie in Ihrer Umgebung bereits über den benutzerdefinierten Konnektor Contoso Invoicing verfügen, fahren Sie mit der nächsten Aufgabe in dieser Übung fort. Wenn Sie nicht über den benutzerdefinierten Konnektor verfügen, fahren Sie mit Schritt 6 fort.

  6. Wählen Sie Lösungen > Importieren aus.

  7. Wählen Sie Suchen aus.

  8. Wählen Sie die Lösungsdatei ContosoInvoicingExtensions_1_0_0_0.zip im Ressourcenordner und dann Öffnen aus.

  9. Wählen Sie Weiter aus.

  10. Wählen Sie Importieren aus, und warten Sie dann, bis der Import abgeschlossen ist. Nach Abschluss des Imports sollte eine Erfolgsmeldung angezeigt werden.

  11. Wählen Sie Alle Anpassungen veröffentlichen aus, und warten Sie dann, bis die Veröffentlichung abgeschlossen ist. Navigieren Sie nicht von dieser Seite weg.

Aufgabe: Den LastInvoice-Vorgang erstellen

In dieser Aufgabe erstellen Sie einen neuen Vorgang im benutzerdefinierten Contoso Invoicing-Konnektor.

  1. Wählen Sie die Lösung Contoso Invoicing Extensions aus, die Sie importiert haben. Die benutzerdefinierte Konnektorkomponente Contoso Invoicing ‑ Extensions sollte angezeigt werden.

  2. Wählen Sie den Konnektor Contoso Invoicing ‑ Extensions und dann Bearbeiten aus. Ihr Konnektor enthält möglicherweise keine Erweiterungen im Namen, wenn Sie ihn aus einer anderen Übung erstellt haben, was in Ordnung ist.

  3. Wählen Sie die Registerkarte Definition und dann die Aktion + Neue Aktion aus.

  4. Navigieren Sie zum Abschnitt Anforderung, und wählen Sie + Aus Beispiel importieren aus.

  5. Wählen Sie aus dem Bereich VerbGet aus, und fügen Sie https://contosoinvoicingtest.azurewebsites.net/GetLastInvoice in das Feld URL ein. Klicken Sie dann auf Importieren.

  6. Scrollen Sie nach unten zum Abschnitt Antwort, und wählen Sie + Standardantwort hinzufügen aus.

  7. Fügen Sie den folgenden JSON in das Feld Text ein, und wählen Sie dann Importieren aus.

    {
      "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. Wählen Sie die Registerkarte Testen aus, und klicken Sie dann auf Konnektor aktualisieren. Warten Sie dann darauf, dass die Aktualisierung abgeschlossen wurde.

  9. Öffnen Sie ein neues Browserfenster oder eine neue Registerkarte, und gehen Sie dann zu Contoso Invoicing.

  10. Wählen Sie den Link API-Schlüssel aus.

  11. Kopieren Sie den API-Schlüssel.

  12. Speichern Sie diesen Schlüssel im Editor.

  13. Kehren Sie zum Konnektor zurück, wählen Sie die Registerkarte Testen und dann + Neue Verbindung aus.

  14. Fügen Sie den Schlüssel ein, den Sie in das Feld API-Schlüssel kopiert haben, und wählen Sie dann Verbindung erstellen aus.

  15. Klicken Sie auf Verbindungenaktualisieren.

  16. Scrollen Sie nach unten zum Abschnitt Vorgänge, wählen Sie GetLastInvoice und dann Vorgang testen aus.

    Ihnen sollte ein 404-Fehler angezeigt werden, da die API keinen GetLastInvoice-Vorgang hat.

    Navigieren Sie nicht von dieser Seite weg.

Aufgabe: Dem Konnektor Code hinzufügen

In dieser Aufgabe fügen Sie den Code hinzu, der den GetLastInvoice-Vorgang ausführt.

  1. Wählen Sie die Registerkarte Code aus, und aktivieren Sie dann den Umschalter Code aktiviert.

  2. Wählen Sie das Dropdownmenü Vorgänge aus, und klicken Sie dann auf den Vorgang GetLastInvoice.

  3. Fügen Sie den folgenden Code in das Feld Code ein, und wählen Sie dann die Registerkarte Testen aus.

    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;
        }
    }
    
  4. Überprüfen Sie den Code. Der Code sollte folgende Logik enthalten:

    • Prüft, ob es sich um den Vorgang GetLastInvoice handelt, und leitet andernfalls die unveränderte Anfrage an die Netzwerk-API weiter

    • Verändert die Anforderung, um den Vorgang ListInvoice auf der Netzwerk-API zu verwenden

    • Ruft die Netzwerk-API mit SendAsync auf

    • Transformiert die Antwort so, dass sie nur ein einziges Invoice-Objekt enthält, die zuletzt erstellte Rechnung

  5. Wählen Sie die Registerkarte Testen aus, und klicken Sie dann auf Konnektor aktualisieren. Warten Sie dann darauf, dass die Aktualisierung abgeschlossen wurde.

  6. Scrollen Sie nach unten zum Abschnitt Vorgänge, wählen Sie GetLastInvoice und dann Vorgang testen aus.

Sie erhalten eine Antwort, die die letzte Rechnung anzeigt.