Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Dinâmico é 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 convertido para outro tipo de dados em tempo de execução, explícita ou implicitamente. Os campos de registros em um valor dinâmico podem ser acessados usando a notação de ponto, e a existência de campos só é verificada em tempo de execução.
Há duas maneiras de criar um valor Dinâmico :
- Usando a função ParseJSON.
- Usando um conector que retorna um tipo "dinâmico".
Observação
Dynamic era anteriormente chamado UntypedObject. Apenas o nome mudou, não há alteração na semântica. O único local onde o nome teria aparecido em uma fórmula é nas versões experimentais de Funções definidas pelo usuário e Tipos definidos pelo usuário.
Tipos Simples
O valor de uma variável que contém um valor Dynamic não pode ser usado diretamente. Você sempre tem que digitá-lo corretamente usando o construtor de tipo correspondente ou convertendo-o em um tipo específico com as funções AsType e ParseJSON .
Os exemplos a seguir convertem o valor de uma variável Dynamic chamada DynValue.
Text(DynValue)
Value(DynValue)
A tabela a seguir lista os tipos de dados e as funções correspondentes para converter Dynamic para esse tipo de dados.
| Tipo de Dados | Function | Descrição |
|---|---|---|
| booleano | Boolean() | Ao converter Dynamic para Booleano, o valor subjacente tem que representar um booleano ou um tipo que pode ser convertido automaticamente (como uma string "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 Dynamic pode ser convertido diretamente de uma cadeia de caracteres de definição de cor CSS (Cascading Style Sheet) usando a função ColorValue() ou de números RGBA individuais em cores usando a função RGBA(). |
| Moeda, Número | Value() | Ao converter Dinâmico em Número, o valor subjacente tem que representar um número ou um tipo que pode ser convertido automaticamente (como uma cadeia de caracteres "123.456"). |
| Data, DateTime, Hora | DateValue(), TimeValue() ou DateTimeValue() | Data, hora e data/hora podem ser convertidas diretamente de Dynamic para seu respetivo tipo, quando representadas 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 valor Dynamic pode ser convertido diretamente em GUID se o objeto subjacente representar um GUID ou se representar uma cadeia de caracteres. |
| 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 há conversão direta de Dynamic para uma estrutura de registro, mas campos individuais podem ser recuperados do Dynamic para criar um novo registro. |
| Referência de Registo | n/d | As referências de registro são exclusivas para fontes de dados e não têm representação significativa no Dynamic. |
| Table | Table() e ForAll() | Uma dinâmica pode representar uma matriz, que pode ser convertida em uma 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 valor Dynamic representar um número, você precisará converter o Dynamic em número primeiro usando Value() antes de converter em texto. |
Tipos de Registo
Você pode acessar campos em uma variável que representa um registro dinâmico usando a notação de pontos regular usada para registros. 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 registro também é do tipo Dinâmico e precisa ser digitado corretamente. O campo pode ser um registro dinâmico 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 a seguir usam campos de uma variável Dynamic chamada DynRecord.
Text(DynRecord.StringField)
Value(DynRecord.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:
dynamic.'01'
dynamic.'my-field'
Acesso a colunas dinâmicas
Por vezes, os nomes de colunas num registro serão dinâmicos. Use a função ColumnNames para determinar que nomes de coluna estão disponíveis num registo e, em seguida, use a função Column para obter o valor de uma coluna nomeada.
Por exemplo,
LettersUsed = ParseJSON( "{ ""d"": 2, ""p"": 3 }" );
Concat( ColumnNames( LettersUsed ) As Names, Names.Value, ", " )
// returns "d, p"
Sum( ForAll( ColumnNames( LettersUsed ) As Names, Column( LettersUsed, Names.Value ) ), Value )
// returns 5
Matrizes
Uma variável Dynamic pode conter uma matriz. Mesmo que a matriz possa ser uma matriz de registros ou uma matriz de tipos simples, converter a matriz dinâmica em uma tabela usando a função Table() sempre resultará em uma tabela de coluna única de Dynamic. 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 em uma matriz de Dinâmico contendo valores numéricos ( [1, 2, 3] ), a fórmula a seguir pode ser usada para recuperar a segunda linha da tabela e converter a coluna em um número:
Value( Index( UOArray, 2 ) )
Se o Dynamic foi convertido em um Table() primeiro, a segunda linha na tabela de coluna única do resultado é uma Value coluna contendo o Dynamic:
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 Dynamic pode ser acessado diretamente, ou se o uso da função Table() resultará em uma tabela de coluna única de Dynamic.
A Field coluna pode ser acessada diretamente do Dynamic retornado pela função Index( ).
Text( Index( UORecordArray, 2 ).Field )
Ao usar a função Table(), primeiro recupere a coluna de coluna Value única para obter o Dynamic e, em seguida, acesse a Field coluna:
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 Dinâmico for convertido pela primeira vez em uma tabela, novamente, a tabela de coluna única resultante de Dinâmico exigirá que você use a Value coluna para obter os campos.
ForAll( Table(UORecordArray), { FirstField: Value(ThisRecord.Value.FirstField), SecondField: Text(ThisRecord.Value.SecondField) } )
Converter em registos e tabelas com tipo
Importante
- Usar AsType e IsType com valores Dynamic é um recurso experimental.
- As caraterísticas experimentais não se destinam à produção e podem não estar completas. Estas caraterísticas estão disponíveis antes do lançamento oficial, para que possa ter acesso antecipado e enviar comentários. Mais informações: Compreender caraterísticas experimentais, de pré-visualização e retiradas em aplicações de tela
- O comportamento descrito neste artigo só está disponível quando a caraterística experimental de Tipos definidos pelo utilizador em Definições > Próximas caraterísticas > Experimentais está ativada (está desativada por predefinição).
- O seu feedback é valioso para nós. Diga-nos o que pensa no fórum da comunidade de caraterísticas experimentais do Power Apps.
Em vez de converter cada valor simples individualmente, as funções ParseJSON,IsType e AsType podem ser usadas para converter um Dynamic em um objeto digitado em massa. Use a função Type para criar um tipo que mapeará a estrutura dinâmica para uma estrutura tipada.
Por exemplo, aqui estamos a interpretar as cadeias JSON como valores de data e hora, sem a necessidade de chamar a função DateTimeValue:
Eclipse = ParseJSON( "{ ""Start"": ""2026-08-12T18:26:00.000Z"", ""End"": ""2026-08-12T18:33:00.000Z"" }",
Type( { Start: DateTime, End: DateTime } ) );
DateDiff( Eclipse.Start, Eclipse.End, TimeUnit.Minutes )
// 7