Operadores e identificadores no Power Apps

Alguns destes operadores dependem do idioma do autor. Veja Aplicações globais para obter mais informações.

Símbolo Tipo Sintaxe Descrição
. Seletor de Propriedade ControloDeDeslize1.Value
Color.Red
Acceleration.X
Extrai uma propriedade de uma tabela, controlo, sinal ou enumeração. Para efeitos de retrocompatibilidade, ! 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 && ControloDeDeslize1.Value = 20
ou Preço < 100 And ControloDeDeslize1.Value = 20
Conjunção lógica, equivalente à função And
|| ou Or   Preço < 100 || ControloDeDeslize1.Value = 20 ou Preço < 100 Or ControloDeDeslize1.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" in "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:
  • argumentos em chamadas de função
  • campos num registo
  • registos numa tabela
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 um controlo de formulário ou da Galeria
ThisRecord Operador ThisItem 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.

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:

  1. Crie ou importe uma coleção com o nome Inventory e mostre-a numa galeria, como o primeiro procedimento em Mostrar imagens e texto numa galeria descreve.

  2. 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.

  3. 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 Galeria
Controlo Editar formulário
Controlo Apresentar formulário
O nome predefinido para o registo atual num controlo de formulário ou Galeria.
ThisRecord ForAll, Filter, With, Sum e outras funções de âmbito de registo O nome predefinido para o registo atual em ForAll e outras funções de âmbito de registo.
As name Controlo Galeria
ForAll, Filter, With, Sum e outras funções de âmbito de 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 Gallery, a propriedade Items é definida para a origem de dados Empregados (como a entidade Empregados incluída no exemplo da Distribuidores Adamastor):

Employees

Empregados mostrados numa galeria

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

Fórmula para a imagem de um empregado

Da mesma forma, a fórmula para o nome também utiliza ThisItem:

ThisItem.'First Name' & " " & ThisItem.'Last Name'

Fórmula para o nome próprio e apelido de um empregado

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" ) )

Filtrar os empregados baseado no nome, através de ThisRecord

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

Galeria de empregados, utilizando o operador As

As fórmulas para a imagem e o nome são ajustadas para utilizarem este nome para o registo atual:

Employee.Picture

Imagem de um empregado a utilizar o conjunto de nomes Employee com o operador As

Employee.'First Name' & " " & Employee.'Last Name'

Nome próprio e apelido de um empregado a utilizar o conjunto de nomes Employee com o operador As

As também pode ser utilizado com funções de âmbito de registo para substituir o nome predefinido ThisRecord. Podemos aplicar isto 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:

Texto de tabuleiro de xadrez mostrado num controlo de etiqueta

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 assemblar 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 de galeria terá uma fórmula Items de:

Sequence(8) as Rank

Ilustração da galeria externa que fornece a iteração Rank

Nesta galeria, colocaremos uma galeria horizontal para File, que será replicada para cada Rank, com uma propriedade Items de:

Sequence(8) as File

Ilustração da galeria interna que fornece a iteração 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 )

Controlo Label nas duas galerias que fornece as cores alternativas para o tabuleiro de xadrez

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 Principal Alguns controlos acolhem outros controlos, como os controlos de Ecrã e Galeria. Ao controlo de alojamento dos controlos nele contidos damos o nome de 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 tiverem carateres especiais não necessitam de plicas.

Seguem-se alguns exemplos de nomes de coluna que poderá encontrar numa tabela e 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 é garantidamente exclusivo, não é muda depois de ser criado, normalmente não permite espaços ou outros caráteres especiais e não é 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, continuam a poder ser utilizados se forem digitados indiretamente.

Por exemplo, imagine que adicionou um Campo Personalizado a uma entidade 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:

Entidade Contas com Campo Personalizado adicionado, mostrando uma nome a apresentar de "Campo Personalizado" e um nome lógico "cr5e3_customfield"

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. Note que as plicas têm de ser utilizadas porque este nome tem um espaço no mesmo:

Barra de fórmulas do Studio que mostra sugestões para nomes de campos de Contas com o nome a apresentar 'Campo Personalizado' realçado

Depois de seleccionar a sugestão, 'Campo Personalizado' é mostrado na barra de fórmulas e os dados são obtidos:

Barra de fórmulas do Studio que mostra a utilização do nome a apresentar 'Campo Personalizado' para o campo

Apesar de não ser sugerido, também poderíamos utilizar o nome lógico para este campo. Isto irá resultar na obtenção dos mesmos dados. Note que não são necessárias plicas, uma vez que este nome não contém espaços ou carateres especiais:

Barra de fórmulas do Studio que mostra a utilização do nome lógico a apresentar cr5e3_customfield para o campo

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 entidade de sistema e nomes de campos do Dataverse, isto não deve ser um problema uma vez que os nomes lógicos são consistentes entre 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 exclusivos, o mesmo nome a apresentar poderá aparecer mais de uma vez na mesma entidade. 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:

Barra de fórmulas do Studio que mostra a utilização do nome lógico cr5e3_customfieldalt para desambiguar as duas versões do "Campo Personalizado"

As cadeias de desambiguação de nomes são adicionadas em outras situações em que ocorrem conflitos de nomes, tais como os nomes de entidades, conjuntos de opções 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.

Nota

Pode indicar-nos as suas preferências no que se refere ao idioma da documentação? Responda a um breve inquérito. (tenha em atenção que o inquérito está em inglês)

O inquérito irá demorar cerca de sete minutos. Não são recolhidos dados pessoais (declaração de privacidade).