Partager via


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

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 ) );