Compartir vía


Funciones RecordOf y Type

Se aplica a: Aplicaciones de lienzo

Construye un tipo definido por el usuario para su uso con funciones definidas por el usuario y valores sin tipo.

Importante

Description

Cada función en Power Fx define los tipos de valores que se pueden pasar como parámetros y el tipo de salida. Los tipos se comprueban al escribir una fórmula y los errores se muestran si no concuerdan con lo esperado. El editor también usa los tipos para sugerir buenas opciones sobre qué pasar a la función y detectar errores lo antes posible.

Al crear sus propias funciones definidas por el usuario, debe especificar los tipos de entrada y salida. Para tipos simples como Decimal o Texto, esto es fácil, ya que estos tipos básicos están predefinidos. Para tipos más complejos, como registros o tablas, use la función Type para crear el tipo.

La función Type también hace que sea más fácil trabajar con objetos sin tipo. Con las funciones ParseJSON, IsType y AsType, un objeto sin tipo se puede convertir en un objeto con tipo en el que ya no es necesario escribir las columnas individualmente en el punto de uso.

La función Type toma un TypeSpecification como único argumento. La especificación de tipo más sencilla consiste en hacer referencia a un tipo existente, por ejemplo Type( Text ). Una especificación de tipo para un registro o tabla es similar a la definición de un registro o tabla con valores literales, donde los valores se reemplazan por nombres de tipo. Por ejemplo, {Name: "Jane"} se escribiría como tipo con Type( {Name: Text} ). Las tablas se especifican entre corchetes, no la función Table, y solo se puede proporcionar un registro. Por ejemplo, [1,2,3] se escribiría como tipo con Type( [Number] ).

Utilice la función RecordOf para extraer el tipo de registro de un tipo de tabla. Por ejemplo, Type( RecordOf( Library ) ) devolvería el tipo de un solo libro de la biblioteca. Para crear un tipo de tabla a partir de un tipo de registro, envuelva el tipo de registro entre corchetes. Por ejemplo, Type( [ Book ] ) define una biblioteca. RecordOf solo se puede usar dentro de la función Type.

La función Type y el valor de tipo que devuelve solo se pueden usar en lugares específicos en Power Fx, como el segundo argumento de ParseJSON.. En las aplicaciones de lienzo, la función Type se puede usar con una fórmula con nombre en App.Formulas.

Sintaxis

RecordOf( TableType )

  • TableType: obligatorio El tipo de nombre de una tabla. Esto no acepta una especificación de tipo, debe ser el nombre de un tipo previamente definido para una tabla.

Type( TypeSpecification )

  • TypeSpecification: obligatorio. Una especificación de tipo.

Ejemplos

Función Type

Tenga en cuenta las siguientes definiciones en 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 ] );

Observe cómo el texto "A Study in Scarlet" del título real se reemplaza con el nombre Text del tipo en la especificación de tipo, un marcador de posición para cualquier valor de texto. Un parámetro o variable de tipo BookType puede contener uno de los libros en Library, mientras que LibraryType puede contener toda la tabla. Con estos tipos en su lugar, podemos definir estas funciones definidas por el usuario:

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

También puede usar BookType para analizar una cadena JSON que contiene un libro:

ParseJSON( "{""Title"":""Gulliver's Travels"", ""Author"": ""Jonathan Swift"", ""Published"": 1900}", BookType
)

Si se usa BookType como segundo argumento para ParseJSON, se obtiene un registro con tipo que se puede usar como cualquier otro registro de Power Fx.

Función RecordOf

En el ejemplo de la función Type, comienza con BookType y se compila LibraryType envolviéndola en una tabla. Podríamos haber definido estos tipos a la inversa con:

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