Se l'utente ha usato altri strumenti di programmazione, come ad esempio Visual Basic o JavaScript, probabilmente si sta chiedendo dove siano le variabili. PowerApps è uno strumento un po' diverso e richiede un altro tipo di approccio. Invece di cercare le variabili, è opportuno chiedersi cosa si farebbe se si lavorasse in Excel.

In altri strumenti si eseguirebbe un calcolo in modo esplicito e si archivierebbe il risultato in una variabile. Tuttavia, sia PowerApps che Excel ricalcolano automaticamente le formule quando i dati di input vengono modificati, pertanto in genere non è necessario creare e aggiornare variabili. Adottando questo approccio quando possibile, è possibile creare, comprendere e gestire l'app molto più facilmente.

In alcuni casi è necessario usare le variabili in PowerApps, che estende il modello di Excel aggiungendo formule di comportamento. Queste formule vengono eseguite quando, ad esempio, un utente seleziona un pulsante. All'interno di una formula di comportamento è spesso utile impostare una variabile da usare in altre formule.

In generale è consigliabile evitare di usare le variabili. Ma a volte solo una variabile può attivare l'operazione che si vuole eseguire.

Tradurre Excel in PowerApps

Excel

Per prima cosa, tenere presente il funzionamento di Excel. Una cella può contenere un valore, come ad esempio un numero o una stringa o una formula che si basa sui valori contenuti in altre celle. Dopo che l'utente immette un valore diverso in una cella, Excel ricalcola automaticamente tutte le formule che dipendono dal nuovo valore. Non è necessario eseguire alcuna attività di programmazione per abilitare questo comportamento.

Excel non contiene variabili. Il valore di una cella che contiene una formula cambia a seconda del relativo input, ma non è possibile ricordare il risultato di una formula e archiviarlo in una cella o in qualsiasi altro elemento. Se si modifica il valore di una cella, l'intero foglio di calcolo può variare e tutti i valori calcolati in precedenza vengono persi. Un utente di Excel può copiare e incollare le celle, ma ciò si svolge sotto il controllo manuale dell'utente e non può verificarsi con le formule.

PowerApps

Le applicazioni create in PowerApps si comportano in modo molto simile a Excel. Anziché aggiornare le celle, è possibile aggiungere controlli ovunque si voglia in una schermata e denominarli per usarli nelle formule.

Ad esempio, è possibile replicare il comportamento di Excel in un'applicazione aggiungendo un controllo Etichetta denominato TextBox1 e due controlli Input di testo denominati TextInput1 e TextInput2. Se poi si imposta la proprietà Text di TextBox1 su TextInput1 + TextInput2, la somma dei numeri contenuti in TextInput1 e TextInput2 verrà sempre visualizzata automaticamente.

Si noti che il controllo TextBox1 è selezionato, quindi la formula Text viene visualizzata nella barra delle formule nella parte superiore dello schermo. Qui troviamo la formula TextInput1 + TextInput2. Questa formula crea una dipendenza tra questi controlli,così come si creano dipendenze tra le celle di una cartella di lavoro di Excel. Modifichiamo il valore di TextInput1:

La formula per TextBox1 è stata ricalcolata automaticamente e visualizza il nuovo valore.

In PowerApps è possibile usare le formule per determinare non solo il valore principale di un controllo, ma anche le proprietà, come ad esempio la formattazione. Nell'esempio seguente una formula per la proprietà Color dell'etichetta visualizzerà automaticamente i valori negativi in rosso. La funzione If dovrebbe risultare familiare dall'uso di Excel:
If( Value(TextBox1.Text) < 0, Red, Black )

A questo punto, se il risultato del calcolo in TextBox1.Text è negativo, il numero verrà visualizzato in rosso:

È possibile usare le formule per un'ampia gamma di scenari:

  • Quando si usa il GPS del proprio dispositivo, un controllo mappa può visualizzare la posizione corrente con una formula che usa Location.Latitude e Location.Longitude. A mano a mano che ci si sposta, la mappa tiene traccia automaticamente della posizione.
  • Altri utenti possono aggiornare le origini dati. Ad esempio, altri membri del team potrebbero aggiornare le voci di un elenco di SharePoint. Quando si aggiorna un'origine dati, tutte le formule dipendenti vengono ricalcolate automaticamente per riflettere i dati aggiornati. Proseguendo con l'esempio, è possibile impostare la proprietà Items di una raccolta con la formula Filter( SharePointList ), che visualizzerà automaticamente il set di record appena filtrato.

Vantaggi

L'uso di formule per compilare applicazioni offre numerosi vantaggi:

  • Se si sa usare Excel, si sa usare PowerApps. Il modello e il linguaggio delle formule sono gli stessi.
  • Se l'utente ha usato altri strumenti di programmazione, saprà quanto codice sarebbe stato necessario per eseguire questi esempi. In Visual Basic sarebbe stato necessario scrivere un gestore eventi per l'evento di modifica per ogni controllo di input di testo. Il codice per eseguire il calcolo in ognuna di queste caselle è ridondante e potrebbe risultare non sincronizzato o potrebbe essere necessario scrivere una subroutine comune. In PowerApps tutto ciò si ottiene con una sola formula di una riga.
  • Per capire da dove arriva il testo di TextBox1, si sa esattamente dove guardare: la formula nella proprietà Text. Non c'è altro modo per agire sul testo di questo controllo. In uno strumento di programmazione tradizionale qualsiasi gestore eventi o subroutine potrebbe modificare il valore dell'etichetta, da qualsiasi punto del programma. In questo modo è molto difficile tenere traccia di dove e quando una variabile è stata modificata.
  • Se l'utente modifica un dispositivo di scorrimento e poi cambia idea, può far tornare il dispositivo di scorrimento al valore originale. Ed è come se non fosse mai stato modificato nulla: l'app visualizza gli stessi valori del controllo, come in precedenza. Non vi sono sperimentazioni o congetture possibili, così come non ve ne sono in Excel.

In generale, se è possibile ottenere un effetto usando una formula, sarà preferibile usarla. Sfruttare il motore di formule in PowerApps è l'approccio più utile.

Sapere quando usare le variabili

Modifichiamo un semplice addizionatore in modo che funzioni come una vecchia calcolatrice, con un totale parziale. Se si seleziona un pulsante Aggiungi, verrà aggiunto un numero al totale parziale. Se si seleziona un pulsante Cancella, il totale parziale verrà reimpostato a zero.

La calcolatrice usa una cosa che non esiste in Excel: un pulsante. In questa applicazione non è possibile usare solo le formule per calcolare il totale parziale perché il suo valore dipende da una serie di azioni eseguite dall'utente. Al contrario, il totale parziale deve essere registrato e aggiornato manualmente. La maggior parte degli strumenti di programmazione archivia queste informazioni in una variabile.

Talvolta è necessaria una variabile perché l'applicazione si comporti nel modo voluto. Tuttavia, è bene tenere presente alcune precisazioni:

  • È necessario aggiornare manualmente il totale parziale. Il ricalcolo automatico non è utilizzabile.
  • Il totale parziale non può essere calcolato in base ai valori di altri controlli. Dipende da quante volte l'utente ha selezionato il pulsante Aggiungi e dal valore del controllo di input di testo presente ogni volta. L'utente ha immesso 77 e ha selezionato Aggiungi due volte, o ha specificato 24 e 130 per ognuna delle addizioni? Non è possibile dirlo, una volta che il totale ha raggiunto 154.
  • Le modifiche al totale possono provenire da percorsi diversi. In questo esempio sia il pulsante Aggiungi che Cancella possono aggiornare il totale. Se l'applicazione non si comporta come ci si aspetta, qual è il pulsante che crea il problema?

Creare una variabile di contesto

Per creare la calcolatrice, è necessaria una variabile per mantenga il totale parziale. Le variabili più semplici in PowerApps sono variabili di contesto.

Come funzionano le variabili di contesto:

  • Le variabili di contesto vengono create e impostate tramite la funzione UpdateContext. Se una variabile di contesto non è presente quando viene aggiornata per la prima volta, verrà creata con un valore predefinito vuoto.
  • Le variabili di contesto vengono create e aggiornate con i record. In altri strumenti di programmazione si usa generalmente "=" per l'assegnazione, come in "x = 1". Per le variabili di contesto, usare invece { x: 1 }. Quando si usa una variabile di contesto, usarne direttamente il nome.
  • È anche possibile impostare una variabile di contesto quando viene visualizzata una schermata, usando la funzione Navigate. Se si considera una schermata come un tipo di procedura o di subroutine, questa procedura è simile al passaggio dei parametri in altri strumenti di programmazione.
  • Ad eccezione di Navigate, le variabili di contesto sono limitate al contesto di una singola schermata, da cui prendono il nome. Non è possibile usarle o impostarle al di fuori di tale contesto.
  • Le variabili di contesto possono contenere qualsiasi valore, incluse stringhe, numeri, record, e tabelle.
  • Quando l'utente chiude un'applicazione, tutte le relative variabili di contesto vengono perse.

Ricompilare ora la calcolatrice usata in precedenza tramite una variabile di contesto:

  1. Aggiungere un controllo di input di testo denominato TextInput1 e due pulsanti, denominati Button1 e Button2.

  2. Impostare la proprietà Text di Button1 su "Aggiungi"e la proprietà Text di Button2 su "Cancella".

  3. Per aggiornare il totale parziale ogni volta che un utente seleziona il pulsante Aggiungi, impostarne la proprietà OnSelect su questa formula:
    UpdateContext( { RunningTotal: RunningTotal + Text1 } ).

    La prima volta che un utente seleziona il pulsante Aggiungi e la formula UpdateContext viene chiamata, viene creato l'elemento RunningTotal con un valore predefinito di vuoto. Nell'addizione verrà considerato come uno zero.

  4. Per impostare il totale parziale su 0 ogni volta che l'utente seleziona il pulsante Cancella, impostarne la proprietà OnSelect su questa formula:
    UpdateContext( { RunningTotal: 0 } )

    Ancora una volta UpdateContext viene usato con la formula UpdateContext( { RunningTotal: 0 } ).

  5. Aggiungere un controllo Etichetta e impostarne la proprietà Text su RunningTotal.

    Questa formula verrà ricalcolata automaticamente e visualizzerà il valore di RunningTotal in base ai cambiamenti, a seconda dei pulsanti che l'utente seleziona.

  6. Visualizzare in anteprima l'app: la calcolatrice funziona come descritto in precedenza.

Creare una raccolta

Per fare riferimento a una variabile da qualsiasi schermata, non solo da quella in cui è stata creata, usare una raccolta per contenere una variabile globale.

Come funzionano le raccolte:

  • Creare e impostare le raccolte usando la funzione ClearCollect. In alternativa è possibile usare la funzione Collect, ma questa richiederà un'altra variabile anziché sostituire quella vecchia.
  • Una raccolta è un'origine dati e, pertanto, una tabella. Per accedere a un singolo valore in una raccolta, usare la funzione First ed estrarre un campo dal record risultante. Se è stato usato un valore singolo con ClearCollect, questo sarà il campo Value, come nell'esempio seguente:
    First( VariableName ).Value
  • Tutte le formule possono accedere a una raccolta da qualsiasi schermata nell'applicazione.
  • Quando un utente chiude l'applicazione, tutte le raccolte vengono svuotate.

Ricreare ora la calcolatrice tramite una raccolta:

  1. Aggiungere un controllo Input di testo denominato TextInput1 e due pulsanti, denominati Button1 e Button2.

  2. Impostare la proprietà Text di Button1 su "Aggiungi" e la proprietà Text di Button2 su "Cancella".

  3. Per aggiornare il totale parziale ogni volta che un utente seleziona il pulsante Aggiungi, impostarne la proprietà OnSelect su questa formula:
    ClearCollect( RunningTotal, First( RunningTotal ).Value + TextInput1 )

    Usando ClearCollect con un valore singolo, verrà creato un record nella raccolta con un solo campo Value. La prima volta che l'utente seleziona il pulsante Aggiungi e viene chiamata la funzione ClearCollect, RunningTotal sarà vuoto. La funzione First restituirà un valore vuoto e verrà considerata come uno zero.

  4. Per impostare il totale parziale su 0 ogni volta che l'utente seleziona il pulsante Cancella, impostarne la proprietà OnSelect su questa formula:
    ClearCollect( RunningTotal, 0 )

    Ancora una volta, ClearCollect viene usato con la formula ClearCollect( RunningTotal, 0 ).

  5. Per visualizzare il totale parziale, aggiungere un'etichetta e impostarne la proprietà Text sulla formula seguente:
    First(RunningTotal).Value

    Questa formula estrae il campo Value del primo record della raccolta RunningTotal. L'etichetta visualizzerà automaticamente il valore di RunningTotal in base ai cambiamenti, a seconda dei pulsanti che l'utente seleziona.

  6. Per eseguire la calcolatrice, premere F5 per visualizzare l'anteprima, immettere i numeri nel controllo di input di testo e selezionare i pulsanti.

  7. Per tornare all'area di lavoro predefinita, premere ESC.

  8. Per visualizzare i valori nella raccolta, selezionare Raccolte dal menu File.