Type de données d’objet sans type

Objet sans type est un type de données dans Power Fx qui peut contenir n’importe quelle structure de données, complexe ou simple. Il ne peut pas être utilisé directement et nécessite une conversion explicite en un type de données. Les champs dans les enregistrements d’un objet sans type sont accessibles à l’aide de la notation par points, et l’existence des champs n’est vérifiée qu’au moment de l’exécution.

Objet sans type est le type de retour de fournisseurs spécifiques sans type. Actuellement, seule la fonction ParseJSON() renvoie objet sans type.

Types simples

La valeur d’une variable de type objet sans type ne peut pas être utilisée directement. Vous devez toujours le saisir correctement en utilisant le constructeur de type correspondant.

Les exemples suivants convertissent la valeur d’une variable d’objet sans type nommée UOValue.

Text(UOValue)
Value(UOValue)

La table suivante répertorie les types de données et les fonctions correspondantes pour convertir objet sans type à ce type de données.

Type de données Function Description
Entier Boolean() Lors de la conversion d’un objet sans type en booléen, la valeur sous-jacente doit représenter une valeur booléenne ou un type qui peut être converti automatiquement (comme une chaîne « true »).
Color ColorValue() ou RGBA() Les couleurs peuvent être représentées dans une notation de définition de couleur de la feuille de style en cascade (CSS) sous forme de chaîne ou de composants RGBA individuels. L’objet sans type peut être converti directement depuis une chaîne de définition de couleur de feuille de style de cascade (CSS) avec la fonction ColorValue(), ou depuis la fonction numbers en couleur avec la fonction RGBA().
Devise, Nombre Value() Lors de la conversion d’un objet sans type en nombre, la valeur sous-jacente doit représenter un nombre ou un type qui peut être converti automatiquement (comme une chaîne « 123.456 »).
Date, DateHeure, Heure DateValue(), TimeValue() ou DateTimeValue() La date, l’heure et la date/heure peuvent être directement converties à partir de l’objet sans type à leur type respectif, lorsqu’elles sont représentées au format ISO 8601. Les autres formats doivent être tout d’abord convertis en texte à l’aide de la fonction Text(), puis transmis dans la fonction DateValue(), TimeValue() ou DateTimeValue() qui utilise par défaut la langue des paramètres de l’utilisateur actuel pour interpréter la date et l’heure.
GUID GUID() Un objet sans type peut être directement converti en GUID si l’objet sous-jacent représente un GUID ou s’il représente une chaîne.
Lien hypertexte, image, média Text() Ces types de données sont des types de données texte et peuvent être convertis en texte, puis utilisés dans Power Fx.
Choix, Deux options Switch() ou If() Choix et Deux options sont présentées sous forme de chaînes localisées dans Power Fx. Choix reposent sur un nombre et Deux options sur des valeurs booléennes. Il n’y a pas de conversion directe d’une fonction Boolean, Number ou String en fonction Choice ou Deux options, mais les fonctions Switch() ou If() peuvent être utilisées sur la valeur booléenne, texte ou nombre pour attribuer correctement la valeur choix ou deux options.
Enregistrer n/d Il n’y a pas de conversion directe d’un objet sans type en une structure d’enregistrement, mais des champs individuels peuvent être récupérés à partir de l’objet sans type pour créer un enregistrement.
Référence d’enregistrement n/d Les références d’enregistrement sont uniques aux sources de données et n’ont aucune représentation significative dans objets sans type.
Table Table() et ForAll() Un objet sans type peut représenter un tableau, qui peut être converti en table. Ces objets peuvent être des tableaux d’enregistrements ou des tableaux de valeurs qui sont en fait des tables à une seule colonne. ForAll() peut être utilisée pour créer une table avec des enregistrements entièrement typés. Consultez les exemples plus loin dans cet article pour plus d’informations.
Text Text() Le texte peut être directement converti. Si un objet sans type représente un nombre, vous devez convertir l’objet sans type en nombre tout d’abord en utilisant Value() avant la conversion en texte.

Types d’enregistrements

Vous pouvez accéder aux champs d’une variable représentant un enregistrement objet sans type en utilisant la notation pointée habituelle utilisée pour les enregistrements. Cependant, l’existence des champs ne sera pas vérifiée avant l’exécution. En conséquence, Intellisense n’est pas disponible. Si un champ n’existe pas ou a une valeur nulle sous-jacente, y accéder entraîne une valeur Blank().

Chaque champ de l’enregistrement est également de type objet sans type, et doit être correctement saisi. Le champ peut être un enregistrement sans type de type simple. S’il s’agit d’un enregistrement, vous pouvez enchaîner la notation par points. Si un champ de la chaîne n’existe pas, Blank() est renvoyé.

Les exemples suivants utilisent les champs d’une variable d’objet sans type nommée UORecord.

Text(UORecord.StringField)
Value(UORecord.Field.ChildField)

Au cas où un nom de champ se compose d’un nom d’identifiant invalide, par exemple lorsque les noms de champ commencent par un nombre ou contiennent des caractères invalides comme un trait d’union, vous pouvez mettre les noms de champ entre guillemets simples :

untyped.'01'
untyped.'my-field'

Tableaux

Une variable objet sans type peut contenir un tableau. Même si le tableau peut être soit un tableau d’enregistrements, soit un tableau de types simples, la conversion du tableau objet sans type en une table en utilisant la fonction Table() entraîne toujours une table à colonne unique d’objets sans type. Des fonctions telles que ForAll() et Index() ne vous obligent pas à commencer par créer une Table() et par conséquent, n’exige pas que vous utilisiez le champ Value à colonne unique,

Par exemple, pour obtenir le deuxième nombre dans un tableau d’objet sans type contenant des valeurs numériques ([1, 2, 3]), la formule suivante peut être utilisée pour récupérer la deuxième ligne du tableau et convertir la colonne unique en un nombre :

Value( Index( UOArray, 2 ) )

Si l’objet sans type était converti tout d’abord à une Table(), la deuxième ligne dans la table de la colonne unique de résultat est une colonne Value contenant l’objet sans type :

Value( Index( Table( UOArray ), 2 ).Value )

Pour un tableau d’enregistrements qui ont une colonne de texte appelée Field, la même logique s’applique. Lobjet sans type est directement accessible, ou si vous utilisez la fonction Table(), cela entraîne une table à colonne unique objet sans type.

La colonne Field est accessible directement depuis l’objet sans type renvoyé par la fonction Index().

Text( Index( UORecordArray, 2 ).Field )

Lors de l’utilisation de la fonction Table(), récupérez tout d’abord la colonne Value à colonne unique pour obtenir l’objet sans type, puis accédez à la colonne Field :

Text( Index( Table( UORecordArray ), 2 ).Value.Field )

Pour convertir un tableau d’enregistrements en une table typée, vous pouvez utiliser la fonction ForAll() et convertir chaque champ individuel.

ForAll( UORecordArray, { FirstField: Value(ThisRecord.FirstField), SecondField: Text(ThisRecord.SecondField) } )

Si l’objet sans type est converti tout d’abord en une table, à nouveau la table à colonne unique obtenue d’objet sans type exige que vous utilisiez la colonne Value pour obtenir les champs.

ForAll( Table(UORecordArray), { FirstField: Value(ThisRecord.Value.FirstField), SecondField: Text(ThisRecord.Value.SecondField) } )