Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Si applica a: App canvas Flussi desktop
di Copilot Studio
App basate su modello Funzioni dell'interfaccia
della riga di comando di Power Platform
Dataverse
Modifica o crea uno o più record in un'origine dati oppure unisce record esterni a un'origine dati.
Usare la Patch funzione per modificare i record in situazioni complesse, ad esempio quando si eseguono aggiornamenti che non richiedono alcuna interazione dell'utente o usare moduli che si estendono su più schermate.
Per aggiornare i record in un origine dati più facilmente per semplici modifiche, utilizzare invece il controllo Edit form. Quando si aggiunge un controllo Edit form, si fornisce agli utenti un modulo da compilare e in cui salvare le modifiche a un'origine dati. Per altre informazioni, vedere Informazioni sui moduli dati.
Guardare questo video per informazioni su come usare la Patch funzione:
Panoramica
Usare la Patch funzione per modificare uno o più record di un'origine dati. I valori di campi specifici vengono modificati senza alcun effetto sulle altre proprietà. Questa formula, ad esempio, modifica il numero di telefono per un cliente denominato Contoso:
Patch( Customers, LookUp( Customers, Name = "Contoso" ), { Phone: "1-212-555-1234" } )
Usare Patch con la funzione Defaults per creare record. Usare questo comportamento per compilare un singola schermata per la creazione e modifica di record. Questa formula, ad esempio, crea un record per un cliente denominato Contoso:
Patch( Customers, Defaults( Customers ), { Name: "Contoso" } )
Annotazioni
Quando si applica una patch a una raccolta usando un record da un'origine dati con valori predefiniti, l'operazione patch aggiorna la raccolta con i valori patch specificati e i valori predefiniti dell'origine dati. L'origine dati dell'istruzione patch e l'origine dati della funzione Defaults devono corrispondere per creare un nuovo record.
Anche se non si usa un'origine dati, è possibile usare Patch per unire due o più record. Ad esempio, questa formula unisce due record in un unico record che identifica sia il numero di telefono sia la località per Contoso:
Patch( { Name: "Contoso", Phone: "1-212-555-1234" }, { Name: "Contoso", Location: "Midtown" } )
Descrizione
Modificare o creare un record in un'origine dati
Per usare questa funzione con un'origine dati, specificare l'origine dati e quindi specificare un record di base:
- Per modificare un record, un record di base deve provenire da un'origine dati. Il record di base potrebbe essere stato inserito nella proprietà Items di una raccolta, inserito in una variabile di contesto o attraverso un altro percorso. In ogni caso, è possibile rilevare l'origine dati del record di base. Questo aspetto è importante perché il record include informazioni aggiuntive per trovare di nuovo il record per la modifica.
- Per creare un record, usare la funzione Defaults che crea un record di base con valori predefiniti.
Specificare quindi uno o più record di modifiche che contengono nuovi valori di proprietà che eseguono l'override dei valori di proprietà del record di base. I record di modifiche vengono elaborati seguendo l'ordine dall'inizio alla fine dell'elenco degli argomenti, in cui gli ultimi valori delle proprietà sovrascrivono i valori precedenti.
Il valore restituito di Patch è il record modificato o creato. Se è stato creato un record, il valore restituito potrebbe includere proprietà generate automaticamente dall'origine dati. Tuttavia, il valore restituito non fornisce un valore per i campi di una tabella correlata.
Ad esempio, si utilizza Set(MyAccount, Patch(Accounts, First(Account), 'Account Name': "Example name")); e quindi MyAccount.'Primary Contact'.'Full Name'. In questo caso, non è possibile avere un nome completo. Per accedere ai campi di una tabella correlata, utilizza una ricerca separata come:
LookUp(Accounts, Account = MyAccount.Account).'Primary Contact'.'Full Name'
Quando si aggiorna un'origine dati, potrebbero verificarsi uno o più problemi. Usare IfError e IsError con il valore restituito da Patch per rilevare e rispondere agli errori, come descritto nella gestione degli errori . Puoi anche usare la funzione Errors per identificare ed esaminare i problemi, come illustrato nell'articolo relativo all'uso delle origini dati.
Le funzioni correlate includono la funzione Update, che può essere usata per sostituire un intero record, e la funzione Collect, che può essere usata per creare un record. Usare la funzione UpdateIf per modificare proprietà specifiche di più record in base a una condizione.
Modificare o creare un set di record in un'origine dati
Patch può essere usato anche per creare o modificare più record con una singola chiamata.
È possibile infatti specificare una tabella di record di base nel secondo argomento, anziché indicare un record di base singolo. I record di modifiche vengono anche specificati in una tabella, con una corrispondenza uno a uno con i record di base. Il numero di record di ogni tabella di modifiche deve essere identico al numero di record della tabella di base.
Quando si usa Patch in questo modo, il valore restituito è anche una tabella con ogni record corrispondente uno per uno con i record di base e di modifica.
Unire record esterni a un'origine dati
Specificare due o più record da unire. I record vengono elaborati seguendo l'ordine dall'inizio alla fine dell'elenco degli argomenti, in cui gli ultimi valori delle proprietà sovrascrivono i valori precedenti.
Patch restituisce il record unito e non modifica gli argomenti o i record in alcuna origine dati.
Sintassi
Modificare o creare un record in un'origine dati
Patch( DataSource, BaseRecord, ChangeRecord1 [, ChangeRecord2, ... ])
- DataSource: obbligatorio. L'origine dati che contiene il record da modificare o che conterrà il record che si vuole creare.
- BaseRecord – Obbligatorio. Il record da modificare o da creare. Se proviene da un'origine dati, il record viene trovato e modificato. Se viene usato il risultato della funzione Defaults, viene creato un record. L'origine dati dell'istruzione patch e l'origine dati della funzione Defaults devono corrispondere per creare un nuovo record.
- ChangeRecords – Obbligatorio. Uno o più record che contengono le proprietà da modificare in BaseRecord. I record di modifiche vengono elaborati seguendo l'ordine dall'inizio alla fine dell'elenco degli argomenti, in cui gli ultimi valori delle proprietà sovrascrivono i valori precedenti.
Modificare o creare un set di record in un'origine dati
Patch( DataSource, BaseRecordsTable, ChangeRecordTable1 [, ChangeRecordTable2, ... ] )
- DataSource: obbligatorio. L'origine dati che contiene i record da modificare o che conterrà i record che si vuole creare.
- BaseRecordTable – Obbligatorio. La tabella di record da modificare o da creare. Se proviene da un'origine dati, il record viene trovato e modificato. Se viene usato il risultato della funzione Defaults, viene creato un record. L'origine dati dell'istruzione patch e l'origine dati della funzione Defaults devono corrispondere per creare un nuovo record.
- ChangeRecordTables – Obbligatorio. Una o più tabelle di record che contengono proprietà da modificare per ogni record della BaseRecordTable. I record di modifiche vengono elaborati seguendo l'ordine dall'inizio alla fine dell'elenco degli argomenti, in cui gli ultimi valori delle proprietà sovrascrivono i valori precedenti.
Per unire record
Patch( Record1, Record2 [, ...] )
- Record - Obbligatorio. Almeno due record che si vuole unire. I record vengono elaborati seguendo l'ordine dall'inizio alla fine dell'elenco degli argomenti, in cui gli ultimi valori delle proprietà sovrascrivono i valori precedenti.
Esempi
Modificare o creare un record in un'origine dati
In questi esempi verrà modificato o creato un record in un'origine dati, denominata IceCream, che contiene i dati in questa tabella e che genera automaticamente i valori nella colonnaID:
| Formula | Descrizione | Result |
|---|---|---|
|
Patch( IceCream, LookUp( IceCream, Flavor = "Chocolate" ), { Quantity: 400 } ) |
Modifica un record nell'origine dati IceCream:
|
{ ID: 1, Flavor: "Chocolate", Quantity: 400 } La voce Chocolate nell'origine dati IceCream è stata modificata. |
| Patch( IceCream, Defaults( IceCream ), { Flavor: "Strawberry" } ) | Crea un record nell'origine dati IceCream:
|
{ ID: 3, Flavor: "Strawberry", Quantity: 0 } La voce Strawberry nell'origine dati IceCream è stata creata. |
Dopo aver valutato le formule precedenti, l'origine dati restituisce i valori seguenti:
Unire record esterni a un'origine dati
| Formula | Descrizione | Result |
|---|---|---|
| Patch( { Name: "James", Score: 90 }, { Name: "Jim", Passed: true } ) | Unisce due record esterni a un'origine dati:
|
{ Name: "Jim", Score: 90, Passed: true } |
Utilizzo di As o ThisRecord
Utilizzando As o ThisRecord la parola chiave nella formula evita un contesto di valutazione ambiguo.
Nell'esempio seguente, considera la prima ricerca nell'istruzione If.
(OrderID = A[@OrderID]) si prevede di confrontare l' OrderId nell'ambito di ricerca con l' OrderId della raccolta A nell'ambito ForAll . In questo caso, probabilmente vorrai che A[@OrderId] venga risolto come parametro locale. Ma è ambiguo.
Power Apps attualmente interpreta entrambi i parametri OrderId sul lato sinistro e A[@OrderId] sul lato destro come campo nell'ambito di ricerca. Pertanto, la ricerca troverà sempre la prima riga in [dbo].[Orders1] perché la condizione è sempre vera (ovvero, qualsiasi riga OrderId è uguale a se stessa).
ClearCollect(
A,
Filter(
'[dbo].[Orders1]',
OrderId = 8888888
)
);
ForAll(
A,
If(
LookUp(
'[dbo].[Orders1]',
OrderId = A[@OrderId],
"OK"
) = "OK",
Patch(
'[dbo].[Orders1]',
LookUp(
'[dbo].[Orders1]',
OrderId = A[@OrderId]
),
{
OrderName: "val1"
}
),
Patch(
'[dbo].[Orders1]',
Defaults('[dbo].[Orders1]'),
{
OrderName: "val2"
}
)
)
)
Utilizzo di As o ThisRecord
Quando possibile, utilizza l'operatore As o ThisRecord per chiarire le ambiguità del lato sinistro. Come consigliato per lo scenario sopra descritto.
Quando la formula utilizza più ambiti con ForAll, Filter e Lookup sulla stessa origine dati o tabella, è possibile che i parametri dell'ambito possano entrare in conflitto con uno stesso campo altrove. Pertanto, è consigliabile utilizzare l'operatore As o ThisRecord per risolvere il nome del campo ed evitare ambiguità.
Ad esempio, puoi utilizzare l'operatore As per chiarire le ambiguità nell'esempio seguente.
ClearCollect(
A,
Filter(
'[dbo].[Orders1]',
OrderId = 8888888
)
);
ForAll(
A,
If(
LookUp(
'[dbo].[Orders1]' As B,
B.OrderId = A[@OrderId],
"OK"
) = "OK",
Patch(
'[dbo].[Orders1]',
LookUp(
'[dbo].[Orders1]' As C,
C.OrderId = A[@OrderId]
),
{
OrderName: "val1"
}
),
Patch(
'[dbo].[Orders1]',
Defaults('[dbo].[Orders1]'),
{
OrderName: "val2"
}
)
)
)
In alternativa, puoi utilizzare ThisRecord per lo stesso scopo.
ClearCollect(
A,
Filter(
'[dbo].[Orders1]',
OrderId = 8888888
)
);
ForAll(
A,
If(
LookUp(
'[dbo].[Orders1]',
ThisRecord.OrderId = A[@OrderId],
"OK"
) = "OK",
Patch(
'[dbo].[Orders1]',
LookUp(
'[dbo].[Orders1]',
ThisRecord.OrderId = A[@OrderId]
),
{
OrderName: "val1"
}
),
Patch(
'[dbo].[Orders1]',
Defaults('[dbo].[Orders1]'),
{
OrderName: "val2"
}
)
)
)
Per saperne di più sull'utilizzo dell'operatore As e ThisRecord vedi l'articolo Operatori.