Freigeben über


Tutorial: Aufrufen von User Data Functions in einer Python-Konsolenanwendung

Um Fabric User-Datenfunktionselemente aus einer Konsolenanwendung in Python aufzurufen, können Sie HTTP-Anforderungen an den Funktionsendpunkt senden, der ausgeführt werden muss. In diesem Schnellstart erfahren Sie, wie Sie eine Python-App mit Visual Studio Code einrichten.

Voraussetzungen

Erstellen einer Microsoft Entra-App

In den folgenden Schritten wird erläutert, wie Die Unterstützung für eine ReactJS-Anwendung in Microsoft Entra konfiguriert wird.

  1. Registrieren Sie eine Anwendung mithilfe der schritte, die unter Schnellstart beschrieben werden: Registrieren Sie eine Anwendung bei der Microsoft Identity Platform.

  2. Die Werte der Microsoft Entra Anwendungs-ID (Client) und der Verzeichnis-ID (Mandant) werden im Feld "Zusammenfassung" angezeigt. Notieren Sie diese Werte, da sie später erforderlich sind.

  3. Wählen Sie in der Liste Verwalten die Option API-Berechtigungen und dann Berechtigung hinzufügen aus.

  4. Fügen Sie den PowerBI-Dienst hinzu, wählen Sie delegierte Berechtigungen und dann UserDataFunction.Execute.All oder Element aus. Execute.All permissions. Bestätigen Sie, dass die Administratorzustimmung nicht erforderlich ist.

  5. Wechseln Sie zurück zur Einstellung "Verwalten", und wählen Sie "Authentifizierung>hinzufügen" aus>.

  6. Fügen Sie für lokale Entwicklungszwecke http://localhost:3000 unter Umleitungs-URIs hinzu, und bestätigen Sie, dass die Anwendung für den Autorisierungscodeflow mit PKCE (Proof Key for Code Exchange, Prüfschlüssel für den Codeaustausch) aktiviert ist. Wählen Sie die Schaltfläche Konfigurieren aus, um Ihre Änderungen zu speichern. Wenn bei der Anwendung ein Fehler im Zusammenhang mit ursprungsübergreifenden Anforderungen auftritt, fügen Sie die Plattform für Mobile- und Desktopanwendungen im vorherigen Schritt mit demselben Umleitungs-URI hinzu.

  7. Scrollen Sie unter Authentifizierung nach unten zu Erweiterte Einstellungen, und wählen Sie unter Öffentliche Clientflows zulassen die Option Ja für Folgende Mobilgerät- und Desktopflows aktivieren aus.

Erstellen einer Konsolenanwendung

  1. Die Funktion muss öffentlich zugänglich sein. Zeigen Sie im Functions-Explorer auf den Namen der Funktion, und wählen Sie das angezeigte Auslassungszeichen (…) aus, und wählen Sie dann Eigenschaften aus. Aktivieren Sie im daraufhin angezeigten Eigenschaftenbereich die Option Öffentlicher Zugriff aus. Sie sollten sich auch die öffentliche URL notieren, die Sie in Ihrer Python-Anwendung verwenden möchten.

  2. Erstellen Sie einen neuen Ordner für Ihre Python-Anwendung, z. B. my-data-app. Öffnen Sie den Ordner in Visual Studio Code.

  3. Richten Sie die virtuelle Python-Umgebung in Visual Studio Code ein. Um lokale Umgebungen in Visual Studio Code zu erstellen, öffnen Sie die Befehlspalette mit STRG+UMSCHALT+P, und suchen Sie dann nach dem Befehl "Python: Umgebung erstellen", und wählen Sie den Befehl "Python: Umgebung erstellen" aus.

    • Der Befehl enthält eine Liste der Umgebungstypen und wählt venv aus.
    • Wählen Sie die Python-Interpreterversion Python 3.11 aus.
  4. Führen Sie den folgenden Befehl aus, um die virtuelle Umgebung im Visual Studio Code-Terminal zu aktivieren.

    venv\Scripts\activate.bat
    
  5. Führen Sie als Nächstes den Befehl aus, um die für dieses Beispiel erforderlichen Python-Bibliotheken zu installieren.

    pip install azure-identity, requests 
    
  6. Erstellen Sie eine app.py-Datei und verwenden Sie den Code, um das User Data Functions-Element aufzurufen.

    from azure.identity import InteractiveBrowserCredential
    import requests
    import json
    
    # Acquire a token
    # DO NOT USE IN PRODUCTION.
    # Below code to acquire token is to test the User data function endpoint and is for the purpose of development only.
    # For production, always register an application in a Microsoft Entra ID tenant and use the appropriate client_id and scopes.
    
    
    app = InteractiveBrowserCredential()
    scp = 'https://analysis.windows.net/powerbi/api/user_impersonation'
    result = app.get_token(scp)
    
    if not result.token:
        print('Error:', "Could not get access token")
    
    # Prepare headers
    headers = {
        'Authorization': f'Bearer {result.token}',
        'Content-Type': 'application/json'
    }
    
    FUNCTION_URL = '<REPLACE WITH USER DATA FUNCTION URL>'
    
    # Prepare the request data
    data = '{"name": "John"}' # JSON payload to send to the Azure Function
    headers = {
        #  "Authorization": f"Bearer {access_token}",
        "Content-Type": "application/json"
            }
    
    try:   
        # Call the user data function public URL 
        response = requests.post(FUNCTION_URL, json=data, headers=headers)
        response.raise_for_status()
        print(json.dumps(response.json()))
    except Exception as e:
        print({"error": str(e)}, 500)
    
    if __name__ == "__main__":
        app.run(debug=True)
    
    

    Hinweis

    Das Beispiel dient nur zu Entwicklungszwecken. Aktualisieren Sie die Anwendung, um die Microsoft Entra ID-Authentifizierung zu verwenden, bevor Sie die Anwendung für einen Produktionsanwendungsfall verwenden.

Aufrufen einer Funktion über eine externe Anwendung

Funktionen können durch Ausgeben eines REST-Aufrufs an die Endpunkt-URL aufgerufen werden. Wählen Sie die Funktion, die Sie aufrufen möchten, im Functions-Explorer aus und wählen Sie Funktions-URL kopieren aus. Sie können die Möglichkeit, diese URL extern zu verwenden, auch über das Menü Eigenschaften aktivieren oder deaktivieren.

Screenshot: lokales Debuggen mit Haltepunkten.

Verwenden Sie dann diese URL in Ihrer Anwendung, um die Funktion aufzurufen. Siehe Aufrufen von User Data Functions über eine Anwendung

Ausgabeschema

Beim Aufrufen eines User Data Functions-Elements in einer externen Anwendung hat das Ausgabeschema das folgende Format:

{
  "functionName": "hello_fabric",
  "invocationId": "1234567890", 
  "status": "Succeeded | BadRequest | Failed | Timeout | ResponseTooLarge",
  "output": /*shows the result of the function dependeing on the output type*/,
  "errors": [
     {
       "name": "Error name",
       "message": "Error message",
       "properties": {
          /*Key value pairs custom to error*/
       }
     },
  ]
}

Die folgenden Eigenschaften werden zurückgegeben:

  • functionName: Der Name der ausgeführten Funktion.
  • invocationId: Die Aufruf-ID für die Ausführung einer Funktion.
  • status: Das Ergebnis der Ausführung und der unterstützten Werte der Funktion sind Succeeded, , BadRequest, FailedTimeout und ResponseTooLarge.
  • output: Der von der Funktion zurückgegebene Ausgabewert.
  • errors: Wenn Fehler erfasst wurden, wird eine Liste mit jedem Fehler mit Namen, Fehlermeldung und Fehlereigenschaften zurückgegeben.

Antwortcodes

Die Funktion gibt die folgenden HTTP-Codes als Ergebnis der Ausführung zurück.

Antwortcode Meldung Beschreibung
200 Success Die Anfrage war erfolgreich.
400 Ungültige Anforderung Die Anforderung war ungültig. Diese Antwort kann auf fehlende oder falsche Eingabeparameterwerte, Datentypen oder Namen zurückzuführen sein. Diese Antwort könnte auch dadurch verursacht werden, dass der öffentliche Zugriff für eine Funktion deaktiviert wird.
403 Verboten Die Antwort war zu groß, und der Aufruf ist fehlgeschlagen.
408 Anforderungstimeout Die Anforderung ist fehlgeschlagen, da die Ausführung länger als 200 Sekunden gedauert hat.
409 Konflikt Die Anforderung konnte aufgrund eines konfliktierenden Zustands nicht abgeschlossen werden. Dies kann durch eine nicht behandelte Ausnahme oder einen Fehler mit Benutzeranmeldeinformationen verursacht werden.
422 Ungültige Anforderung Fehler bei der Anforderung aufgrund eines in der Funktion ausgelösten UserThrownError-Vorgangs.
500 Interner Serverfehler Fehler bei der Anforderung aufgrund eines internen Fehlers im Dienst.

Debuggen und Testen

Debuggen Sie die Anwendung in Visual Studio Code mithilfe des Python-Debuggers. Fügen Sie bei Bedarf Haltepunkte hinzu, um Probleme zu beheben. Weitere Informationen

Nächste Schritte