Noções básicas sobre variáveis de aplicação de tela no Power Apps

Se já utilizou outras ferramentas de programação, como o Visual Basic ou JavaScript, poderá perguntar-se Onde estão as variáveis? O Power Apps é ligeiramente diferente e requer outra abordagem. Em vez de olhar para as variáveis ao criar uma aplicação baseada em telas, pergunte-se a si próprio: O que faria no Excel?

Noutras ferramentas, talvez tenha feito explicitamente um cálculo e armazenado o resultado numa variável. No entanto, o Power Apps e o Excel recalculam automaticamente as fórmulas à medida que os dados de entrada mudam, pelo que, normalmente, não é necessário criar e atualizar variáveis. Ao seguir esta abordagem sempre que possível, pode criar, compreender e manter a sua aplicação mais facilmente.

Em alguns casos, terá de utilizar variáveis no Power Apps, o que expande o modelo do Excel mediante a adição de fórmulas de comportamento. Estas fórmulas são executadas quando, por exemplo, um utilizador seleciona um botão. Dentro de uma fórmula de comportamento, é muitas vezes útil definir uma variável que será utilizada noutras fórmulas.

Em geral, evite utilizar variáveis. Contudo, há casos em que só as variáveis podem proporcionar a experiência que procura. As variáveis são criadas implicitamente e digitadas quando aparecem em funções que definem os respetivos valores.

Traduzir o Excel no Power Apps

Excel

Vamos rever o funcionamento do Excel. As células podem conter valores, como números ou cadeias, ou fórmulas que tenham por base os valores de outras células. Após o utilizador introduzir um valor diferente numa célula, o Excel recalcula automaticamente todas as fórmulas que dependem do valor novo. Não tem de fazer qualquer programação para permitir este comportamento.

No exemplo seguinte, a célula A3 está definida com a fórmula A1+A2. Se A1 ou A2 forem alterados, A3 será recalculado automaticamente para refletir a alteração. Este comportamento não requer codificação fora da fórmula propriamente dita.

Animação recalculando a soma de dois números no Excel

O Excel não tem variáveis. O valor de uma célula que contenha uma fórmula altera-se com base no que é introduzido, mas não há forma de memorizar o resultado de uma fórmula e armazená-lo numa célula ou noutro sítio qualquer. Se alterar o valor de uma célula, toda a folha de cálculo pode ser alterada e eventuais valores calculados anteriores perdem-se. Os utilizadores do Excel podem copiar e colar células, mas essa operação está sob o controlo manual deles e não é possível com as fórmulas.

Power Apps

As aplicações que criar no Power Apps têm um comportamento muito semelhante ao Excel. Em vez de atualizar as células, pode adicionar controlos onde quiser num ecrã e dar-lhes nomes para utilização em fórmulas.

Por exemplo, pode replicar o comportamento do Excel numa aplicação ao adicionar um controlo de Etiqueta, com o nome Label1 e dois controlos de Entrada de texto, com os nomes TextInput1 e TextInput2. Se, depois, definir a propriedade Text (Texto) de Label1 como TextInput1 + TextInput2, mostrará sempre a soma dos números que estejam em TextInput1 e em TextInput2 automaticamente.

Calcular a soma de dois números em Power Apps

Repare que o controlo Label1 está selecionado e que mostra a respetiva fórmula Text na barra de fórmulas, na parte superior do ecrã. Aqui, encontramos a fórmula TextInput1 + TextInput2. Esta fórmula cria uma dependência entre estes controlos, da mesma forma que as dependências são criadas entre células nos livros do Excel. Vamos alterar o valor de TextInput1:

Animação do recalcular da soma de dois números no Power Apps

A fórmula para Label1 foi recalculada automaticamente, mostrando o valor novo.

No Power Apps, pode utilizar as fórmulas para determinar não só o valor principal de um controlo, mas também as propriedades, como a formatação. No exemplo seguinte, uma fórmula da propriedade Color (Cor) da etiqueta vai mostrar automaticamente valores negativos a vermelho. A função If deve ser familiar, por causa do Excel:

If( Value(Label1.Text) < 0, Red, Black )

Animação de formatação condicional

Pode utilizar fórmulas para diversos cenários:

  • Se utilizar o GPS do seu dispositivo, um controlo de mapa pode mostrar a sua localização atual com uma fórmula que utiliza Location.Latitude e Location.Longitude. À medida que se move, o mapa regista automaticamente a sua localização.
  • As origens de dados podem ser atualizadas por outros utilizadores. Por exemplo, outras pessoas da sua equipa poderão atualizar itens numa lista do SharePoint. Quando atualiza uma origem de dados, as fórmulas dependentes são automaticamente recalculadas para refletir os dados atualizados. Prosseguindo o exemplo, poderá definir a propriedade Items (Itens) de uma galeria como a fórmula Filter( SharePointList ), que apresentará, de forma automática, o conjunto de registos que acabou de ser filtrado.

Benefícios

A utilização de fórmulas na criação de aplicações tem muitas vantagens:

  • Se conhece o Excel, também conhece o Power Apps. Os modelos e a linguagem das fórmulas são iguais.
  • Se já tiver utilizado outras ferramentas de programação, pense na quantidade de código que teria de escrever para realizar estes exemplos. No Visual Basic, teria de escrever um processador de eventos para o evento de alteração em cada controlo de entrada de texto. O código para efetuar o cálculo em cada um destes é redundante e poderia ficar dessincronizado ou, noutra hipótese, teria de escrever uma subrotina comum. No Power Apps fizemos tudo isto com uma única fórmula de uma só linha.
  • Para saber de onde vem o texto de Label1, sabemos exatamente onde procurar: na fórmula na propriedade Text. Não existe nenhuma outra forma de afetar o texto deste controlo. Numa ferramenta de programação tradicional, qualquer processador de eventos ou subrotina poderia alterar o valor da etiqueta em qualquer parte do programa. Esta situação pode tornar mais difícil determinar quando e onde é que as variáveis foram alteradas.
  • Se o utilizador altera um controlo de deslize e, em seguida, mudar de ideias, pode modificar o controlo para o valor original. E é como se nada nunca tivesse mudado. A aplicação mostra os mesmos valores dos controlos que mostrava antes. Não há consequências para experimentar e perguntar “e se”, tal como não as há no Excel.

Em geral, se puder obter um efeito mediante a utilização de uma fórmula, ficará mais bem servidor. Ponha o motor de fórmulas do Power Apps a trabalhar por si.

Saber quando utilizar variáveis

Vamos modificar a nossa calculadora simples para que funcione como uma antiga máquina de somar, com um total corrente. Se selecionar o botão Add (Adicionar), adicionará um número ao total corrente. Se selecionar o botão Clear (Limpar), reporá o total corrente para zero.

Apresentar Descrição
Aplicação com um controlo de entrada de Texto, uma etiqueta e dois botões Quando a aplicação é iniciada, o total em execução é 0.

O ponto vermelho representa o dedo do utilizador na caixa de entrada de texto, em que o utilizador introduz 77.
O controlo de introdução de texto contém 77 e o botão Adicionar está a ser pressionado O utilizador seleciona o botão Adicionar.
O total é 77 e outro 77 é adicionado ao mesmo 77 é adicionado ao total em execução.

O utilizador seleciona novamente o botão Adicionar.
O total é 154 antes de ser apagado. 77 é adicionado novamente ao total em execução, resultando em 154.

O utilizador seleciona o botão Limpar.
O total está desmarcado. O total em execução é reposto para 0.

A nossa máquina de somar utiliza uma coisa que não existe no Excel - botões. Nesta aplicação, não pode utilizar apenas fórmulas para calcular o total corrente, porque o valor deste depende de uma série de ações realizadas pelo utilizador. Em vez disso, o nosso total tem de ser registado e atualizado manualmente. A maioria das ferramentas de programação armazenam estas informações numa variável.

Em alguns casos, precisará de uma variável para que a sua aplicação se comporte da forma que pretende. Contudo, a abordagem tem alguns contras:

  • Tem de atualizar o total corrente manualmente. O recálculo automático não o vai ajudar em nada.
  • O total corrente já não pode ser calculado com base nos valores dos outros controlos. Depende da quantidade de vezes que o utilizador selecionou o botão Add e do valor que estava no controlo de entrada de texto de cada vez que o selecionou. Será que o utilizador introduziu 77 e selecionou Add duas vezes ou especificou 24 e 130 em cada soma? É impossível dizer, depois de o total ter atingido 154.
  • As alterações ao total podem vir de diferentes caminhos. Neste exemplo, tanto o botão Add, como o botão Clear, pode atualizar o total. Se a aplicação não se comportar da forma que pretende, qual dos botões está a causar o problema?

Utilize uma variável global

Para criar a nossa máquina de somar, precisamos de uma variável que vai conter o total corrente. As variáveis mais simples com que trabalhar no Power Apps são as variáveis globais.

Como funcionam as variáveis globais:

  • É definido o valor da variável global com a função Set (Definir). Set( MyVar, 1 ) define a variável global MyVar como o valor 1.
  • Para utilizar a variável global, é feita referência ao nome utilizado com a função Set. Neste caso, MyVar vai devolver 1.
  • As variáveis globais podem conter qualquer valor, incluindo cadeias, números, registos e tabelas.

Vamos recriar a máquina de somar com uma variável global:

  1. Adicione um controlo de entrada de texto, denominado TextInput1, e dois botões, Button1 e Button2.

  2. Defina a propriedade Text de Button1 como "Add" e defina a propriedade Text de Button2 como "Clear".

  3. Para atualizar o total corrente sempre que um utilizador seleciona o botão Adiciona, defina a respetiva propriedade OnSelect como esta fórmula:

    Set( RunningTotal, RunningTotal + TextInput1 )

    A simples existência desta fórmula estabelece RunningTotal como uma variável global que mantém um número devido ao operador +. Pode referenciar RunningTotal em qualquer parte da aplicação. Sempre que o utilizador abre esta aplicação, o RunningTotal tem um valor inicial de em branco.

    A primeira vez que um utilizador seleciona o botão Adicionar e as execuções Definir, RunningTotal é definido como o valor RunningTotal + TextInput1.

    A propriedade OnSelect do botão Adicionar está definida como função Definir

  4. Para definir o total corrente como 0 sempre que o utilizador seleciona o botão Clear, defina a respetiva propriedade OnSelect como esta fórmula:

    Set( RunningTotal, 0 )

    A propriedade OnSelect do botão Limpar está definida como função Definir

  5. Adicione um controlo de Etiqueta e defina a respetiva propriedade Text como RunningTotal.

    Esta fórmula é recalculada automaticamente e mostra ao utilizador o valor de RunningTotal, à medida que é alterado com base nos botões que ele seleciona.

    A propriedade Text da etiqueta está definida com o nome da variável

  6. Pré-visualizamos a aplicação e temos uma máquina de somar igual à descrita acima. Introduza um número na caixa de texto e prima o botão Add algumas vezes. Quando estiver pronto, regresse à experiência de criação com a tecla Esc.

    O controlo de entrada de texto contém um valor e a etiqueta contém o total a executar

  7. Para mostrar o valor da variável global, selecione o menu File (Ficheiro) e selecione Variables (Variáveis) no painel do lado esquerdo.

    Opção variáveis no menu ficheiro

  8. Para mostrar todos os locais onde a variável é definida e utilizada, selecione-a.

    Lista de localização na qual a variável é utilizada

Tipos de variáveis

Power Apps tem três tipos de variáveis:

Tipo de variável Scope Descrição Funções que estabelecem
Variáveis globais Aplicação Mais simples de utilizar. Contém um número, texto, cadeia, booleano, registo, tabela, etc., que pode ser uma referência de qualquer parte da aplicação. Set
Variáveis de contexto Ecrã Ideais para transmitir valores para ecrãs, de forma semelhante aos parâmetros transmitidos para procedimentos noutras linguagens. Só podem ser referenciadas a partir de um ecrã. UpdateContext
Navigate
Collections Aplicação Contêm uma tabela que pode ser referenciada a partir de qualquer parte da aplicação. Permitem que os conteúdos de uma tabela sejam modificados em vez de serem definidos como um todo. Podem ser guardadas no dispositivo local para utilização posterior. Collect
ClearCollect

Criar e remover variáveis

Todas as variáveis são criadas implicitamente quando aparecem numa função Set, UpdateContext, Navigate, Collect ou ClearCollect. Para declarar uma variável e o respetivo tipo, só tem de a incluir em qualquer uma destas funções em qualquer parte da aplicação. Nenhuma destas funções cria variáveis; só preenchem variáveis com valores. Nunca declaram variáveis explicitamente como poderá fazer noutra ferramenta de programação, sendo que toda a digitação é implícita ao uso.

Por exemplo, poderá ter um controlo de botão com uma fórmula OnSelect igual a Set( X, 1 ). Esta fórmula estabelece X como variável com um tipo de número. Pode utilizar X em fórmulas como número e essa variável tem um valor em branco depois de abrir a aplicação, mas antes de selecionar o botão. Quando seleciona o botão, atribui a X o valor 1.

Se tiver adicionado outro botão e definir a propriedade OnSelect para Set( X, "Hello" ), ocorrerá um erro porque o tipo (cadeia de texto) não corresponde ao tipo de Set (número) anterior. Todas as definições implícitas da variável têm de concordar no tipo. Novamente, tudo isto aconteceu porque mencionou X em fórmulas, e não porque qualquer uma dessas fórmulas foi executada de fato.

Pode remover uma variável removendo todas as funções Set, UpdateContext, Navigate, Collect ou ClearCollect que implicitamente estabelecem a variável. Sem estas funções, a variável não existe. Também tem de remover quaisquer referências à variável porque causará um erro.

Tempo de vida variável e valor inicial

Todas as variáveis são guardadas na memória enquanto a aplicação está em execução. Quando a aplicação é fechada, os valores contidos nas variáveis perdem-se.

Pode armazenar o conteúdo de uma variável num origem de dados utilizando as funções Patch ou Collect. Também pode armazenar valores em coleções no dispositivo local utilizando a função SaveData.

Quando o utilizador abre a aplicação, todas as variáveis têm um valor inicial de em branco.

Ler variáveis

Para ler os valores das variáveis, utilize os nomes das mesmas. Por exemplo, pode definir uma variável com esta fórmula:

Set( Radius, 12 )

Em seguida, pode simplesmente utilizar o Radius em qualquer lugar para o qual possa utilizar um número e será substituído por 12:

Pi() * Power( Radius, 2 )

Se atribuir a uma variável de contexto o mesmo nome que uma variável global ou uma coleção, a variável de contexto terá precedência. No entanto, pode continuar a fazer referência à variável global ou à coleção se usar o operador de desambiguação [@Radius].

Usar uma variável de contexto

Vamos ver de que forma podemos criar a nossa máquina de somar com uma variável de contexto em vez de uma global.

Como funcionam as variáveis de contexto:

  • Estabelece e define variáveis de contexto de conjunto usando a função UpdateContext ou Navigate. Quando o utilizador inicia a aplicação, todas as variáveis de contexto têm um valor inicial de em branco.
  • As variáveis de contexto são atualizadas com registos. Noutras ferramentas de programação, normalmente utiliza-se "=" para atribuição, como, por exemplo, "x = 1". Por sua vez, nas variáveis de contexto utiliza-se { x: 1 }. Quando utiliza uma variável de contexto, utilize o respetivo nome diretamente sem a sintaxe do registo.
  • Também pode definir uma variável de contexto quando usar a função Navigate para mostrar um ecrã. Se encarar os ecrãs como um tipo de procedimento ou subrotina, isso assemelha-se à transmissão de parâmetros noutras ferramentas de programação.
  • À exceção de Navigate, as variáveis de contexto estão limitadas ao contexto de um único ecrã, a partir do qual recebem o nome. Não pode utilizá-las nem defini-las fora deste contexto.
  • As variáveis de contexto podem conter qualquer valor, incluindo cadeias, números, registos e tabelas.

Vamos recriar a máquina de somar com uma variável de contexto:

  1. Adicione um controlo de entrada de texto, denominado TextInput1, e dois botões, Button1 e Button2.

  2. Defina a propriedade Text de Button1 como "Add" e defina a propriedade Text de Button2 como "Clear".

  3. Para atualizar o total corrente sempre que um utilizador seleciona o botão Adiciona, defina a respetiva propriedade OnSelect como esta fórmula:

    UpdateContext( { RunningTotal: RunningTotal + TextInput1 } )

    A simples existência desta fórmula estabelece RunningTotal como uma variável de contexto que mantém um número devido ao operador +. Pode referenciar RunningTotal em qualquer parte deste ecrã. Sempre que o utilizador abre esta aplicação, o RunningTotal tem um valor inicial de em branco.

    A primeira vez que o utilizador seleciona o botão Adicionar e as execuções UpdateContext, RunningTotal é definido como o valor RunningTotal + TextInput1.

    Propriedade OnSelect do botão Adicionar

  4. Para definir o total corrente como 0 sempre que o utilizador seleciona o botão Clear, defina a respetiva propriedade OnSelect como esta fórmula:

    UpdateContext( { RunningTotal: 0 } )

    Mais uma vez, UpdateContext é utilizado com a fórmula UpdateContext( { RunningTotal: 0 } ).

    Propriedade OnSelect do botão Limpar

  5. Adicione um controlo de Etiqueta e defina a respetiva propriedade Text como RunningTotal.

    Esta fórmula é recalculada automaticamente e mostra ao utilizador o valor de RunningTotal, à medida que é alterado com base nos botões que ele seleciona.

    Propriedade texto da etiqueta

  6. Pré-visualizamos a aplicação e temos uma máquina de somar igual à descrita acima. Introduza um número na caixa de texto e prima o botão Add algumas vezes. Quando estiver pronto, regresse à experiência de criação com a tecla Esc.

    O controlo de entrada de texto mostra um valor e a etiqueta mostra o total a executar

  7. Pode definir o valor de uma variável de contexto enquanto navega para um ecrã. Isto é útil para transmitir "contexto" ou "parâmetros" de um ecrã para outro. Para demonstrar esta técnica, introduza um ecrã, introduza um botão e, em seguida, defina a propriedade OnSelect para esta fórmula:

    Navigate( Screen1, None, { RunningTotal: -1000 } )

    Propriedade OnSelect de um botão

    Mantenha premida a tecla ALT enquanto seleciona este botão para mostrar Screen1 e definir a variável de contexto RunningTotal como-1000.

    Screen1 está aberto

  8. Para mostrar o valor da variável contexto, selecione o menu File (Ficheiro) e depois selecione Variables (Variáveis) no painel do lado esquerdo.

    Opção variáveis do menu ficheiro

  9. Para mostrar onde a variável de contexto é definida e utilizada, selecione-a.

    Lista de localização na qual uma variável é utilizada

Usar uma coleção

Por fim, vamos ver como criar a nossa máquina de somar com uma coleção. Uma vez que as coleções contêm tabelas que são facilmente modificáveis, vamos fazer com que esta máquina guarde um “registo em papel” de todos os valores, à medida que são introduzidos.

Como funcionam as coleções:

  • Utilize a função ClearCollect para criar e definir as coleções. Pode utilizar a função Collect em alternativa, mas esta requer, efetivamente, outra variável em vez de substituir a antiga.
  • As coleções são uma espécie de origem de dados e, consequentemente, são tabelas. Para aceder a um valor único numa coleção, utilize a função First e extraia um campo no registo resultante. Se tiver utilizado um valor único com ClearCollect, este será o campo Value, como neste exemplo:
    First( VariableName ).Value

Vamos recriar a nossa máquina de somar com uma coleção:

  1. Adicione um controlo de Entrada de texto, denominado TextInput1, e dois botões, Button1 e Button2.

  2. Defina a propriedade Text de Button1 como "Add" e defina a propriedade Text de Button2 como "Clear".

  3. Para atualizar o total corrente sempre que um utilizador seleciona o botão Adiciona, defina a respetiva propriedade OnSelect como esta fórmula:

    Collect( PaperTape, TextInput1.Text )

    A simples existência desta fórmula estabelece PaperTape como uma coleção que mantém uma tabela de cadeias de texto de uma única coluna. Pode referenciar PaperTape em qualquer parte desta aplicação. Sempre que um utilizador abre esta aplicação, PaperTape é uma tabela vazia.

    Quando esta fórmula é executada, adiciona o valor novo ao fim da coleção. Uma vez que estamos a adicionar um valor único, Collect coloca-o automaticamente numa tabela de coluna única e o nome de coluna é Value, que vamos utilizar mais tarde.

    Propriedade OnSelect do botão Adicionar

  4. Para limpar o registo em papel quando o utilizador seleciona o botão Clear, defina a respetiva propriedade OnSelect como esta fórmula:

    Clear( PaperTape )

    Propriedade OnSelect do botão Limpar

  5. Para apresentar o total corrente, adicione uma etiqueta e defina a respetiva propriedade Text como esta fórmula:

    Sum( PaperTape, Value )

    Propriedade texto da etiqueta

  6. Para executar a máquina de somar, prima F5 para abrir a Pré-visualização, introduza números no controlo de entrada de texto e selecione botões.

    O controlo de entrada de Texto mostra um valor e a etiqueta mostra o total a executar

  7. Para voltar à área de trabalho predefinida, prima a tecla Esc.

  8. Para apresentar o registo em papel, insira um controlo de Tabela de dados e defina a respetiva propriedade Items como esta fórmula:

    PaperTape

    No painel direito, selecione Editar campos e, em seguida, selecione Adicionar campo, selecione a coluna Valor e, em seguida, selecione Adicionar para o mostrar.

    Tabela de dados que mostra os valores adicionados à coleção

  9. Para ver os valores na sua coleção, selecione Collections, no menu Ficheiro.

    Pré-visualizar a coleção de PaperTape

  10. Para armazenar e obter a sua coleção, adicione mais dois controlos de botão e defina as suas propriedades Texto como Load (Carregar) e Save (Guardar). Defina a propriedade OnSelect do botão Load (Carregar) como esta fórmula:

    Clear( PaperTape ); LoadData( PaperTape, "StoredPaperTape", true )

    Tem de limpar a coleção primeiro, pois LoadData vai acrescentar os valores armazenados ao final da coleção.

    Propriedade OnSelect do botão Carregar

  11. Defina a propriedade OnSelect do botão Guardar para esta fórmula:

    SaveData( PaperTape, "StoredPaperTape" )

    Propriedade OnSelect* do botão Guardar

  12. Prima a tecla F5 para pré-visualizar outra vez, introduza números no controlo de entrada de texto e selecione botões. Selecione o botão Save. Feche e atualize a aplicação e, em seguida, selecione o botão Load para atualizar a coleção.

Nota

As funções SaveData e LoadData funcionam em Power Apps Mobile, mas não no Power Apps Studio ou no web player para Power Apps.

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