Funciones AsType e IsType
Se aplica a: Aplicaciones de lienzo
Aplicaciones basadas en modelo
Power Pages
Power Platform CLI
Comprueba una referencia de registro para un tipo de tabla específico (IsType) y trata la referencia como un tipo específico (AsType).
Nota
Los comandos PAC CLI pac power-fx no admiten IsType.
Description
Las funciones AsType e IsType se pueden usar para convertir referencias de registros (por ejemplo, búsquedas polimórficas en Dataverse) y objetos sin tipo en objetos con tipo que se pueden usar directamente.
Referencias de registro
Lea Comprender referencias de registros y búsquedas polimórficas para una introducción más amplia y más detalles.
Un campo de búsqueda generalmente se refiere a registros en una tabla en particular. Debido a que el tipo de tabla está bien establecido, puede acceder a los campos de la búsqueda utilizando una simple notación de puntos. Por ejemplo, First( Accounts ).'Primary Contact'.'Full Name' va desde la tabla Cuentas hasta el registro Contacto primario en la tabla Contactos y extrae el campo Nombre completo.
Microsoft Dataverse también admite campos de búsqueda polimórficos, que pueden hacer referencia a registros de un conjunto de tablas, como en estos ejemplos.
Campo de búsqueda | Puede referirse a |
---|---|
Propietario | Usuarios o Equipos |
Cliente | Cuentas o Contactos |
Referente a | Cuentas, Contactos, Artículos de conocimiento, etc. |
En las fórmulas de aplicación de lienzo use referencias de registros para trabajar con búsquedas polimórficas. Debido a que una referencia de registro puede hacer referencia a diferentes tablas, no sabe qué campos estarán disponibles en tiempo de ejecución cuando escriba una fórmula. La notación Registro.Campo no está disponible. Esas fórmulas deben adaptarse a los registros que encuentra la aplicación cuando se ejecuta.
La función IsType prueba si una referencia de registro se refiere a un tipo de tabla específico. La función devuelve un valor booleano TRUE o FALSE.
La función AsType trata una referencia de registro como un tipo de tabla específico, a veces denominado fundición. Puede utilizar el resultado como si fuera un registro de la tabla y volver a utilizar la notación Record.Field para acceder a todos los campos de ese registro. Se produce un error si la referencia no es del tipo específico.
Utilice estas funciones juntas para probar primero el tipo de tabla de un registro y luego trátelo como un registro de ese tipo para que los campos estén disponibles:
If( IsType( First( Accounts ).Owner, Users ),
AsType( First( Accounts ).Owner, Users ).'Full Name',
AsType( First( Accounts ).Owner, Teams ).'Team Name'
)
Estas funciones son necesarias solo si está accediendo a los campos de una referencia de registro. Por ejemplo, puede usar referencias de registro en la función Filter sin IsType o AsType:
Filter( Accounts, Owner = First( Users ) )
Del mismo modo, puede utilizar referencias de registro con la función Patch:
Patch( Accounts, First( Accounts ), { Owner: First( Teams ) } )
Cuando se utiliza en un contexto de registro, como dentro de un control Gallery o Edit form, es posible que deba utilizar el operador de desambiguación global para hacer referencia al tipo de tabla. Por ejemplo, esta fórmula sería efectiva para una galería que muestra una lista de contactos donde Nombre de empresa es una búsqueda de Cliente:
If( IsType( ThisItem.'Company Name', Accounts ),
AsType( ThisItem.'Company Name', Accounts ).'Account Name',
AsType( ThisItem.'Company Name', Contacts ).'Full Name'
)
Para ambas funciones, especifica el tipo a través del nombre del origen de datos que está conectado a la tabla. Para que la fórmula funcione, también debe agregar un origen de datos a la aplicación para cualquier tipo que desee probar o emitir. Por ejemplo, debe agregar la tabla Usuarios como origen de datos si quiere usar IsType y AsType con una búsqueda Propietario y registros de esa tabla. Puede agregar solo las fuentes de datos que realmente usa en su aplicación; no es necesario agregar todas las tablas a las que podría hacer referencia una búsqueda.
Si la referencia de registro es blank, IsType devuelve FALSE y AsType devuelve blank. Todos los campos de un registro blank también serán blank.
Objetos sin tipo
Importante
- El uso de AsType e IsType con objetos sin tipo es una característica experimental.
- 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
- El comportamiento que se describe en este artículo 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 para nosotros. Nos gustaría conocer su opinión en los foros de la comunidad de características experimentales de Power Apps.
Un objeto sin tipo de una API web o [la función ParseJSON] debe convertirse en un objeto con tipo antes de que se pueda usar Power Fx. Las opciones para hacer esto incluyen:
- Asigne un tipo implícitamente al campo en el punto en el que se usa. Por ejemplo, un objeto se convierte en un número si se usa con el operador
+
, si se puede convertir en un número. Esta opción puede tener conversiones inesperadas y no puede convertir registros y tablas como un todo. - Escriba explícitamente cada campo individualmente con las funciones Decimal, Text, DateTime, GUID y otras constructoras de tipos. Este es el más invasivo para sus fórmulas, ya que cada campo debe realizarse por separado.
- Escriba explícitamente JSON con el segundo argumento de la función ParseJSON. Esta es una opción fácil que evita la necesidad del objeto sin tipo.
- Escriba explícitamente un objeto sin tipo mediante la función AsType . También puede probar el tipo antes de intentar la conversión con la función IsType.
Sintaxis
AsType( RecordReference, TableType )
- RecordReference: obligatorio. Una referencia de registro, a menudo un campo de búsqueda que puede hacer referencia a un registro en cualquiera de las múltiples tablas.
- TableType - Necesario. La tabla específica a la que se debe enviar el registro.
AsType( UntypedObject, TypeSpecification )
- UntypedObject: obligatorio. Una referencia de registro, a menudo un campo de búsqueda que puede hacer referencia a un registro en cualquiera de las múltiples tablas.
- TypeSpecification: obligatorio. Un nombre de tipo o una especificación de tipo definida con la función Type.
IsType( RecordReference, TableType )
- RecordReference: obligatorio. Una referencia de registro, a menudo un campo de búsqueda que puede hacer referencia a un registro en cualquiera de las múltiples tablas.
- TableType - Necesario. La tabla específica para la que probar.
IsType( UntypedObject, TypeSpecification )
- UntypedObject: obligatorio. Una referencia de registro, a menudo un campo de búsqueda que puede hacer referencia a un registro en cualquiera de las múltiples tablas.
- TypeSpecification: obligatorio. Un nombre de tipo o una especificación de tipo definida con la función Type.
Ejemplos
Referencias de registro
Comprender referencias de registros y búsquedas polimórficas contiene extensos ejemplos.
Cree una aplicación de lienzo en blanco para tabletas.
En el panel izquierdo, seleccione Datos>Agregar datos. Y luego, agregue las tablas Cuentas y Contactos.
En el panel izquierdo, seleccione + (Insertar) >Diseño>Galería vertical en blanco.
Seleccione Conectarse a los datos y luego seleccione Contactos como el origen de datos.
Establezca el diseño de la galería a Título y subtítulo.
En el panel Datos abra la lista Title1 y seleccione Nombre completo.
Selecciona la etiqueta de control Subtitle1.
Establezca la propiedad Text de Subtitle1 a esta fórmula:
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' )
El subtítulo en la galería muestra estos valores:
- "--" Si el 'Nombre de empresa' es blank.
- "Cuenta:" y luego el campo Nombre de la cuenta de la tabla Cuentas si el campo Nombre de empresa se refiere a una cuenta.
- "Contacto:" y luego el campo Nombre completo de la tabla Contactos si el campo Nombre de empresa se refiere a un contacto.
Sus resultados pueden diferir porque los datos de ejemplo pueden haberse modificado para mostrar más tipos de resultados.
Objetos sin tipo
Los siguientes ejemplos muestran un registro JSON simple interpretado de varias maneras por ParseJSON, AsType e IsType en el Pac CLI Power Fx REPL.
En este primer ejemplo, no se proporciona ninguna información de tipo a ParseJSON, por lo que devuelve un objeto sin tipo.
>> Set( rec, ParseJSON( "{""a"":1}" ) )
rec: <Untyped: Use Value, Text, Boolean, or other functions to establish the type>
El campo se convierte implícitamente en un número cuando se utiliza en un contexto numérico.
>> 1 + rec.a
2
Como alternativa, este ejemplo convierte explícitamente el registro en un registro Power Fx tipificado con el segundo argumento a ParseJSON.
>> ParseJSON( "{""a"":1}", Type( {a: Number} ) )
{a:1}
Y otra alternativa, este ejemplo convierte explícitamente el registro en un registro con tipo Power Fx mediante AsType.
>> AsType( ParseJSON( "{""a"":1}" ), Type( {a: Number} ) )
{a:1}
Por último, por si no estábamos seguros, en este ejemplo se prueba el tipo antes de convertirlo con la función IsType.
>> IsType( ParseJSON( "{""a"":1}" ), Type( {a: Number} ) )
true