Tipo de datos de objeto Untyped

Objeto sin tipo es un tipo de datos en Power Fx que puede contener cualquier estructura de datos, compleja o simple. No se puede usar directamente y requiere una conversión explícita a un tipo de datos. Se puede acceder a los campos en registros de un objeto sin tipo usando la notación de puntos, y la existencia de campos solo se verifica en runtime.

Objeto sin tipo es el tipo de retorno de proveedores específicos sin tipo. Actualmente, solo la función ParseJSON() devuelve objeto sin tipo.

Tipos sencillos

El valor de una variable de tipo objeto sin tipo no se puede usar directamente. Siempre debe escribirlo correctamente utilizando el constructor de tipo correspondiente.

Los siguientes ejemplos convierten el valor de una variable de objeto sin tipo denominada UOValue.

Text(UOValue)
Value(UOValue)

La siguiente tabla enumera los tipos de datos y las funciones correspondientes para convertir un objeto sin tipo a ese tipo de datos.

Tipo de datos Function Descripción
Booleana Boolean() Al convertir objeto sin tipo a booleano, el valor subyacente tiene que representar un booleano o un tipo que se pueda convertir automáticamente (como una cadena "true").
Color ColorValue() o RGBA() Los colores se pueden representar en notación de definición de color de hoja de estilos en cascada (CSS) como cadena, o como componentes RGBA individuales. El objeto sin tipo se puede convertir directamente desde una cadena de definición de color de hoja de estilos en cascada (CSS) usando la función ColorValue(), o de números de RGBA individual en color usando la función RGBA().
Moneda, número Value() Al convertir objeto sin tipo a número, el valor subyacente tiene que representar un booleano o un tipo que se pueda convertir automáticamente (como una cadena "123.456").
Fecha, Fecha y hora, Hora DateValue(), TimeValue() o DateTimeValue() La fecha, la hora y la fecha y hora se pueden convertir directamente de objeto sin tipo a su respectivo tipo, cuando se representan en formato ISO 8601. Otros formatos deben convertirse primero a texto usando la función Text() y luego pasarse a la función DateValue(), TimeValue() o DateTimeValue() que por defecto utilizará el idioma de la configuración actual del usuario para interpretar la fecha y hora.
GUID GUID() Un objeto sin tipo se puede convertir directamente a GUID si el objeto subyacente representa un GUID o si representa una cadena.
Hipervínculo, Imagen, Medios Text() Estos tipos de datos son tipos de datos de texto y pueden convertirse en texto y luego usarse en Power Fx.
Elección, dos opciones Switch() o If() Elecciones y dos opciones se presentan como cadenas localizadas en Power Fx. Las elecciones están respaldadas por un número y dos opciones como booleanos. No hay conversión directa de booleano, número o cadena a una elección o dos opciones, pero las funciones Switch() o If() se pueden usar en el valor booleano, de texto o numérico para asignar correctamente el valor de elección o dos opciones.
Grabar n/d No hay una conversión directa de objeto sin tipo a una estructura de registro, pero los campos individuales se pueden recuperar del objeto sin tipo para crear un nuevo registro.
Referencia de registro n/d Las referencias de registro son exclusivas de las fuentes de datos y no tienen una representación significativa en objetos sin tipo.
Table Table() y ForAll() Un objeto sin tipo puede representar una matriz, que se puede convertir en una tabla. Estos objetos pueden ser matrices de registros o matrices de valores que son efectivamente tablas de una sola columna. ForAll() se puede utilizar para crear una tabla con registros totalmente tipificados. Revise los ejemplos posteriores de este artículo para obtener más información.
Text Text() El texto se puede convertir directamente. Si un objeto sin tipo representa un número, necesita convertir primero el objeto sin tipo a número usando Value() antes de convertir a texto.

Tipos de registro

Puede acceder a los campos de una variable que representa un registro de objeto sin tipo usando la notación de puntos regular que se usa para los registros. Sin embargo, la existencia de los campos no se verificará hasta el runtime. Como resultado, tampoco hay intellisense disponible. Si un campo no existe o tiene un valor NULL subyacente, acceder a él dará por resultado un valor Blank().

Cada campo del registro también es del tipo objeto sin tipo, y debe dársele el tipo correcto. El campo puede ser un registro sin tipo de tipo simple. En caso de que sea un registro, puede encadenar la notación de puntos. Si algún campo de la cadena no existe, se devuelve Blank().

Los siguientes ejemplos usan campos de una variable de objeto sin tipo denominada UORecord.

Text(UORecord.StringField)
Value(UORecord.Field.ChildField)

En caso de que un nombre de campo consista en un nombre de identificador no válido, por ejemplo cuando los nombres de campo comienzan con un número o contienen caracteres no válidos como un guion, puede poner los nombres de campo entre comillas simples:

untyped.'01'
untyped.'my-field'

Matrices

Una variable de objeto sin tipo puede contener una matriz. Aunque la matriz podría ser una matriz de registros o una matriz de tipos simples, convertir la matriz de objeto sin tipo a una tabla usando la función Table() siempre dará como resultado una tabla de una sola columna de objetos sin tipo. Funciones como ForAll() e Index() no necesitan que primero cree una función Table() y como resultado no requieren que use el campo Value de columna única.

Por ejemplo, para obtener el segundo número en una matriz de objetos sin tipo que contienen valores numéricos ([1, 2, 3]), se puede usar la siguiente fórmula para recuperar la segunda fila de la tabla y convertir la columna en un número:

Value( Index( UOArray, 2 ) )

Si el objeto sin tipo se convirtió primero en una Table(), la segunda fila en la tabla de una columna única de los resultados es una columna Value que contiene el objeto sin tipo:

Value( Index( Table( UOArray ), 2 ).Value )

Para una matriz de registros que tienen una columna de texto llamada Field, se aplica la misma lógica. Se puede acceder directamente al objeto sin tipo o si se utiliza la función Table() dará como resultado una tabla de una única columna de objeto sin tipo.

Se puede acceder directamente a la columna Field desde el objeto sin tipo devuelto por la función Index().

Text( Index( UORecordArray, 2 ).Field )

Cuando use la función Table(), primero recupere la columna Value de columna única para obtener el objeto sin tipo y luego acceda a la columna Field:

Text( Index( Table( UORecordArray ), 2 ).Value.Field )

Para convertir una matriz de registros en una tabla con tipo, puede utilizar la función ForAll() y convertir cada campo individual.

ForAll( UORecordArray, { FirstField: Value(ThisRecord.FirstField), SecondField: Text(ThisRecord.SecondField) } )

Si el objeto sin tipo se convierte primero en una tabla, nuevamente, la tabla resultante de una columna única del objeto sin tipo requerirá que use la columna Value para obtener los campos.

ForAll( Table(UORecordArray), { FirstField: Value(ThisRecord.Value.FirstField), SecondField: Text(ThisRecord.Value.SecondField) } )