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 globale

Per creare la calcolatrice, è necessaria una variabile per mantenga il totale parziale. Le variabili più semplici da utilizzare in PowerApps sono le variabili globali.

Come funzionano le variabili globali:

  • Il valore della variabile globale si imposta con la funzione Set. Set( MyVar, 1 ) imposta la variabile globale MyVar su un valore pari a 1.
  • La variabile globale viene usata facendo riferimento al nome usato con la funzione Set. In questo caso, MyVar restituirà 1.
  • Le variabili globali possono contenere qualsiasi valore, incluse stringhe, numeri, record, e tabelle.

Ricompilare ora la calcolatrice usata in precedenza con una variabile globale:

  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:

    Set( RunningTotal, RunningTotal + Text1 )

    La prima volta che un utente seleziona il pulsante Aggiungi e la formula Set viene chiamata, viene creato l'elemento RunningTotal con un valore predefinito 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:

    Set( 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. Immettere un numero nella casella di testo e premere il pulsante Aggiungi più volte. Al termine, tornare alla creazione premendo il tasto ESC.

  7. Per visualizzare il valore della variabile globale, selezionare il menu File e quindi Variabili nel riquadro a sinistra.

  8. Selezionare la variabile per visualizzare tutte le posizioni in cui è definita e usata.

Tipi di variabili

Esistono tre tipi di variabili in PowerApps:

Tipo di variabile Ambito Descrizione Funzioni
Variabili globali App La più semplice da usare. Contiene un numero, una stringa di testo, un valore booleano, un record, una tabella e così via a cui si può fare riferimento da un punto qualsiasi nell'app. Set
Variabili di contesto Schermata Eccellente per passare valori a una schermata, proprio come i parametri a una procedura in altri linguaggi. Vi si può fare riferimento solo da una schermata. UpdateContext
Navigate
Raccolte App Contiene una tabella a cui si può fare riferimento da un punto qualsiasi nell'app. Consente di modificare il contenuto della tabella piuttosto che impostarla interamente. Può essere salvata nel dispositivo locale per un uso successivo. Collect
ClearCollect
Patch
Update
Remove
SaveData
LoadData
ecc.

Tutte le variabili vengono create in modo implicito quando usate nelle funzioni Set, UpdateContext, Navigate o Collect. Non esistono dichiarazioni esplicite delle variabili così come accade in altri strumenti di programmazione. I tipi delle variabili derivano in modo implicito anche dai valori che vi vengono inseriti.

Tutte le variabili vengono mantenute in memoria durante l'esecuzione dell'app. Dopo aver chiuso l'app, i valori contenuti nelle variabili vengono persi. È possibile archiviare il contenuto di una variabile in un'origine dati usando le funzioni Patch o Collect oppure nel caso di raccolte è possibile archiviarlo nel dispositivo locale con la funzione SaveData. Quando l'app viene caricata per la prima volta, tutte le variabili avranno il valore vuoto.

Usare il nome delle variabili per leggerne il relativo valore. Ad esempio, una volta definita con la funzione Set( MyColor, Red ) è possibile usare semplicemente la variabile MyVar ovunque sia possibile usare un valore di colore, che verrà sostituito con Red. È possibile avere una variabile globale o una raccolta con lo stesso nome di una variabile di contesto. In questo caso, la variabile di contesto avrà la precedenza. È comunque possibile fare riferimento alla variabile globale o alla raccolta usando l'operatore di risoluzione ambiguità @[MyColor].

Creare una variabile di contesto

Si esaminerà ora in che modo si potrebbe creare una calcolatrice usando una variabile di contesto anziché una variabile globale.

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.

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. Immettere un numero nella casella di testo e premere il pulsante Aggiungi più volte. Al termine, tornare alla creazione premendo il tasto ESC.

  7. È possibile impostare il valore di una variabile di contesto durante l'esplorazione di una schermata. Ciò è utile per il passaggio di "contesto" o "parametri" da una schermata a un'altra. Per verificarlo, inserire una nuova schermata e inserire un pulsante con la proprietà OnSelect impostata su:

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

    Selezionando questo pulsante in Screen2 (operazione possibile durante la creazione se si seleziona il pulsante verso l'estremità) verrà visualizzata Screen1 e impostata la variabile di contesto RunningTotal su -1000.

  8. Per visualizzare il valore della variabile di contesto, selezionare il menu File e quindi Variabili nel riquadro a sinistra.

  9. Selezionare la variabile di contesto per visualizzare dove viene definita e usata.

Creare una raccolta

Infine, si esaminerà la creazione della calcolatrice con una raccolta. Dato che una raccolta contiene una tabella facile da modificare, la calcolatrice conserverà un "nastro perforato" di ogni valore al momento dell'immissione.

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 è una sorta di origine dati e, quindi, 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

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:

    Collect( PaperTape, TextInput1.Text )

    Questa formula aggiungerà il nuovo valore alla fine della raccolta. Dato che si sta aggiungendo un singolo valore, Collect lo inserirà automaticamente in una tabella a colonna singola con il nome colonna Valore che verrà usato in un secondo momento.

  4. Per eliminare il nastro perforato quando l'utente seleziona il pulsante Cancella, impostarne la proprietà OnSelect su questa formula:

    Clear( PaperTape )

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

    Sum( PaperTape, Value )

  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 il tasto ESC.

  8. Per visualizzare il nastro perforato, aggiungere un controllo Tabella di dati e impostarne la proprietà Items su questa formula seguente:

    PaperTape

    Sarà anche necessario selezionare le colonne da visualizzare nel riquadro di destra, in questo caso per mostrare la colonna Valore:

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

  10. Per archiviare e recuperare la raccolta, aggiungere due pulsanti supplementari e impostarne il testo su Carica e Salva. Per Carica, impostare la proprietà su OnSelect:

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

    È necessario prima cancellare la raccolta perché LoadData aggiungerà i valori archiviati alla fine della raccolta.

  11. Per Salva, impostare la proprietà su OnSelect:

    SaveData( PaperTape, "StoredPaperTape" )

  12. Per visualizzare di nuovo l'anteprima, premere il tasto F5, immettere i numeri nel controllo di input di testo e selezionare i pulsanti. Selezionare il pulsante Salva. Chiudere e ricaricare l'app e selezionare il pulsante Carica per ricaricare la raccolta.

    Nota: SaveData e LoadData non funzionano quando sono in esecuzione in un web browser, perché è necessario usare lo studio installato in Windows o uno dei lettori per dispositivi mobili.