Compartir por


Tipo de datos de obxecto non tipificado

Obxecto sen tipo é un tipo de datos en Power Fx que pode albergar calquera estrutura de datos, complexa ou sinxela. Non se pode usar directamente e require unha conversión explícita a un tipo de datos. Pódese acceder aos campos dos rexistros dun obxecto sen tipo mediante a notación de puntos e só se verifica a existencia de campos no tempo de execución.

Obxecto sen tipo é o tipo de devolución de provedores específicos sen tipo. Actualmente, só a función ParseJSON() devolve obxecto sen tipo.

Tipos simples

O valor dunha variable de tipo obxecto sen tipo non se pode usar directamente. Ten que escribilo sempre correctamente usando o construtor de tipos correspondente.

Os seguintes exemplos converten o valor dunha variable de obxecto sen tipo chamada UOValue.

Text(UOValue)
Value(UOValue)

A seguinte táboa enumera os tipos de datos e as funcións correspondentes para converter un obxecto sen tipo a ese tipo de datos.

Tipo de datos Function Descripción
Boolean Booleano() Cando se converte obxecto non tipificado a booleano, o valor subxacente ten que representar un booleano ou un tipo que pode ser automaticamente convertido (como unha cadea "true").
Cor ColorValue() ou RGBA() As cores pódense representar na notación de definición de cor da folla de estilo en cascada (CSS) como unha cadea ou como compoñentes RGBA individuais. O obxecto sen tipo pódese converter directamente desde unha cadea de definición de cor da folla de estilo en cascada (CSS) mediante a función ColorValue() ou desde números RGBA individuais en cor mediante a función RGBA().
Moeda, número Valor() Cando se converte obxecto sen escribir a número, o valor subxacente ten que representar un número ou un tipo que pode ser automaticamente convertido (como unha cadea "123.456").
Data, DataHora, Hora DateValue(), TimeValue() ou DateTimeValue() A data, a hora e a dataHora pódense converter directamente de obxecto sen tipo no seu tipo respectivo, cando se representan en formato ISO 8601. Outros formatosdeben converterse primeiro en texto mediante a función Text() e despois pasarse á función DateValue(), TimeValue() ou DateTimeValue() que por defecto utilizará o idioma da configuración do usuario actual para interpretar a data e a hora.
GUID GUID() Un obxecto sen escribir pódese converter directamente en GUID se o obxecto subxacente representa un GUID ou se representa unha cadea.
Hiperligazón, Imaxe, Multimedia Texto() Estes tipos de datos son tipos de datos de texto e pódense converter en texto e, a continuación, utilizarse en Power Fx.
Elección, Dúas opcións Cambiar() ou Se() Eleccións e dúas opcións preséntanse como cadeas localizadas en Power Fx. Eleccións está apoiada por un número e dúas opcións como booleanos. Non hai conversión directa de booleano, número ou cadea a unha elección ou dúas opcións, pero as funcións Cambiar() ou Se() pódense usar no valor de booleano, texto ou número para atribuír correctamente o valor elección ou dúas opcións.
Rexistro n/d Non hai conversión directa dun obxecto sen tipo a unha estrutura de rexistro, pero pódense recuperar campos individuais do obxecto sen tipo para crear un rexistro novo.
Referencia do rexistro n/d As referencias de rexistro son exclusivas das orixes de datos e non teñen representación significativa en obxectos sen tipo.
Table Táboa() e Para todos() Un obxecto sen tipo pode representar unha matriz, que se pode converter nunha táboa. Estes obxectos poden ser matrices de rexistros ou matrices de valores que son efectivamente táboas dunha soa columna. Para todos() pódese usar para crear unha táboa con rexistros con todos os tipos. Revise os exemplos máis abaixo neste artigo para obter máis información.
Mensaxe de texto Texto() O texto pódese converter directamente. Se un obxecto sen tipo representa un número, primeiro debe converter o obxecto sen tipo nun número usando Valor() antes de converter en texto.

Tipos de rexistro

Pode acceder aos campos dunha variable que representa o rexistro dun obxecto sen tipo mediante a notación de puntos normal utilizada para os rexistros. Non obstante, a existencia dos campos non se verificará ata o tempo de execución. Como resultado, tampouco hai intellisense dispoñible. Se un campo non existe ou ten un valor nulo subxacente, ao acceder a el aparecerá un valor En branco().

Cada campo do rexistro tamén é de tipo obxecto sen tipo e debe ter o tipo correcto. O campo pode ser un rexistro sen tipo de tipo sinxelo. No caso de que se trate dun rexistro, pode encadear a notación de puntos. Se algún campo da cadea non existe, devólvese, En branco().

Os seguintes exemplos usan campos dunha variable de obxecto sen tipo chamada UORecord.

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

No caso de que un nome de campo consista nun nome de identificador non válido, por exemplo, cando os nomes de campo comezan cun número ou conteñen caracteres non válidos, como un guión, pode poñer os nomes de campo entre comiñas simples:

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

Matrices

Unha variable de obxecto sen tipo pode conter unha matriz. Aínda que a matriz pode ser unha matriz de rexistros ou unha matriz de tipos simples, converter a matriz de obxecto sen tipo nunha táboa usando a función Táboa() sempre dará lugar a unha táboa dunha soa columna de obxectos sen tipo. As funcións como Para todos() e Índice() non requiren que cree primeiro unha Táboa() e o resultado non require que se use o campo Value dunha soa columna.

Por exemplo, para obter o segundo número nunha matriz de obxecto sen tipo que conteña valores de número ([1, 2, 3]), pódese usar a seguinte fórmula para recuperar a segunda fila da táboa e converter a columna nun número:

Value( Index( UOArray, 2 ) )

Se o uobxecto sen tipo se converteu primeiro nunha Táboa(), a segunda fila da táboa de columna única do resultado é unha columna de Value que contén o obxecto sen tipo:

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

Para unha matriz de rexistros que teña unha columna de texto chamada Field, aplícase a mesma lóxica. Pódese acceder directamente ao obxecto sen tipo ou, se se usa a función Táboa(), o resultado será unha única columna de obxecto sen tipo.

Pódese acceder directamente á columna Field desde o obxecto seen tipo devolto pola función Índice().

Text( Index( UORecordArray, 2 ).Field )

Cando utilice a función Táboa(), primeiro recupere a columna única Value para obter o obxecto sen tipo e despois acceda á columna Field:

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

Para converter unha matriz de rexistros nunha táboa con tipo, pode usar a función Para todos() e converter cada campo individual.

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

Se o obxecto sen tipo se converte primeiro nunha táboa e a táboa de columna única resultante de obxecto sen tipo requirirá que utilice a columna Value para obter os campos.

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