Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
| Fonction | S’applique à |
|---|---|
| AsType |
|
| IsType |
|
Vérifie si une référence d’enregistrement est un type de table spécifique (IsType) et traite la référence comme ce type (AsType).
Note
Les commandes pac CLI pac power-fx ne prennent pas en charge IsType.
Description
Les AsType fonctions et IsType les fonctions peuvent être utilisées pour convertir des références d’enregistrement (par exemple des recherches polymorphes dans Dataverse) et des valeurs dynamiques en valeurs typées qui peuvent être utilisées directement.
Références d’enregistrement
Lisez Comprendre les références d’enregistrement et les recherches polymorphes pour une introduction plus large et plus de détails.
Un champ de recherche fait généralement référence aux enregistrements d’une table particulière. Le type de table étant bien établi, accédez aux champs de la recherche en utilisant une simple notation par points. Par exemple, First( Accounts ).’Primary Contact’.’Full Name’ passe de la table Comptes à l’enregistrement contact principal dans la table Contacts et extrait le champ Nom complet.
Microsoft Dataverse prend également en charge les champs de recherche polymorphes, qui peuvent faire référence à des enregistrements d’un ensemble de tables, comme dans ces exemples.
| Champ de recherche | Peut se référer à |
|---|---|
| Propriétaire | Utilisateurs ou Équipes |
| Client | Comptes ou Contacts |
| Concernant | Comptes, Contacts, Articles de base de connaissances, etc. |
Dans les formules d’application canevas, utilisez des références d’enregistrement pour travailler avec des recherches polymorphes. Étant donné qu’une référence d’enregistrement peut faire référence à différentes tables, vous ne pouvez pas savoir quels champs sont disponibles au moment de l’exécution lorsque vous écrivez une formule. La notation Champ.Enregistrement n’est pas disponible. Ces formules doivent s’adapter aux enregistrements rencontrés par l’application lors de son exécution.
La IsType fonction vérifie si une référence d’enregistrement fait référence à un type de table spécifique. La fonction renvoie un TRUE ou FALSE booléen.
La AsType fonction traite une référence d’enregistrement comme un type de table spécifique, également appelé cast. Vous utilisez le résultat comme s’il s’agit d’un enregistrement de la table et utilisez la notation Record.Field pour accéder à tous les champs de cet enregistrement. Si la référence n’est pas du type spécifique, une erreur se produit.
Utilisez ces fonctions ensemble pour vérifier d’abord le type de table d’un enregistrement, puis le traiter comme un enregistrement de ce type afin que les champs soient disponibles :
If( IsType( First( Accounts ).Owner, Users ),
AsType( First( Accounts ).Owner, Users ).'Full Name',
AsType( First( Accounts ).Owner, Teams ).'Team Name'
)
Vous avez besoin de ces fonctions uniquement si vous accédez aux champs d’une référence d’enregistrement. Par exemple, vous utilisez des références d’enregistrement dans la fonction Filter sans IsType ou AsType:
Filter( Accounts, Owner = First( Users ) )
De même, vous pouvez utiliser des références d’enregistrement avec la fonction Patch :
Patch( Accounts, First( Accounts ), { Owner: First( Teams ) } )
Lorsque vous utilisez ces fonctions dans un contexte d’enregistrement, par exemple dans une galerie ou un contrôle de formulaire Modifier , vous devrez peut-être utiliser l’opérateur de désambiguation globale pour référencer le type de table. Par exemple, cette formule fonctionne pour une galerie qui affiche une liste de contacts où le nom de la société est une recherche client :
If( IsType( ThisItem.'Company Name', Accounts ),
AsType( ThisItem.'Company Name', Accounts ).'Account Name',
AsType( ThisItem.'Company Name', Contacts ).'Full Name'
)
Pour les deux fonctions, spécifiez le type en utilisant le nom de la source de données connectée à la table. Pour que la formule fonctionne, ajoutez une source de données à l’application pour tous les types que vous souhaitez vérifier ou caster. Par exemple, ajoutez la table Users en tant que source de données si vous souhaitez utiliser IsType et AsTypeavec une recherche propriétaire et des enregistrements de cette table. Ajoutez uniquement les sources de données que vous utilisez dans votre application ; vous n’avez pas besoin d’ajouter toutes les tables qu’une recherche peut référencer.
Si la référence d’enregistrement est vide, IsType retourne FALSE et AsType retourne vide. Tous les champs d’un enregistrement vide sont également vides.
Valeurs dynamiques
Important
- L’utilisation et IsType l’utilisation AsType de valeurs dynamiques est une fonctionnalité expérimentale.
- Les fonctionnalités expérimentales ne sont pas destinées à une utilisation en production et peuvent ne pas être complètes. Ces fonctionnalités sont disponibles avant une publication officielle afin que vous puissiez y accéder en avant-première et fournir des commentaires. En savoir plus : Comprendre les fonctionnalités expérimentales, en version préliminaire et retirées dans les applications canevas
- Le comportement décrit dans cet article n’est disponible que lorsque la fonctionnalité expérimentale Types définis par l’utilisateur dans Paramètres > Fonctionnalités à venir > Expérimental est activée (elle est désactivée par défaut).
- Vos commentaires nous sont très utiles. Donnez-nous votre avis sur le forum de la communauté des fonctionnalités expérimentales Power Apps.
Une valeur dynamique d’une API web ou de la [fonction ParseJSON ] doit être convertie en valeur typée spécifique avant de pouvoir l’utiliser dans Power Fx. Voici quelques options :
- Tapez implicitement le champ au point que vous l’utilisez. Par exemple, un objet se convertit en nombre si vous l’utilisez avec l’opérateur
+, s’il peut être converti en nombre. Cette option peut entraîner des conversions inattendues et ne peut pas convertir des enregistrements et des tables dans son ensemble. - Tapez explicitement chaque champ individuellement avec les valeurs Decimal, Text, DateTime, GUID et d’autres fonctions de constructeur de type. Cette option est la plus invasive de vos formules, car vous devez effectuer chaque champ séparément.
- Tapez explicitement JSON avec le deuxième argument de la fonction ParseJSON . Cette option est facile et évite d’avoir besoin de la valeur dynamique .
- Tapez explicitement une valeur dynamique à l’aide de la AsType fonction. Vous pouvez également vérifier le type avant d’essayer la conversion avec la IsType fonction.
Syntaxe
AsType( RecordReference, TableType )
- RecordReference - Obligatoire. Référence d’enregistrement, souvent un champ de recherche qui fait référence à un enregistrement dans l’une des tables.
- TableType – Obligatoire. Table spécifique dans laquelle convertir l’enregistrement.
AsType( DynamicValue, TypeSpecification )
- DynamicValue - Obligatoire. Valeur dynamique de la fonction ParseJSON ou de l’appel d’API.
- TypeSpecification : obligatoire. Nom de type ou spécification de type que vous définissez avec la fonction Type.
IsType( RecordReference, TableType )
- RecordReference - Obligatoire. Une référence d’enregistrement, souvent un champ de recherche qui peut faire référence à un enregistrement dans plusieurs tables.
- TableType – Obligatoire. Table spécifique à tester.
IsType( DynamicValue, TypeSpecification )
- DynamicValue - Obligatoire. Valeur dynamique de la fonction ParseJSON ou d’un appel d’API.
- TypeSpecification : obligatoire. Nom de type ou spécification de type défini avec la fonction Type.
Examples
Références d’enregistrement
Comprendre les références d’enregistrement et les recherches polymorphes contient de nombreux exemples.
Créez une application canevas vierge pour les tablettes.
Dans le volet gauche, sélectionnez Données>Ajouter des données, puis ajoutez des tables Comptes et Contacts .
Dans le volet gauche, sélectionnez + (Insérer) >Galerie>verticale vide.
Sélectionner Se connecter aux données, puis sélectionnez Contacts comme source de données.
Définissez la disposition de la galerie sur Titre et sous-titre.
Dans le volet Données, ouvrez la liste Title1, puis cliquez sur Nom complet.
Sélectionnez le contrôle d’étiquette Subtitle1.
Définissez la propriété Text de Subtitle1 sur la formule suivante :
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' )
Le sous-titre dans la galerie affiche ces valeurs :
- « -- » si Nom de la société est vide.
- « Compte : » et le champ Nom du compte de la table Comptes si le champ Nom de la société fait référence à un compte.
- « Contact : » et le champ Nom complet de la table Contacts si le champ Nom de la société fait référence à un contact.
Vos résultats peuvent différer, car les exemples de données peuvent être modifiés pour afficher davantage de types de résultats.
Valeurs dynamiques
Les exemples suivants montrent un enregistrement JSON simple interprété de différentes façons par ParseJSON, AsTypeet IsType dans pac CLI Power Fx REPL.
Dans ce premier exemple, aucune information de type n’est fournie à ParseJSON. Elle retourne donc une valeur dynamique.
>> Set( rec, ParseJSON( "{""a"":1}" ) )
rec: <Dynamic: Use Value, Text, Boolean, or other functions to establish the type>
Le champ est implicitement converti en nombre lorsqu’il est utilisé dans un contexte numérique.
>> 1 + rec.a
2
Comme alternative, cet exemple convertit explicitement l’enregistrement en enregistrement Power Fx typé avec le deuxième argument de ParseJSON.
>> ParseJSON( "{""a"":1}", Type( {a: Number} ) )
{a:1}
Et une autre alternative, cet exemple convertit explicitement l’enregistrement en enregistrement Power Fx typé à l’aide AsTypede .
>> AsType( ParseJSON( "{""a"":1}" ), Type( {a: Number} ) )
{a:1}
Enfin, si vous n’êtes pas sûr, cet exemple teste le type avant de le convertir avec la IsType fonction.
>> IsType( ParseJSON( "{""a"":1}" ), Type( {a: Number} ) )
true