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
- Estas funciones son experimentales.
- Las características experimentales no se han diseñado para un uso de producción y pueden no estar completas. Estas características están disponibles antes del lanzamiento oficial para que pueda tener acceso anticipado y proporcionar comentarios. Más información: Comprender las funciones experimentales, de vista previa y retiradas en aplicaciones de lienzo
- Este comportamiento solo está disponible cuando la característica experimental Tipos definidos por el usuario en Configuración > Próximas características > Experimental está activada está activada (desactivada de forma predeterminada).
- Sus comentarios son muy valiosos. Nos gustaría conocer su opinión en los foros de la comunidad de características experimentales de Power Apps.
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 ) );