Nicht typisierter Objektdatentyp
nicht typisiertes Objekt ist ein Datentyp in Power Fx , der jede beliebige Datenstruktur enthalten kann, ob komplex oder einfach. Er kann nicht direkt verwendet werden und erfordert eine explizite Konvertierung in einen Datentyp. Auf Felder in Datensätzen in einem nicht typisierten Objekt kann mit der Punktnotation zugegriffen werden, und die Existenz von Feldern wird nur zur Laufzeit überprüft.
nicht typisiertes Objekt ist der Rückgabetyp bestimmter nicht typisierter Anbieter. Derzeit gibt nur die ParseJSON()-Funktion nicht typisiertes Objekt zurück.
Einfache Typen
Der Wert einer Variablen vom Typ nicht typisiertes Objekt kann nicht direkt verwendet werden. Sie müssen ihn immer mit dem entsprechenden Typkonstruktor richtig typisieren.
Die folgenden Beispiele konvertieren den Wert einer nicht typisierten Objekt-Variable namens UOValue
.
Text(UOValue)
Value(UOValue)
Die folgende Tabelle listet die Datentypen und die entsprechenden Funktionen auf, um nicht typisiertes Objekt in diesen Datentyp zu konvertieren.
Datentyp | Function | Beschreibung des Dataflows |
---|---|---|
Boolesch | boolesch() | Beim Konvertieren eines nicht typisierten Objekts in boolesch muss der zugrunde liegende Wert einen booleschen Wert oder einen Typ darstellen, der automatisch konvertiert werden kann (z. B. eine Zeichenfolge „true“). |
Color | ColorValue() oder RGBA() | Farben können in Cascading Style Sheets (CSS)-Notation der Farbdefinition als Zeichenfolge oder als einzelne RGBA-Komponenten dargestellt werden. Das nicht typisierte Objekt kann direkt über die Cascading Style Sheet (CSS)-Farbdefinitionszeichenfolge mit der ColorValue()-Funktion konvertiert werden oder über einzelne RGBA-Zahlen in Farbe mit der RGBA()-Funktion. |
Währung, Zahl | Wert() | Beim Konvertieren eines nicht typisierten Objekts in Zahl muss der zugrunde liegende Wert eine Zahl oder einen Typ darstellen, der automatisch konvertiert werden kann (z. B. eine Zeichenfolge „123.456“). |
Datum, DateTime und Uhrzeit | DateValue(), TimeValue() oder DateTimeValue() | Datum, Uhrzeit und DateTime können direkt über nicht typisiertes Objekt in ihren jeweiligen Typ konvertiert werden, wenn sie im ISO 8601-Format dargestellt werden. Andere Formate müssen zuerst mithilfe der Text()-Funktion in Text konvertiert werden und dann in die Funktion DateValue(), TimeValue() oder DateTimeValue() übergeben werden, die standardmäßig die Sprache der aktuellen Benutzereinstellungen verwendet, um das Datum und die Uhrzeit zu interpretieren. |
GUID | GUID() | Ein nicht typisiertes Objekt kann direkt in GUID konvertiert werden, wenn das zugrunde liegende Objekt eine GUID oder eine Zeichenfolge darstellt. |
HyperLink, Bild und Medien | Text() | Diese Datentypen sind Textdatentypen und können in Text konvertiert und dann in Power Fx verwendet werden. |
Auswahl, Zwei Optionen | Switch() oder If() | Auswahlmöglichkeiten und zwei Optionen werden als lokalisierte Zeichenfolgen in Power Fx dargestellt. Auswahlmöglichkeiten werden durch eine Zahl und zwei Optionen als Boolesche Werte unterstützt. Es gibt keine direkte Konvertierung von Boolean, Zahl oder Zeichenfolge in eine Auswahl oder zwei Optionen, aber die Funktionen Switch() oder If() können auf den booleschen Wert, Text- oder Zahlenwert angewendet werden, um den Wert für Auswahl oder zwei Optionen korrekt zuzuweisen. |
Datensatz | Nicht zutreffend | Es gibt keine direkte Konvertierung von einem nicht typisierten Objekt in eine Datensatzstruktur, aber einzelne Felder können aus dem nicht typisierten Objekt abgerufen werden, um einen neuen Datensatz zu erstellen. |
Datensatzverweis | Nicht zutreffend | Datensatzverweise sind für Datenquellen eindeutig und haben keine sinnvolle Darstellung in nicht typisierten Objekten. |
Table | Table() and ForAll() | Ein nicht typisiertes Objekt kann ein Array darstellen, das in eine Tabelle umgewandelt werden kann. Diese Objekte können Arrays von Datensätzen oder Arrays von Werten sein, die effektiv einspaltige Tabellen sind. Mit ForAll() kann eine Tabelle mit vollständig typisierten Datensätzen erstellt werden. Weitere Informationen finden Sie in den Beispielen weiter unten in diesem Artikel. |
Text | Text() | Text kann direkt konvertiert werden. Wenn ein nicht typisiertes Objekt eine Zahl darstellt, müssen Sie zuerst das nicht typisierte Objekt mithilfe von Value() in eine Zahl konvertieren, bevor der Text konvertiert wird. |
Datensatztypen
Sie können auf Felder einer Variablen zugreifen, die einen nicht typisierten Objekt-Datensatz darstellen, indem Sie die reguläre Punktnotation verwenden, die für Datensätze verwendet wird. Die Existenz der Felder wird jedoch erst zur Laufzeit verifiziert. Infolgedessen ist auch kein Intellisense verfügbar. Wenn ein Feld nicht vorhanden ist oder einen zugrunde liegenden Wert Null hat, führt der Zugriff darauf zu einem Blank()-Wert.
Jedes Feld im Datensatz ist ebenfalls vom Typ nicht typisiertes Objekt und muss richtig typisiert werden. Das Feld kann ein nicht typisierter Datensatz einfachen Typs sein. Falls es sich um einen Datensatz handelt, können Sie die Punktnotation verketten. Wenn ein Feld in der Kette nicht vorhanden ist, wird Blank() zurückgegeben.
Die folgenden Beispiele verwenden Felder von einer nicht typisierten Objekt-Variable namens UORecord
.
Text(UORecord.StringField)
Value(UORecord.Field.ChildField)
Falls ein Feldname aus einem ungültigen Bezeichnernamen besteht, beispielsweise wenn der Feldname mit einer Zahl beginnt oder ungültige Zeichen wie einen Bindestrich enthält, können Sie die Feldnamen in einfache Anführungszeichen setzen:
untyped.'01'
untyped.'my-field'
Arrays
Eine nicht typisierte Objekt-Variable kann ein Array enthalten. Auch wenn das Array entweder ein Array von Datensätzen oder ein Array von einfachen Typen sein kann, führt das Konvertieren des Arrays nicht typisiertes Objekt in eine Tabelle mithilfe der Table()-Funktion immer zu einer einspaltigen Tabelle von nicht typisierten Objekten. Für Funktionen wie ForAll() und Index() müssen Sie nicht zuerst eine Tabelle() erstellen und erfordern kein einspaltiges Feld Value
.
Um z. B. die zweite Zahl in einem Array von nicht typisiertes Objekt zu erhalten, das Zahlenwerte enthält ( [1, 2, 3]
), kann die folgende Formel verwendet werden, um die zweite Zeile in der Tabelle abzurufen und die einspaltige -Spalte in eine Zahl zu konvertieren:
Value( Index( UOArray, 2 ) )
Wenn das untypisiertes Objekt zuerst in eine Tabelle() umgewandelt wird, wird die zweite Zeile in der einspaltigen Ergebnistabelle eine Value
Spalte mit dem untypisierten Objekt:
Value( Index( Table( UOArray ), 2 ).Value )
Für ein Array von Datensätzen mit einer Textspalte namens Field
, gilt die gleiche Logik. Auf das untypisierte Objekt kann direkt zugegriffen werden, oder wenn Sie die Funktion Tabelle() verwenden, ergibt sich daraus eine einspaltige Tabelle von einem untypisierten Objekt.
Die Spalte Field
kann direkt aus dem untypisierten Objekt aufgerufen werden, das von der Funktion Index() zurückgegeben wird.
Text( Index( UORecordArray, 2 ).Field )
Wenn Sie die Funktion Tabelle() zuerst verwenden, rufen Sie zuerst die einspaltige Value
Spalte ab, um das nicht typisierte Objekt zu erhalten, und greifen dann auf die Field
-Spalte zu:
Text( Index( Table( UORecordArray ), 2 ).Value.Field )
Um ein Array von Datensätzen in eine typisierte Tabelle zu konvertieren, können Sie die ForAll() Funktion verwenden und jedes einzelne Feld umwandeln.
ForAll( UORecordArray, { FirstField: Value(ThisRecord.FirstField), SecondField: Text(ThisRecord.SecondField) } )
Wenn untypisiertes Objekt zuerst in eine Tabelle umgewandelt wird, erfodert die daraus resultierende einspaltige Tabelle nicht ypisiertes Objekt, dass Sie die Spalte Value
verwenden, um die Felder zu erhalten.
ForAll( Table(UORecordArray), { FirstField: Value(ThisRecord.Value.FirstField), SecondField: Text(ThisRecord.Value.SecondField) } )