Scenario - Duplicazione di una riga
Un requisito comune è quello di consentire a un utente di copiare o clonare una riga della tabella o un set di righe della tabella selezionate. In un'app di Gestione dei progetti, ad esempio, per un utente può essere necessario copiare un progetto precedente per avviarne uno nuovo. L'idea è quella di preservare la riga del progetto esistente e di risparmiare tempo nella creazione della riga del nuovo progetto.
A tale scopo, è possibile aggiungere un nuovo pulsante della barra dei comandi alla griglia principale oppure alla barra dei comandi del modulo principale. È possibile controllare la visibilità del pulsante usando una logica semplice, come mostrare il pulsante solo se nella griglia è selezionata una riga oppure solo se la riga di dati soddisfa le condizioni della logica Power Fx. Si può ad esempio consentire la visualizzazione del pulsante solo se il progetto creato sul valore della colonna ha meno di un anno. Nella logica dell'azione, per creare la nuova riga selezionare solo le colonne della riga di origine che si desidera copiare. Per migliorare la nuova riga, è possibile usare le funzioni di Power Fx, calcolando ad esempio una nuova data di fine del progetto in base alla data corrente.
Il video seguente mostra come implementare un pulsante della barra dei comandi per duplicare una riga.
Nota
Per aumentare la risoluzione del video, selezionare i tre punti, quindi scegliere Qualità e infine una velocità in bit più alta.
Se si implementa il pulsante della barra dei comandi dalla griglia principale oppure da una delle altre viste in cui un utente può selezionare più righe, possono esserci alcune modifiche. Innanzitutto, non è necessario selezionare Self.Selected.State nella formula della visibilità perché sarebbero disponibili solo le righe esistenti. È possibile controllare e mostrare il pulsante solo se almeno una riga è selezionata tramite la formula di visibilità seguente:
If(CountRows(Self.Selected.AllItems)>0,true,false)
Notare l'uso di Self.Selected.AllItems anziché Self.Selected.Item, usato solo quando una singola riga può essere attiva. Self.Selected.AllItems è una tabella dei record attualmente selezionati.
Anche la logica Power Fx per la copia delle righe è diversa perché deve usare la funzione ForAll per copiare tutte le righe nella tabella.
ForAll(Self.Selected.AllItems,
Patch(Projects,Defaults(Projects),
{
Name:Concatenate("Cloned ", ThisRecord.Name),
Description:ThisRecord.Description,
Budget:ThisRecord.Budget*1.10,
'Start Date':DateAdd(Today(),1,Days),
'End Date':DateAdd(Today(),30,Days)
}
)
)
Dopo l'esecuzione della logica del pulsante, la griglia viene aggiornata per mostrare gli elementi creati se soddisfano i criteri di visualizzazione. A differenza della copia di un record singolo, la navigazione verso la nuova riga creata non è pratica. È possibile usare la funzione di notifica per visualizzare il numero di righe copiate aggiungendo il codice seguente dopo la funzione ForAll:
Notify("Copied " & CountRows(Self.Selected.AllItems) & " rows")
Verificare che tale codice non sia aggiunto all'interno di ForAll per evitare di ricevere un messaggio per ogni riga copiata.
Oltre alle due opzioni di cui abbiamo discusso, un'opzione più avanzata consiste nell'usare una pagina personalizzata di Power Apps come finestra di dialogo. Quando si usa questo approccio, il pulsante della barra dei comandi visualizza una pagina personalizzata a cui passa come parametro la riga da copiare. La pagina può quindi interagire con l'utente per consentire un'esperienza più personalizzata per la specifica dei valori copiati e può contenere la logica per completare la copia. L'immagine seguente mostra un esempio di una pagina personalizzata che consente all'utente di fornire il nome del nuovo progetto e di indicare se desidera copiare le attività di quello vecchio:
L'uso di una barra dei comandi per consentire agli utenti di copiare le righe semplifica l'esecuzione della copia da parte degli utenti stessi e ne aumenta l'efficienza, mentre l'uso delle funzioni Power Fx consente di implementare la logica per stabilire quando gli utenti sono autorizzati a eseguire una copia e quali dati copiare.