Freigeben über


AsType- und IsType-Funktionen

Gilt für: Canvas-Apps Modellgesteuerte Apps Power Pages Power Platform CLI

Prüft, ob es sich bei einer Datensatzreferenz um einen bestimmten Tabellentyp handelt (IsType) und behandelt die Referenz als diesen Typ (AsType).

Anmerkung

PAC CLI pac power-fx-Befehle unterstützen IsType nicht.

Beschreibung

Die AsType- und die IsType-Funktion können verwendet werden, um Datensatzreferenzen (z. B. polymorphe Suchen in Dataverse) und nicht typisierte Objekte in typisierte Objekte zu konvertieren, die direkt verwendet werden können.

Referenzen aufzeichnen

Lesen Sie Grundlegendes zu Datensatzreferenzen und polymorphen Suchvorgängen für eine breitere Einführung und weitere Details.

Ein Nachschlagefeld bezieht sich normalerweise auf Datensätze in einer bestimmten Tabelle. Da der Tabellentyp gut etabliert ist, greifen Sie mit einer einfachen Punktnotation auf die Felder der Suche zu. Beispielsweise führt First( Kunden). Primärer Kontakt. Vollständiger Name von der Tabelle Kunden zum Primären Kontaktdatensatz in der Tabelle Kontakte und extrahiert das Feld Vollständiger Name.

Microsoft Dataverse unterstützt auch polymorphe Nachschlagefelder, die auf Datensätze aus einer Reihe von Tabellen verweisen können, wie in diesen Beispielen.

Nachschlagefeld Kann sich beziehen auf
Bes. Users oder Teams
Kunde Accounts oder Contacts
Betreff Konten, Kontakte, Wissensartikel usw.

Verwenden Sie in Canvas-App-Formeln Datensatzreferenzen, um mit polymorphen Suchen zu arbeiten. Da eine Datensatzreferenz auf verschiedene Tabellen verweisen kann, ist nicht klar, welche Felder beim Schreiben einer Formel zur Laufzeit verfügbar sind. Die Notation Record.Field ist nicht verfügbar. Diese Formeln müssen sich an die Datensätze anpassen, auf die die App beim Ausführen stößt.

Die IsType-Funktion überprüft, ob eine Datensatzreferenz auf einen bestimmten Tabellentyp verweist. Die Funktion gibt einen Booleschen Wert „TRUE“ oder „FALSE“ zurück.

Die AsType-Funktion behandelt eine Datensatzreferenz als einen bestimmten Tabellentyp, was auch als Umwandlung bezeichnet wird. Sie können das Ergebnis so verwenden, als ob es ein Datensatz der Tabelle wäre, und erneut die Notation Aufnahme.Feld verwenden, um auf alle Felder dieses Datensatzes zuzugreifen. Ein Fehler tritt auf, wenn die Referenz nicht vom spezifischen Typ ist.

Verwenden Sie diese Funktionen zusammen, um zuerst den Tabellentyp eines Datensatzes zu testen und ihn dann als Datensatz dieses Typs zu behandeln, damit die Felder verfügbar sind:

If( IsType( First( Accounts ).Owner, Users ),
    AsType( First( Accounts ).Owner, Users ).'Full Name',
    AsType( First( Accounts ).Owner, Teams ).'Team Name'
)

Diese Funktionen werden nur dann benötigt, wenn Sie auf die Felder einer Datensatzreferenz zugreifen. Beispielsweise können Sie Datensatzreferenzen in der Filter-Funktion ohne IsType oder AsType verwenden:

Filter( Accounts, Owner = First( Users ) )

Ebenso können Sie Datensatzreferenzen mit der Patch-Funktion verwenden:

Patch( Accounts, First( Accounts ), { Owner: First( Teams ) } )

Werden sie in einem Datensatzkontext verwendet, z. B. innerhalb eines Steuerelements Katalog oder Formular bearbeiten muss möglicherweise die globale Mehrdeutigkeitsverwendung genutzt werden, um auf den Tabellentyp verweisen. Diese Formel ist beispielsweise für einn Katalog wirksam, in dem eine Liste der Kontakte angezeigt wird, bei denen Name des Unternehmens eine Kunde-Suche ist:

If( IsType( ThisItem.'Company Name', Accounts ),
    AsType( ThisItem.'Company Name', Accounts ).'Account Name',
    AsType( ThisItem.'Company Name', Contacts ).'Full Name'
)

Geben Sie für beide Funktionen den Typ über den Namen des Datenquelle an, der mit der Tabelle verbunden ist. Damit die Formel funktioniert, müssen Sie der App auch ein Datenquelle für alle Typen hinzufügen, die Sie testen oder umwandeln möchten. Sie müssen beispielsweise die Tabelle Benutzer als Datenquelle hinzufügen, wenn Sie IsType und AsType mit einer Besitzer-Suche und Datensätzen aus dieser Tabelle verwenden möchten. Sie können nur die Datenquellen hinzufügen, die Sie tatsächlich in Ihrer App verwenden. Sie müssen nicht alle Tabellen hinzufügen, auf die eine Suche verweisen könnte.

Wenn die Datensatzreferenz leer ist, gibt IsType „FALSE“ zurück und AsType gibt leer zurück. Alle Felder eines leeren Datensatzes sind ebenfalls leer.

Nicht typisierte Objekte

Wichtig

Ein nicht typisiertes Objekt aus einer Web-API oder der [ParseJSON-Funktion] muss in ein typisiertes Objekt konvertiert werden, bevor es in Power Fx verwendet werden kann. Folgende Optionen stehen Ihnen hierfür zur Verfügung:

  1. Typisieren Sie das Feld implizit an der Stelle, an der es verwendet wird. Beispielsweise wird ein Objekt in eine Zahl konvertiert, wenn es mit dem +-Operator verwendet wird, wenn es in eine Zahl konvertiert werden kann. Diese Option kann unerwartete Konvertierungen zur Folge haben und kann Datensätze und Tabellen nicht als Ganzes konvertieren.
  2. Typisieren Sie explizit jedes Feld einzeln mit Dezimal, Text, DateTime, GUID und anderen Typkonstruktorfunktionen. Dies ist der invasivste Eingriff in Ihre Formeln, da jedes Feld separat gehandhabt werden muss.
  3. Geben Sie JSON explizit mit dem zweiten Argument der ParseJSON-Funktion ein. Dies ist eine einfache Option, bei der das nicht typisierte Objekt nicht benötigt wird.
  4. Typisieren Sie ein nicht typisiertes Objekt explizit mithilfe der AsType-Funktion. Sie können den Typ auch testen, bevor Sie die Konvertierung mit der IsType-Funktion durchführen.

Syntax

AsType( DatensatzReferenz, Tabellentyp )

  • RecordReference: erforderlich. Eine Datensatzreferenz, oft ein Nachschlagefeld, das auf einen Datensatz in einer von mehreren Tabellen verweisen kann.
  • Tabellentyp – Erforderlich. Die spezifische Tabelle, in die der Datensatz umgewandelt werden soll.

AsType( UntypedObject, TypeSpecification )

  • UntypedObject: erforderlich. Eine Datensatzreferenz, oft ein Nachschlagefeld, das auf einen Datensatz in einer von mehreren Tabellen verweisen kann.
  • TypeSpecification: erforderlich. Ein Typname oder eine Typspezifikation, die mit der Type-Funktion definiert wird.

IsType( RecordReference, TableType )

  • RecordReference: erforderlich. Eine Datensatzreferenz, oft ein Nachschlagefeld, das auf einen Datensatz in einer von mehreren Tabellen verweisen kann.
  • Tabellentyp – Erforderlich. Die spezifische Tabelle, für die getestet werden soll.

IsType( UntypedObject, TypeSpecification )

  • UntypedObject: erforderlich. Eine Datensatzreferenz, oft ein Nachschlagefeld, das auf einen Datensatz in einer von mehreren Tabellen verweisen kann.
  • TypeSpecification: erforderlich. Ein Typname oder eine Typspezifikation, die mit der Type-Funktion definiert wird.

Beispiele

Referenzen aufzeichnen

Grundlegendes zu Datensatzreferenzen und polymorphen Suchvorgängen enthält umfangreiche Beispiele.

  1. Erstellen Sie eine leere Canvas-App für Tablets.

  2. Wählen Sie im linken Bereich Daten>Daten hinzufügen. Und dann fügen Sie Kunden und Kontakte Tabellen hinzu.

    Leere App mit zwei Datenquellen: Konten und Kontakte

  3. Wählen Sie im linken Bereich + (Einfügen) >Layout>Leerer vertikaler Katalog.

    Einfügen eines Gallery-Steuerelements mit Leerzeichen vertikal-Layout

  4. Wählen Sie Mit Daten verbinden und wählen Sie dann Kontakte als Datenquelle.

  5. Legen Sie das Layout des Katalogs auf Titel und Untertitel fest.

    Öffnen der Layoutauswahl im Eigenschaftenbereich

    Festlegen des Layouts auf Titel und Untertitel

  6. Öffnen Sie im Bereich Daten die Liste Title1 und wählen Sie dann Vollständiger Name aus.

    Titelwert einstellen

  7. Wählen Sie das Label-Steuerelement Subtitle1 aus.

    Untertitelwert einstellen

  8. Legen Sie die Text-Eigenschaft von Subtitle1 auf diese Formel fest:

    If( IsBlank( ThisItem.'Company Name' ), "--",
        IsType( ThisItem.'Company Name', Accounts ),
            "Account: " & AsType( ThisItem.'Company Name', Accounts ).'Account Name',
        "Contact: " & AsType( ThisItem.'Company Name', Contacts ).'Full Name'
    )
    

    Der Bildschirm ist nun vollständig und zeigt Konten und Kontakte an, die im Katalog gemischt sind

    Der Untertitel im Katalog zeigt diese Werte:

    • "--" wenn 'Name des Unternehmens'leer ist.
    • Konto und dann das Feld Kontobezeichung aus der Tabelle Konten, wenn das Feld Name der Firma sich auf ein Konto bezieht.
    • Kontakt und dann das Feld Vollständiger Name aus der Tabelle Kontakte, wenn das Feld Name der Firma sich auf einen Kontakt bezieht.

    Ihre Ergebnisse können abweichen, da die Beispieldaten möglicherweise geändert wurden, um mehr Ergebnistypen anzuzeigen.

Nicht typisierte Objekte

Die folgenden Beispiele zeigen einen einfachen JSON-Datensatz, der von ParseJSON, AsType und IsType in der Pac CLI Power Fx REPL auf unterschiedliche Weise interpretiert wird.

In diesem ersten Beispiel werden keine Typinformationen für ParseJSON bereitgestellt, sodass ein nicht typisiertes Objekt zurückgegeben wird.

>> Set( rec, ParseJSON( "{""a"":1}" ) )
rec: <Untyped: Use Value, Text, Boolean, or other functions to establish the type>

Das Feld wird implizit in eine Zahl konvertiert, wenn es in einem numerischen Kontext verwendet wird.

>> 1 + rec.a
2

Alternativ wird in diesem Beispiel der Datensatz mit dem zweiten Argument von ParseJSON explizit in einen typisierten Power Fx-Datensatz konvertiert.

>> ParseJSON( "{""a"":1}", Type( {a: Number} ) )
{a:1}

In diesem Beispiel wird der Datensatz mithilfe von AsType explizit in einen typisierten Power Fx-Datensatz konvertiert.

>> AsType( ParseJSON( "{""a"":1}" ), Type( {a: Number} ) )
{a:1}

Falls wir uns nicht sicher waren, wird in diesem Beispiel der Typ getestet, bevor er mit der IsType-Funktion konvertiert wird.

>> IsType( ParseJSON( "{""a"":1}" ), Type( {a: Number} ) )
true