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. Ele não pode ser usado diretamente e requer conversão explícita em um tipo de dados. Os campos nos registros de um objeto sem tipo podem ser acessados usando a notação de ponto, e a existência de campos só é verificada no runtime.

Objeto sem tipo é o tipo de retorno de provedores sem tipo específicos. Atualmente, apenas a função ParseJSON() retorna objeto sem tipo.

Tipos Simples

O valor de uma variável do tipo objeto sem tipo não pode ser usado diretamente. Você sempre precisa classificá-lo corretamente usando o construtor de tipo correspondente.

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

Text(UOValue)
Value(UOValue)

A tabela a seguir lista os tipos de dados e as funções correspondentes para converter o objeto sem tipo nesse tipo de dados.

Tipo de Dados Função Description
Boolean Boolean() Ao converter objeto sem tipo em booliano, o valor subjacente deve representar um booliano ou um tipo que possa ser convertido automaticamente (como uma cadeia de caracteres "true").
Color ColorValue() ou RGBA() As cores podem ser representadas em notação de definição de cor de Folhas de Estilo em Cascata (CSS) como uma cadeia de caracteres ou como componentes RGBA individuais. O objeto sem tipo pode ser convertido diretamente de uma cadeia de caracteres de definição de cor de Folhas de Estilo em Cascata (CSS) usando a função ColorValue() ou de numbers RGBA individuais em cores usando a função RGBA().
Moeda, Número Value() Ao converter objeto sem tipo em número, o valor subjacente deve representar um número ou um tipo que possa ser convertido automaticamente (como uma cadeia de caracteres "123.456").
Data, DateTime, Hora DateValue(), TimeValue() ou DateTimeValue() Data, hora e datetime podem ser convertidos diretamente de objeto sem tipo em seu respectivo tipo, quando representados no formato ISO 8601. Outros formatos devem primeiro ser convertidos em texto usando a função Text() e, em seguida, passados para a função DateValue(), TimeValue() ou DateTimeValue() que, por padrão, usará o idioma das configurações do usuário atual para interpretar a data e hora.
GUID GUID() Um objeto sem tipo pode ser convertido diretamente em GUID se o objeto subjacente representar um GUID ou se representar uma cadeia de caracteres.
Hiperlink, Imagem, Mídia Text() Estes tipos de dados são tipos de dados de texto e podem ser convertidos em texto e usados no Power Fx.
Escolha, Opção Dois Switch() ou If() Opções e duas opções são apresentadas como cadeias de caracteres localizadas no Power Fx. Opções têm o suporte de um número e duas opções como boolianos. Não há conversão direta de booliano, número ou cadeia de caracteres em opção ou duas opções, mas as funções Switch() ou If() podem ser usadas no valor booliano, de texto ou número para atribuir corretamente o valor de opção ou duas opções.
Registro n/d Não há conversão direta de um objeto sem tipo em uma estrutura de registro, mas campos individuais podem ser recuperados do objeto sem tipo para criar um novo registro.
Referência de Registro n/d As referências de registro são exclusivas das fontes 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, que pode ser convertida em uma tabela. Esses objetos podem ser matrizes de registros ou matrizes de valores que são efetivamente tabelas de coluna única. ForAll() pode ser usada para criar uma tabela com registros totalmente classificados. Revise 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, você precisará converter o objeto sem tipo em número primeiro usando Value() antes de converter em texto.

Tipos de Registro

Você pode acessar campos em uma variável que representa um registro de objeto sem tipo por meio de notação de ponto regular usada para registros. No entanto, a existência dos campos não será verificada até o runtime. Como resultado, também não haverá intellisense disponível. Se um campo não existir ou tiver um valor nulo subjacente, acessá-lo resultará em um valor Blank().

Cada campo no registro também é do tipo objeto sem tipo e precisa ser classificado corretamente. O campo pode ser um registro sem tipo de tipo simples. Caso seja um registro, você pode encadear a notação de ponto. Se algum campo na cadeia não existir, Blank() será retornado.

Os exemplos a seguir usam campos de uma variável de objeto sem tipo denominada UORecord.

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

Caso um nome de campo consista em um nome de identificador inválido, por exemplo, quando os nomes dos campos começam com um número ou contêm caracteres inválidos, como um hífen, você pode colocar os nomes dos campos entre aspas simples:

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 registros ou uma matriz de tipos simples, a conversão da matriz de objeto sem tipo em uma tabela usando a função Table() sempre resultará em uma tabela de coluna única de objetos sem tipo. Funções como ForAll() e Index() não exigem que você crie primeiro uma função Table() e, como resultado, você não precisa usar o campo de coluna única Value,

Por exemplo, para obter o segundo número em uma matriz de objeto sem tipo contendo valores numéricos ( [1, 2, 3] ), a fórmula a seguir pode ser usada para recuperar a segunda linha na tabela e converter a coluna em um número:

Value( Index( UOArray, 2 ) )

Se o objeto sem tipo foi convertido primeiro em Table(), a segunda linha na tabela de coluna única resultante é uma coluna Value contendo o objeto sem tipo:

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

Para uma matriz de registros que possuem uma coluna de texto chamada Field, a mesma lógica se aplica. O objeto sem tipo pode ser acessado diretamente, ou se a função Table() estiver sendo usada, resultará em uma tabela de coluna única de objeto sem tipo.

A coluna Field pode ser acessada diretamente do objeto sem tipo retornado pela função Index().

Text( Index( UORecordArray, 2 ).Field )

Ao usar a função Table(), primeiro recupere a coluna única Value para obter o objeto sem tipo e acesse a coluna Field:

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

Para converter uma matriz de registros em uma tabela digitada, você pode usar a função ForAll() e converta cada campo individual.

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

Se o objeto sem tipo for convertido primeiro em uma tabela, novamente, a tabela de coluna única de objeto sem tipo resultante exigirá que você use a coluna Value para obter os campos.

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