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
- Die Verwendung von AsType und IsType mit nicht typisierten Objekten ist ein experimentelles Feature.
- Experimentelle Features sind nicht für den Einsatz in der Produktion gedacht und sind möglicherweise nicht vollständig. Diese Funktionen stehen vor dem offiziellen Release zur Verfügung, damit Sie früher Zugriff darauf erhalten und Feedback geben können. Weitere Informationen: Verstehen Sie experimentelle, Vorschau- und eingestellte Funktionen in Canvas-Apps
- Das in diesem Artikel beschriebene Verhalten ist nur verfügbar, wenn das experimentelle Feature Benutzerdefinierte Typen in Einstellungen > Kommende Funktionen > Experimentell aktiviert ist (standardmäßig ist es deaktiviert).
- Ihr Feedback ist wertvoll für uns. Teilen Sie uns Ihre Meinung in den Power Apps-Communityforen zu experimentellen Features mit.
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:
- 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. - 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.
- 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.
- 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.
Erstellen Sie eine leere Canvas-App für Tablets.
Wählen Sie im linken Bereich Daten>Daten hinzufügen. Und dann fügen Sie Kunden und Kontakte Tabellen hinzu.
Wählen Sie im linken Bereich + (Einfügen) >Layout>Leerer vertikaler Katalog.
Wählen Sie Mit Daten verbinden und wählen Sie dann Kontakte als Datenquelle.
Legen Sie das Layout des Katalogs auf Titel und Untertitel fest.
Öffnen Sie im Bereich Daten die Liste Title1 und wählen Sie dann Vollständiger Name aus.
Wählen Sie das Label-Steuerelement Subtitle1 aus.
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 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