Partilhar via


Tipo de dados de objeto sem tipo

Objeto sem tipo é um tipo de dados no Power Fx que pode conter qualquer estrutura de dados, complexa ou simples. Não pode ser utilizado diretamente e necessita de conversão explícita para um tipo de dados. Os campos em registos num objeto sem tipo podem ser acedidos através da notação de ponto, e a existência de campos só é verificada em runtime.

Objeto sem tipo é o tipo de devolução de fornecedores sem tipo específicos. Atualmente, apenas a função ParseJSON() devolve objeto sem tipo.

Tipos Simples

O valor de uma variável do tipo objeto sem tipo não pode ser utilizado diretamente. Tem sempre de o escrever corretamente utilizando o construtor do tipo correspondente.

Os exemplos seguintes convertem o valor de uma variável objeto sem tipo denominada UOValue.

Text(UOValue)
Value(UOValue)

A tabela que se segue lista os tipos de dados e as funções correspondentes para converter objeto sem tipo para esse tipo de dados.

Tipo de Dados Function Description
Boolean Boolean() Quando converte um objeto sem tipo para booleano, o valor subjacente tem de representar um booleano ou um tipo que pode ser convertido automaticamente (tal como uma cadeia "true").
Color ColorValue() ou RGBA() As cores podem ser representadas na notação de definição de cores de Folha de Estilos em Cascata (CSS) como um cadeia ou como componentes RGBA individuais. O objeto sem tipo pode ser convertido diretamente a partir de uma cadeia de definição de cores de Folha de Estilos em Cascata (CSS) utilizando a função ColorValue() ou a partir de números individuais para cores utilizando a função RGBA().
Moeda, Número Value() Quando converte um objeto sem tipo para número, o valor subjacente tem de representar um número ou um tipo que pode ser convertido automaticamente (tal como uma cadeia "123.456").
Data, DateTime, Hora DateValue(), TimeValue() ou DateTimeValue() Data, hora e datetime podem ser convertidas diretamente de objeto sem tipo para o respetivo tipo, quando representados no formato ISO 8601. Outros formatos têm de ser convertidos primeiro em texto utilizando a função Text() e, em seguida, transmitidos para a função DateValue(), TimeValue() ou DateTimeValue() que, por predefinição, irá utilizar o idioma das definições do utilizador atual para interpretar a data e hora.
GUID GUID() Um objeto sem tipo pode ser convertido diretamente no GUID se o objeto subjacente representar um GUID ou se representar uma cadeia.
Ligação, Imagem, Multimédia Text() Estes tipos de dados são tipos de dados de texto e podem ser convertidos em texto e, em seguida, utilizados no Power Fx.
Escolha, Duas Opções Switch() ou If() Escolhas e duas opções são apresentadas como cadeias localizadas no Power Fx. Escolhas são apoiadas por um número e duas opções como booleano. Não existe conversão direta de booleano, número ou cadeia para uma escolha ou duas opções, mas as funções Switch() ou If() podem ser utilizadas no valor de booleano, texto ou número para atribuir corretamente o valor de escolha ou duas opções.
Registo n/d Não existe conversão direta de objeto sem tipo para uma estrutura de registos, mas os campos individuais podem ser obtidos do objeto sem tipo para criar um novo registo.
Referência de Registo n/d As referências de registo são exclusivas de origens de dados e não têm representação significativa em objetos sem tipo.
Table Table() e ForAll() Um objeto sem tipo pode representar uma matriz, a qual pode ser convertida numa tabela. Estes objetos podem ser matrizes de registos ou matrizes de valores que são, efetivamente, tabelas de coluna única. ForAll() pode ser utilizado para criar uma tabela com registos de tipo completo. Reveja os exemplos mais abaixo neste artigo para obter mais informações.
Texto Text() O texto pode ser convertido diretamente. Se um objeto sem tipo representar um número, precisa de converter o objeto sem tipo para número primeiro utilizando Value() antes de se converter em texto.

Tipos de Registo

Pode aceder a campos numa variável que represente um registo de objeto sem tipo utilizando a notação de ponto normal utilizada para registos. No entanto, a existência de campos só será verificado em runtime. Como resultado, Intellisense também não está disponível. Se um campo não existir ou tiver um valor null subjacente, aceder-lhe resultará num valor Blank().

Cada campo no registo também é do tipo objeto sem tipo e precisa de ser corretamente digitado. O campo pode ser um registo sem tipo de tipo simples. No caso de ser um registo, pode encadear a notação de ponto. Se qualquer campo na cadeia não existir, é obtido Blank().

Os exemplos seguintes utilizam campos de uma variável objeto sem tipo denominada UORecord.

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

Caso um nome de campo seja composto por um nome de identificador inválido, por exemplo, quando os nomes de campo começam por um número ou contêm carateres inválidos, como um hífen, pode colocar os nomes de campo entre plicas:

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

Matrizes

Uma variável de objeto sem tipo pode conter uma matriz. Embora a matriz possa ser uma matriz de registos ou matriz de tipo simples, a conversão da matriz de objeto sem tipo numa tabela utilizando a função Table() irá sempre resultar numa tabela de coluna única de objeto sem tipo. Funções como ForAll() e Index() não necessitam que crie primeiro uma Table() e, como resultado, não necessitam que utilize o campo Value de coluna única.

Por exemplo, para obter o segundo número numa matriz de objeto sem tipo com valores de número ( [1, 2, 3] ), a fórmula seguinte pode ser utilizada para obter a segunda linha na tabela e converter a coluna num número:

Value( Index( UOArray, 2 ) )

Se o objeto sem tipo tiver sido convertido primeiro numa Table(), a segunda linha na tabela de coluna única é uma coluna Value que contém o objeto sem tipo:

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

Para uma matriz de registos que tenha uma coluna de texto denominada Field, aplica-se a mesma lógica. O objeto sem tipo pode ser acedido diretamente ou se utilizar a função Table() resultará numa tabela de uma coluna única do objeto sem tipo.

A coluna Field pode ser acedida diretamente a partir do objeto sem tipo obtido pela função Index().

Text( Index( UORecordArray, 2 ).Field )

Ao utilizar a função Table(), obtenha primeiro a coluna Value de coluna única para obter o objeto sem tipo e, em seguida, aceda à coluna Field:

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

Para converter uma matriz de registos numa tabela com tipo, pode utilizar a função ForAll() e converter cada campo individual.

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

Se o objeto sem tipo for convertido pela primeira vez numa tabela, novamente, a tabela de uma coluna única resultante do objeto sem tipo irá requerer a utilização da coluna Value para obter os campos.

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