Operadores e identificadores no Power Apps
Aplica-se a: Aplicações de tela
Aplicações condicionadas por modelo
Power Pages
Alguns destes operadores dependem do idioma do autor. Para mais informações sobre o suporte de idiomas nas aplicações de tela, consulte Aplicações globais.
Símbolo | Tipo | Exemplo | Descrição |
---|---|---|---|
'...' | Identificador | 'Nome da Conta' | Os identificadores que contêm caracteres especiais, incluindo espaços, encontram-se entre plicas |
"..." | Cadeia de texto | "Hello, World" | As cadeias de texto estão entre aspas |
$"..." | Interpolação de cadeias | $"Caro {FirstName}," | Fórmulas incorporadas numa cadeia de texto |
. | Seletor de Propriedade |
Slider1.Value Color.Red Acceleration.X |
Extrai uma propriedade de uma tabela, controlo, sinal ou enumeração. Para retrocompatibilidade, o ! também pode ser utilizado. |
. [depende de idioma] |
Separador decimal | 1.23 | Separador entre as partes inteira e fracionária de um número. O caráter depende do idioma. |
( ) | Parênteses |
Filter(T, A < 10) (1 + 2) * 3 |
Impõe a ordem de precedência e agrupa as subexpressões numa expressão maior |
+ | Operadores aritméticos | 1 + 2 | Adição |
- | 2-1 | Subtração e sinal | |
* | 2 * 3 | Multiplicação | |
/ | 2 / 3 | Divisão (veja também a função Mod) | |
^ | 2 ^ 3 | Exponenciação, equivalente à função Power | |
% | 20% | Percentagem (equivalente a "* 1/100") | |
= | Operadores de comparação | Preço = 100 | Igual a |
> | Preço > 100 | Maior que | |
>= | Preço >= 100 | Maior ou igual a | |
< | Preço < 100 | Menor que | |
<= | Preço <= 100 | Menor ou igual a | |
<> | Preço <> 100 | Diferente de | |
& | Operador de concatenação de cadeia | "hello" & " " & "world" | Faz com que várias cadeias apareçam contínuas |
&& ou And | Operadores lógicos |
Preço < 100 && Slider1.Value = 20 ou Preço < 100 And ControloDeDeslize1.Value = 20 |
Conjunção lógica, equivalente à função And |
|| ou Or | Preço < 100 || Slider1.Value = 20 ou Preço < 100 Ou Slider1.Value = 20 | Disjunção lógica, equivalente à função Or | |
! ou Not | !(Preço < 100) ou Not (Preço < 100) | Negação lógica, equivalente à função Not | |
exactin | Operadores de associação | Gallery1.Selected exactin SavedItems | Pertencente a uma coleção ou tabela |
exactin | "Windows" exactin “Para apresentar janelas no sistema operativo Windows...” | Teste de subcadeia (sensível às maiúsculas e minúsculas) | |
presente em | Gallery1.Selected in SavedItems | Pertencente a uma coleção ou tabela | |
presente em | "O" em "O teclado e o monitor..." | Teste de subcadeia (não sensível às maiúsculas e minúsculas) | |
@ | Operador de desambiguação | MyTable[@fieldname] | Desambiguação de campo |
@ | [@MyVariable] | Desambiguação global | |
, [depende de idioma] |
Separador de lista |
If( X < 10, "Low", "Good" ) { X: 12, Y: 32 } [ 1, 2, 3 ] |
Separa: Este caráter depende do idioma. |
; [depende de idioma] |
Encadeamento de fórmulas | Collect(T, A); Navigate(S1, "") | Separa invocações de funções nas propriedades de comportamento. O operador de encadeamento depende do idioma. |
Como | Como operador | AllCustomers como Cliente | Substitui ThisItem e ThisRecord nas galerias e funções de âmbito de registo. As é útil para fornecer um melhor nome específico e é particularmente importante em cenários aninhados. |
Autónoma | Operador Self | Self.Fill | Aceder às propriedades do controlo atual |
Elemento Principal | Operador principal | Parent.Fill | Acesso às propriedades de um contentor de controlos |
ThisItem | Operador ThisItem | ThisItem.FirstName | Acesso aos campos de uma Gallery ou controlo form |
ThisRecord | Operador ThisRecord | ThisRecord.FirstName | Acesso ao registo completo e aos campos individuais do registo em ForAll, Sum, With e outras funções de âmbito de registo. Pode ser substituído pelo operador As. |
Nota
O operador @ também pode ser utilizado para validar o tipo de objeto de gravação relativamente a uma origem de dados. Por exemplo, Collect(coll,Account@{'Account Number: 1111')
Operadores in e exactin
Utilize os operadores in e exactin para localizar uma cadeia numa origem de dados, como uma coleção ou uma tabela importada. O operador in identifica correspondências independentemente das maiúsculas e minúsculas, e o operador exactin identifica correspondências apenas se estiverem escritas com as mesmas maiúsculas. Eis um exemplo:
Crie ou importe uma coleção com o nome Inventorye mostre-a numa galeria, como o primeiro procedimento em Mostrar imagens e texto numa galeria descreve.
Defina a propriedade Items da galeria como esta fórmula:
Filter(Inventory, "E" in ProductName)A galeria mostra todos os produtos, exceto Callisto porque o nome do produto é o único que não contém a letra especificada.
Altere a propriedade Items da galeria para esta fórmula:
Filter(Inventory, "E" exactin ProductName)A galeria mostra apenas Europa porque só o respetivo nome contém a letra que especificou nas maiúsculas/minúsculas que especificou.
Operadores ThisItem, ThisRecord e As
Alguns controlos e funções aplicam fórmulas aos registos individuais de uma tabela. Para referenciar o registo individual de uma fórmula, utilize um dos seguintes:
Operador | Aplica-se ao | Descrição |
---|---|---|
ThisItem |
Controlo Gallery Controlo Edit form Controlo Display form |
O nome predefinido para o registo atual num controlo de formulário ou Gallery. |
ThisRecord | ForAll, Filter, With, Sum e outras funções do âmbito do registo | O nome predefinido para o registo atual em ForAll e outras funções de âmbito de registo. |
Comonome |
Controlo Gallery ForAll, Filter, With, Sum e outras funções do âmbito do registo |
Define um nome para o registo atual, substituindo o ThisItem ou ThisRecord predefinido. Utilize As para facilitar a compreensão das fórmulas e resolver a ambiguidade durante o aninhamento. |
Operador ThisItem
Por exemplo, no seguinte controlo da Gallery, a propriedade Items é definida para a origem de dados funcionários (tal como a tabela funcionários incluída com a amostra Northwind Traders):
Employees
O primeiro item na galeria é um modelo que é replicado para cada empregado. No modelo, a fórmula para a imagem utiliza ThisItem para referenciar o item atual:
ThisItem.Picture
Da mesma forma, a fórmula para o nome também utiliza ThisItem:
ThisItem.'First Name' & " " & ThisItem.'Last Name'
Operador ThisRecord
ThisRecord é utilizado em funções com um âmbito de registo. Por exemplo, podemos utilizar a função Filter com a propriedade Items da nossa galeria para mostrar apenas os nomes próprios que começam por M:
Filter( Employees, StartsWith( ThisRecord.Employee.'First Name', "M" ) )
ThisRecord é opcional e implícito ao utilizar os campos diretamente, por exemplo, neste caso, podíamos ter escrito:
Filter( Employees, StartsWith( 'First Name', "M" ) )
Apesar de opcional, a utilização de ThisRecord pode facilitar a compreensão das fórmulas e pode ser necessário em situações ambíguas, em que um nome de campo também pode ser um nome de relação. ThisRecord é opcional enquanto ThisItem é sempre obrigatório.
Utilize ThisRecord para referenciar todo o registo com Patch, Collect e outras funções de âmbito de registo. Por exemplo, a seguinte fórmula define o estado de todos os empregados inativos para ativos:
With( { InactiveEmployees: Filter( Employees, Status = 'Status (Employees)'.Inactive ) },
ForAll( InactiveEmployees,
Patch( Employees, ThisRecord, { Status: 'Status (Employees)'.Active } ) ) )
Como operador
Utilize o operador As para atribuir um nome a um registo numa galeria ou função de âmbito de registo, substituindo o ThisItem ou ThisRecord predefinido. A atribuição de um nome ao registo pode facilitar a compreensão das fórmulas e pode ser necessário em situações aninhadas para aceder a registos noutros âmbitos.
Por exemplo, pode modificar a propriedade Items da nossa galeria para utilizar As para identificar que estamos a trabalhar com um Empregado:
Employees As Employee
As fórmulas para a imagem e o nome são ajustadas para utilizarem este nome para o registo atual:
Employee.Picture
Employee.'First Name' & " " & Employee.'Last Name'
As também pode ser utilizado com funções de âmbito de registo para substituir o nome predefinido ThisRecord. Podemos aplicar esta informação ao nosso exemplo anterior para clarificar o registo com o qual estamos a trabalhar:
With( { InactiveEmployees: Filter( Employees, Status = 'Status (Employees)'.Inactive ) },
ForAll( InactiveEmployees As Employee,
Patch( Employees, Employee, { Status: 'Status (Employees)'.Active } ) ) )
Ao aninhar galerias e funções de âmbito de registo, a ThisItem e ThisRecord referem-se sempre ao âmbito mais interior, deixando os registos em âmbitos exteriores não disponíveis. Utilize As para disponibilizar todos os âmbitos de registo ao atribuir um nome exclusivo a cada um.
Por exemplo, esta fórmula produz um padrão de tabuleiro de xadrez como uma cadeia de texto ao aninhar duas funções ForAll:
Concat(
ForAll( Sequence(8) As Rank,
Concat(
ForAll( Sequence(8) As File,
If( Mod(Rank.Value + File.Value, 2) = 1, " X ", " . " )
),
Value
) & Char(10)
),
Value
)
Definir a propriedade Text de um controlo Label para esta fórmula apresenta:
Vamos desmontar o que está a acontecer aqui:
- Começamos por iterar uma tabela sem nome de 8 registos numerados a partir da função Sequence. Este ciclo é para cada linha do tabuleiro, que é comumente referido como Rank, pelo que lhe atribuímos este nome.
- Para cada linha, iteramos outra tabela sem nome de 8 colunas e atribuímos-lhe o nome comum File.
- Se Rank.Value + File.Value for um número ímpar, é colocado um X no quadrado, caso contrário é um ponto. Esta parte da fórmula referencia os dois ciclos ForAll, possíveis ao utilizar o operador As.
- Concat é utilizado duas vezes, primeiro para montar as colunas e, em seguida, as linhas, com Char(10) atribuído para criar uma nova linha.
É possível um exemplo semelhante com os controlos Gallery aninhados das funções ForAll. Vamos começar com a galeria vertical para Rank. Este controlo gallery terá uma fórmula Items de:
Sequence(8) as Rank
Nesta galeria, colocaremos uma galeria horizontal para File, que será replicada para cada Rank, com uma propriedade Items de:
Sequence(8) as File
E, finalmente, dentro desta galeria, vamos adicionar um controlo Label que será replicado para cada File e cada Rank. Vamos dimensioná-lo para preencher todo o espaço e utilizar a propriedade Fill para fornecer a cor com esta fórmula:
If( Mod( Rank.Value + File.Value, 2 ) = 1, Green, Beige )
Operadores de Self e Principais
Existem três formas de se referir a um controlo e às suas propriedades dentro de uma fórmula:
Método | Descrição |
---|---|
Por nome do controlo | Qualquer controlo pode ser referido pelo nome a partir de qualquer lugar dentro da aplicação. Por exemplo, Label1.Fill refere-se à propriedade de preenchimento do controlo cujo nome é Label1. |
Operador Self | Muitas vezes é conveniente referir outra propriedade do mesmo controlo ao escrever uma fórmula. Em vez de usar uma referência absoluta pelo nome, é mais fácil e portátil usar uma referência relativa a si próprio. O operador Self proporciona esse fácil acesso ao controlo atual. Por exemplo, Self.Fill refere-se à cor de preenchimento do controlo atual. |
Operador Parent | Alguns controlos acolhem outros controlos, como os controlos de Screen e Gallery. O controlo hosting dos controlos incluídos chama-se elemento principal. Tal como o operador self, o operador principal fornece uma referência relativa fácil ao controlo do recipiente. Por exemplo, Parent.Fill refere-se à propriedade de preenchimento do controlo que é o recipiente para o controlo atual. |
Self e Principal são operadores e não propriedades nos próprios controlos. Referir-se a Parent.Parent, Self.Parent ou Parent.Self não é suportado.
Nomes de identificador
Os nomes de variáveis, origens de dados, colunas e outros objetos podem conter qualquer Unicode.
Utilize aspas simples ao redor de um nome que contém um espaço ou outro caráter especial.
Utilize plicas em conjunto para representar uma única plica no nome. Os nomes que não contêm caracteres especiais não necessitam de plicas.
Aqui estão alguns exemplos de nomes de colunas que poderá encontrar numa tabela, bem como a forma como são representados numa fórmula:
Nome da coluna numa base de dados | Referência de coluna numa fórmula |
---|---|
SimpleName | SimpleName |
NameWith123Numbers | NameWith123Numbers |
Nome com espaços | 'Name with spaces' |
Nome com "aspas" | 'Name with "double" quotes' |
Nome com "plicas" | 'Name with ''single'' quotes' |
Nome com um sinal @ arroba | 'Name with an @ at sign' |
As aspas são utilizadas para designar cadeias de texto.
Nomes a apresentar e nomes lógicos
Algumas origens de dados, tais como o SharePoint e o Microsoft Dataverse têm dois nomes diferentes para referenciarem a mesma tabela ou coluna de dados:
Nome lógico - Um nome que se garante ser único, que não altera depois de ser criado, normalmente não permite espaços nem outros caracteres especiais e não está localizado em idiomas diferentes. Como resultado, o nome pode ser críptico. Estes nomes são utilizados por programadores profissionais. Por exemplo, cra3a_customfield. Este nome também pode ser referido como nome de esquema ou apenas nome.
Nome a apresentar – um nome de utilizador amigável e destinado a ser visto por utilizadores finais. Este nome poderá não ser exclusivo, poderá ser alterado com o tempo, poderá conter espaços e qualquer caráter Unicode e poderá ser traduzido em diferentes idiomas. Correspondendo ao exemplo acima, o nome a apresentar pode ser Campo Personalizado com um espaço entre as palavras.
Visto que os nomes a apresentar são mais fáceis de compreender, as aplicações de tela irão sugerir as opções como escolhas e não sugerir nomes lógicos. Apesar de não serem sugeridos nomes lógicos, os nomes podem continuar a ser utilizados se escritos indiretamente.
Por exemplo, imagine que adicionou um Campo Personalizado a uma tabela no Dataverse. Um nome lógico ser-lhe-á atribuído pelo sistema que só pode ser modificado quando criar o campo. O resultado seria semelhante a:
Quando criar uma referência a um campo Contas, a sugestão será efetuada para utilizar o 'Campo Personalizado', uma vez que este é o nome a apresentar. É necessário utilizar plicas pois este nome tem um espaço:
Depois de seleccionar a sugestão, 'Campo Personalizado' é mostrado na barra de fórmulas e os dados são obtidos:
Embora não seja sugerido, também podemos utilizar o nome lógico para este campo. Isto irá resultar na obtenção dos mesmos dados. Não são necessárias plicas, uma vez que este nome não contém espaços ou carateres especiais:
Nos bastidores, é mantido um mapeamento entre os nomes a apresentar vistos em fórmulas e os nomes lógicos subjacentes. Uma vez que os nomes lógicos têm de ser utilizados para interagir com a origem de dados, este mapeamento é utilizado para converter automaticamente o nome a apresentar atual no nome lógico e isto é o que é visto no tráfego de rede. Este mapeamento também é utilizado para reverter para nomes lógicos para mudar para novos nomes a apresentar, por exemplo, se um nome a apresentar for alterado ou um fabricante numa linguagem diferente editar a aplicação.
Nota
Os nomes lógicos não são traduzidos quando move uma aplicação entre ambientes. Para a tabela do sistema e nomes de campo Dataverse, este não deve ser um problema, uma vez que os nomes lógicos são consistentes em todos os ambientes. No entanto, os campos personalizados, tais como cra3a_customfield neste exemplo, poderão ter um prefixo de ambiente diferente (cra3a neste caso). Os nomes a apresentar são preferenciais uma vez que podem ser correspondidos aos nomes a apresentar no novo ambiente.
Desambiguação de nome
Visto que os nomes a apresentar não são únicos, o mesmo nome pode aparecer mais do que uma vez na mesma tabela. Quando isto acontecer, o nome lógico será adicionado ao final do nome a apresentar entre parênteses para um ou mais dos nomes em conflito. Com base no exemplo acima, se havia um segundo campo com o mesmo nome a apresentar de Campo Personalizado com um nome lógico de cra3a_customfieldalt, as sugestões demonstrariam:
As cadeias de desambiguação de nomes são adicionadas noutras situações em que ocorrem conflitos de nomes, tais como os nomes da tabela, escolhas e outros itens do Dataverse.
Operador de desambiguação
Algumas funções criam âmbitos de registo para aceder aos campos da tabela durante o processamento de cada registo, tal como Filter, AddColumns e Sum. Os nomes de campos adicionados com o âmbito de registo substituem os mesmos nomes em qualquer outro local na aplicação. Quando isto acontece, pode continuar a aceder a valores fora do âmbito de registo com o operador de desambiguação @:
- Para aceder a valores de âmbitos de registo aninhados, utilize o operador @ com o nome da tabela que está a ser utilizada através da utilização deste padrão:
Table[@FieldName] - Para aceder a valores globais, tais como origens de dados, coleções e variáveis de contexto, utilize o padrão [@ObjectName] (sem uma designação de tabela).
Para obter mais informações e exemplos, veja âmbitos de registo.
Comentários
https://aka.ms/ContentUserFeedback.
Brevemente: Ao longo de 2024, vamos descontinuar progressivamente o GitHub Issues como mecanismo de feedback para conteúdos e substituí-lo por um novo sistema de feedback. Para obter mais informações, veja:Submeter e ver comentários