Esercizio: Scrittura nella tabella Expense Report

Completato

Una volta impostati i dati, occorre poter scrivere in due tabelle di dati. Si scriveranno i dati prima nella tabella padre, la tabella Expense Report. Inoltre, l'app non deve solo scrivere nuovi record, ma anche modificare le bozze esistenti e mostrare le informazioni per le note spese che sono già state inviate. Di conseguenza è necessario indicare ai campi quale record viene modificato o visualizzato. Inoltre è necessario specificare se creare un nuovo record. Per completare queste attività, sono richieste alcune variabili.

Uso delle variabili per controllare il flusso di dati

Per usare le variabili per controllare il flusso di dati, effettuare i seguenti passaggi:

  1. Dalla Visualizzazione struttura ad albero selezionare Scr_Welcome.

  2. Selezionare il pulsante Btn_NewExpense_Welcome e aggiungerlo al codice della proprietà OnSelect esistente. Per assicurarsi che le funzioni vengano eseguite contemporaneamente, separarle con un punto e virgola. Pertanto dopo la funzione Navigate() aggiungere ; Set(VarExpenseMode, "New").

    La proprietà OnSelect ora dovrebbe essere: Navigate(Scr_EditExpense); Set(VarExpenseMode, "New")

    Oltre a spostarsi nelle schermate come prima, si procederà a creare una variabile per indicare che è necessario aggiungere un nuovo record.

    Si eseguirà quindi un'operazione simile per Scr_AllExpenses.

  3. Passare alla schermata Scr_AllExpenses e selezionare il controllo NextArrow in Gal_ExpenseReports_AllExpenses.

  4. Aggiornare la proprietà OnSelect con il codice seguente: Set(VarExpenseMode, "Edit"); Set(VarExpense, ThisItem); Navigate(Scr_EditExpense)

    La proprietà OnSelect dovrebbe avere l'aspetto riportato nel seguente screenshot.

    Screenshot di Power Apps che mostra il codice OnSelect per la freccia avanti.

    Questa volta impostare una variabile per indicare la necessità di modificare un record esistente. Impostare inoltre una variabile per specificare quale record è necessario modificare. A questo punto passare a Scr_EditExpense.

  5. Passare alla schermata Scr_EditExpense per osservare queste variabili in azione. Dal pannello Visualizzazione struttura ad albero selezionare Scr_EditExpense.

  6. Impostare la proprietà OnVisible di Scr_EditExpense su If(VarExpenseMode="New", Set(VarExpense, Blank())).

    Questa impostazione fa sì che i campi non contengano i dati di un record precedente. È inoltre possibile usare il pulsante nella schermata di benvenuto. Tuttavia lo scopo dell'apprendimento è scoprire metodi diversi. È possibile che l'istruzione If contenga solo un valore true. In un caso come questo, se si definisce solo un valore true e la condizione è false, non succede nulla.

    Con le variabili selezionate è possibile fare riferimento ai dati esistenti e quindi cancellarli.

  7. Selezionare il campo di input sotto Trip Destination. Questo sarà il campo di input per il testo Txt_Destination_EditExpense. Impostare il valore della proprietà Default su VarExpense.'Trip Destination'.

    Si procederà ora a testare questa variabile. Tornare alla schermata Scr_AllExpenses.

  8. Nella schermata Scr_AllExpenses impostare l'app in modalità di anteprima e selezionare la freccia avanti per un record esistente. Una destinazione dovrebbe essere visualizzata nella schermata Scr_EditExpense cui si è passati dalla schermata Scr_AllExpenses.

  9. Nella schermata Scr_EditExpense selezionare il campo di selezione della data a destra di "Departure Date". Modificare la proprietà DefaultDate per Dte_Departure_EditExpense impostandola su VarExpense.'Departure Date'.

  10. Selezionare il selettore della data per la data di arrivo. Modificare la proprietà DefaultDate per Dte_Arrival_EditExpense impostandola su VarExpense.'Arrival Date'.

Tenere presente che, se si ha difficoltà a trovare una proprietà per un controllo, è sempre possibile trovare tutte le proprietà sulla barra degli strumenti nel menu a discesa Proprietà o nel riquadro Proprietà sul lato destro della schermata.

Dopo avere impostato queste proprietà, le date si comportano esattamente come il campo di destinazione. Tornare alla schermata Scr_AllExpenses e attivare la modalità di anteprima dell'app per testarne la funzionalità.

Ora che l'app funziona correttamente, impostare la logica dell'app per la scrittura dei dati dall'app nelle tabelle.

Configurazione della logica dell'app

In questo scenario e in molti scenari reali, gli utenti usano la funzionalità per aggiungere nuovi elementi e modificare quelli esistenti. Inoltre si consiglia di includere la funzionalità per consentire agli utenti di eseguire il salvataggio come bozza. Questa funzionalità permette loro di lavorare su un elemento per più giorni o sessioni prima di sottoporlo per l'approvazione.

Nella schermata Scr_EditExpense selezionare Btn_SaveAsDraft_EditExpense e modificare la proprietà OnSelect nel modo seguente:

Set(
VarExpense,
Patch(
   'Expense Reports',
   If(
      VarExpenseMode = "New",
      Defaults('Expense Reports'),
      VarExpense
   ),
   {
      'Trip Destination': Txt_Destination_EditExpense.Text,
      'Departure Date': Dte_Departure_EditExpense.SelectedDate,
      'Arrival Date': Dte_Arrival_EditExpense.SelectedDate,
      'Report Status': ['Report Status'.Draft],
      Traveler: LookUp(
            Users,
            'Primary Email' = VarUser.Email
      )
   }
)
)

Spiegazione della funzione Patch

Questo codice è il più complesso scritto finora in questo percorso di apprendimento. Ora si procederà ad analizzarlo per comprenderne il funzionamento.

La prima attività comporta l'uso della funzione Set(). Questa funzione imposta VarExpense in modo che includa eventuali modifiche apportate, compreso il nuovo identificatore univoco se si crea un nuovo elemento.

La funzione Patch() consente di scrivere in un'origine dati tramite la definizione di:

  • Origine - "Expense Report"
  • Record da modificare - If(VarExpenseMode="New",Defaults('Expense Reports'),VarExpense)
  • Record da scrivere - {'Trip Destination':Txt_Destination_EditExpense.Text,'Departure Date':Dte_Departure_EditExpense.SelectedDate,'Arrival Date':Dte_Arrival_EditExpense.SelectedDate,'Report Status':['Report Status'.Draft],Traveler:LookUp(Users,'Primary Email'=VarUser.Email)}

Il record da scrivere è racchiuso in un'istruzione If() che considera la variabile VarExpenseMode. Se l'elemento è Nuovo, usare Defaults('Expense Reports'). Tuttavia, se il record esiste già nella tabella, usare VarExpense per aggiornare l'elemento esistente perché contiene tutte le informazioni di cui ha bisogno Microsoft Dataverse per comprendere quale record viene modificato o aggiornato.

Le informazioni sull'elemento possono essere difficili, ma è un motivo importante per modificare i nomi dei controlli in qualcosa che abbia senso. I campi di testo e data, ad esempio Trip Destination e Departure Date, sono abbastanza semplici da scrivere. Fare riferimento al controllo in cui vengono immesse le informazioni, quindi eseguire una ricerca approfondita nel controllo per individuare le informazioni esatte, ad esempio 'Text' per un input di testo o 'SelectedData' per un selettore di data.

Gli ultimi due campi sono più complicati. Report Status è un campo di scelta e Traveler è una ricerca nella tabella User. Questi argomenti verranno trattati più nel dettaglio in seguito.

Spiegazione del campo di scelta Patch

I campi di scelta in Dataverse richiedono una tabella o un set opzionale di dati. Ciò significa che è necessario aggiungere le parentesi [ ] intorno ai valori. All'interno delle parentesi, immettere nuovamente il nome del campo, seguito da un punto, per recuperare le possibili scelte.

Per comprendere meglio il significato di questa operazione, andare alla proprietà OnSelect per il pulsante Btn_SaveAsDraft_EditExpense.

Laddove il codice si collega a 'Report Status': [Draft], selezionare all'interno di queste parentesi quadre. Notare come il codice si espande trasformandosi in: "['Report Status'.Draft]".

Ora eliminare "Draft" dal codice. Power Apps mostra errori nella formula, perché è previsto un valore selezionato, anziché l'intero set/tabella di valori. Quindi, occorre indicare un valore specifico tra le opzioni disponibili.

Con il codice ['Report Status'.] visualizzato dovrebbero essere visibili alcuni suggerimenti sotto il campo di input della formula fx per alcune possibili selezioni, tra cui:

  • "Awaiting Approval"

  • "Awaiting Reimbursement"

  • Complete

  • Draft

Queste sono le scelte disponibili per questo campo. Quindi, aggiungendo un punto e "Draft" al codice, si indica a Power Apps esattamente quale valore inserire nel campo Dataverse. Nello specifico, Draft diventa l'input come valore per lo "Report Status".

Spiegazione del campo LookUp

Per il campo Traveler individuare l'utente che ha eseguito l'accesso nella tabella Users usando una funzione LookUp(). La funzione LookUp() usa l'origine dati Utenti per individuare il primo record nella tabella adatta alla condizione 'Primary Email' = VarUser.Email. Per questo motivo è importante usare un campo univoco, ad esempio l'e-mail.

Completare questo modulo prendendosi tutto il tempo necessario. Se necessario, provare a scomporre il codice in parti più piccole. Questo approccio contribuisce all'apprendimento, aiutando l'utente a diventare uno sviluppatore Power Apps migliore.

Screenshot di Power Apps che mostra il codice dietro il pulsante Salva come bozza.

La funzionalità Salva come bozza è completa.