Fonctions RecordOf et Type
S’applique à : Applications canevas
Construit un type défini par l’utilisateur à utiliser avec des fonctions définies par l’utilisateur et des valeurs sans type.
Important
- Ces fonctions sont expérimentales.
- Les fonctionnalités expérimentales ne sont pas destinées à une utilisation en production et ne sont peut-être pas 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
- Ce comportement 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 sont très utiles. Donnez-nous votre avis sur le forum de la communauté des fonctionnalités expérimentales Power Apps.
Description
Chaque fonction dans Power Fx définit les types de valeurs qui peuvent être transmises en tant que paramètres et le type de la sortie. Les types sont vérifiés lorsque vous écrivez une formule et les erreurs sont affichées si elles ne correspondent pas à ce qui est attendu. Les types sont également utilisés par l’éditeur pour suggérer de bonnes options sur ce qu’il faut transmettre à la fonction et détecter les erreurs le plus tôt possible.
Lors de la création de vos propres fonctions définies par l’utilisateur, vous devez spécifier les types d’entrée et de sortie. Pour les types simples comme Décimal ou Texte, cela est facile car ces types de base sont prédéfinis. Pour les types plus complexes, tels que les enregistrements ou les tables, utilisez la fonction Type pour créer le type.
La fonction Type facilite également l’utilisation des objets sans type. Avec les fonctions ParseJSON, IsType et AsType, un objet sans type peut être converti en objet typé dans lequel les colonnes n’ont plus besoin d’être typées individuellement au moment de l’utilisation.
La fonction Type utilise un TypeSpecification comme seul argument. La spécification de type la plus simple consiste à référencer un type existant, par exemple Type( Text )
. Une spécification de type pour un enregistrement ou une table est similaire à la définition d’un enregistrement ou d’une table avec des valeurs littérales, où les valeurs sont remplacées par des noms de type. Par exemple, {Name: "Jane"}
serait typé avec Type( {Name: Text} )
. Les tables sont spécifiées entre crochets, et non par la fonction Table, et un seul enregistrement peut être fourni. Par exemple, [1,2,3]
serait typé avec Type( [Number] )
.
Utilisez la fonction RecordOf pour extraire le type d’enregistrement d’un type de table. Par exemple, Type( RecordOf( Library ) )
renverrait le type d’un seul livre de la bibliothèque. Pour créer un type de table à partir d’un type d’enregistrement, entourez le type d’enregistrement entre crochets. Par exemple, Type( [ Book ] )
définit une bibliothèque.
RecordOf ne peut être utilisé qu’au sein de la fonction Type.
La fonction Type et la valeur de type qu’elle renvoie ne peuvent être utilisées qu’à des endroits spécifiques dans Power Fx, comme le deuxième argument de ParseJSON. Dans les applications canevas, la fonction Type peut être utilisée avec une formule nommée dans App.Formulas.
Syntaxe
RecordOf( TableType )
- TableType : obligatoire. Nom de type d’une table. Cela n’accepte pas de spécification de type, il doit s’agir du nom d’un type précédemment défini pour une table.
Type( TypeSpecification )
- TypeSpecification : obligatoire. Spécification de type.
Examples
Fonction Type
Tenez compte des définitions suivantes dans App.Formulas :
Library =
[ { Title: "A Study in Scarlet", Author: "Sir Arthur Conan Doyle", Published: 1887 },
{ Title: "And Then There Were None", Author: "Agatha Christie", Published: 1939 },
{ Title: "The Marvelous Land of Oz", Author: "L. Frank Baum", Published: 1904 } ];
// Type definition for a single book
BookType := Type( { Title: Text, Author: Text, Published: Number } );
// Type definition for a table of books
LibraryType := Type( [ BookType ] );
Notez comment le texte du titre réel "A Study in Scarlet"
est remplacé par le nom de type Text
dans la spécification de type, un espace réservé pour n’importe quelle valeur de texte. Un paramètre ou une variable de type BookType
peut contenir l’un des livres Library
, tandis que LibraryType
peut contenir la table entière. Avec ces types en place, nous pouvons définir ces fonctions définies par l’utilisateur :
SortedBooks( books: LibraryType ): LibraryType =
SortByColumns( Library, Author, SortOrder.Ascending, Title, SortOrder.Ascending );
PublishedInLeapYear( book: BookType ): Boolean =
Mod( book.Published, 4 ) = 0 And
(Mod( book.Published, 100 ) <> 0 Or Mod( book.Published, 400 ) = 0);
Vous pouvez également utiliser BookType
pour analyser une chaîne JSON contenant un livre :
ParseJSON( "{""Title"":""Gulliver's Travels"", ""Author"": ""Jonathan Swift"", ""Published"": 1900}", BookType
)
L’utilisation de BookType
comme deuxième argument de ParseJSON génère un enregistrement typé qui peut être utilisé comme n’importe quel autre enregistrement Power Fx.
Fonction RecordOf
Dans l’exemple de la fonction Type, vous commencez avec BookType
et créez LibraryType
en encapsulant une table autour d’elle. On aurait pu définir ces types à l’inverse avec :
// Type definition for a table of books
RecordOfLibraryType := Type( [ { Title: Text, Author: Text, Published: Number } ] );
// Type definition for a single book
RecordOfBookType := Type( RecordOf( RecordOfLibraryType ) );