Funcția Patch
Se aplică pentru: planșă de lucru apps Model-driven apps Power Platform CLI Desktop flows
Modifică sau creează una sau mai multe înregistrări într-o sursă de date sau fuzionează înregistrări în afara unei surse de date.
Utilizați funcția Correcție pentru a modifica înregistrările în situații complexe, cum ar fi când efectuați actualizări care nu necesită interacțiunea utilizatorului sau utilizați formulare care se întind pe mai multe ecrane.
Pentru a actualiza mai ușor înregistrările într-o sursă de date pentru modificări simple, utilizați în schimb controlul Editare formular. Când adăugați un control Editare formular, le oferiți utilizatorilor un formular de completat și apoi salvați modificările la o sursă de date. Pentru mai multe informații, consultați Înțelegeți formularele de date.
Urmăriți acest videoclip pentru a afla cum să utilizați funcția Patch:
Prezentare generală
Utilizați funcția Patch pentru a modifica una sau mai multe înregistrări ale unei surse de date. Valorile unor anumite câmpuri sunt modificate fără a afecta alte proprietăți. De exemplu, această formulă schimbă numărul de telefon pentru un client numit Contoso:
Patch( Customers, First( Filter( Customers, Name = "Contoso" ) ), { Phone: "1-212-555-1234" } )
Utilizați Patch cu funcția Defaults pentru a crea înregistrări. Utilizați acest comportament pentru a crea un singur ecran atât pentru crearea, cât și pentru editarea înregistrărilor. De exemplu, această formulă creează o înregistrare pentru un client numit Contoso:
Patch( Customers, Defaults( Customers ), { Name: "Contoso" } )
Chiar dacă nu lucrați cu o sursă de date, puteți utiliza Patch ca să îmbine două sau mai multe înregistrări. De exemplu, această formulă îmbină două înregistrări în una care identifică atât numărul de telefon, cât și locația pentru Contoso:
Patch( { Name: "Contoso", Phone: "1-212-555-1234" }, { Name: "Contoso", Location: "Midtown" } )
Descriere
Modificați sau creați o înregistrare într-o sursă de date
Pentru a utiliza această funcție cu o sursă de date, specificați sursa de date, apoi specificați o înregistrare de bază:
- Pentru a modifica o înregistrare, înregistrarea de bază trebuie să provină de la o sursă de date. Este posibil ca înregistrarea de bază să fi trecut printr-o proprietate Elemente a galeriei, a fost plasată într-o variabilă de context sau a parcurs altă cale. Însă, puteți urmări înregistrarea de bază înapoi la sursa de date. Acest lucru este important, deoarece înregistrarea va include informații suplimentare pentru a vă ajuta să găsiți din nou înregistrarea din nou pentru modificare.
- Pentru a crea o înregistrare, utilizați funcția Defaults pentru a crea o înregistrare de bază cu valori implicite.
Apoi specificați una sau mai multe înregistrări de modificare, fiecare dintre acestea conține valori de proprietate noi care înlocuiesc valorile proprietății în înregistrarea de bază. Înregistrările de schimbare sunt procesate în formularul de la începutul listei de argumente până la sfârșit, valorile de proprietate ulterioare fiind peste cele anterioare.
Valoarea de returnare a Patch este înregistrarea modificată sau creată. Dacă ați creat o înregistrare, este posibil ca valoarea returnată să includă proprietăți pe care sursa de date le-a generat automat. Cu toate acestea, valoarea returnată nu oferă o valoare pentru câmpurile unui tabel asociat.
De exemplu, utilizați Set(MyAccount, Patch(Accounts, First(Account), 'Account Name': "Example name"));
și apoi MyAccount.'Primary Contact'.'Full Name'
. Nu puteți da un nume complet în acest caz. În schimb, pentru a accesa câmpurile unui tabel asociat, utilizați o căutare separată, cum ar fi:
LookUp(Accounts, Account = MyAccount.Account).'Primary Contact'.'Full Name'
Când actualizați o sursă de date, pot apărea una sau mai multe probleme. Utilizați IfError și IsError cu valoarea de returnare de la Corecție pentru a detecta și a răspunde la erori, așa cum descrie Manipularea erorilor. Puteți să folosiți funcția Errors pentru a identifica și examinați problemele, așa cum Lucrul cu surse de date descrie.
Funcțiile conexe includ funcția Update pentru a înlocui o înregistrare întreagă și funcția Collect pentru a crea o înregistrare. Folosiți funcția UpdateIf pentru a modifica proprietățile specifice ale mai multor înregistrări bazate pe o condiție.
Modificați sau creați un set de înregistrări într-o sursă de date
Patch poate fi folosit și pentru a crea sau modifica mai multe înregistrări cu un singur apel.
În loc să transmiteți o singură înregistrare de bază, în al doilea argument poate fi furnizat un tabel de înregistrări de bază. Înregistrările de modificare sunt furnizate și într-un tabel, corespunzând unu-la-unu cu înregistrările de bază. Numărul de înregistrări din fiecare tabel de modificare trebuie să fie același cu numărul de înregistrări din tabelul de bază.
Atunci când se utilizează Patch în acest mod, valoarea de returnare este, de asemenea, un tabel cu fiecare înregistrare corespunzătoare unu-la-unu cu înregistrările de bază și modificare.
Îmbinați înregistrările în afara unei surse de date
Specificați două sau mai multe înregistrări pe care doriți să le îmbinați. Înregistrările sunt procesate în comanda de la începutul listei de argumente până la sfârșit, valorile de proprietate ulterioare fiind peste cele anterioare.
Patch returnează înregistrarea îmbinată și nu îi modifică argumentele sau înregistrările din nicio sursă de date.
Sintaxă
Modificați sau creați o înregistrare într-o sursă de date
Patch( DataSource, BaseRecord, ChangeRecord1 [, ChangeRecord2, … ])
- DataSource – Obligatoriu. Sursa de date care conține înregistrarea pe care doriți să o modificați sau va conține înregistrarea pe care doriți să o creați.
- BaseRecord – Obligatoriu. Înregistrarea de modificat sau de creat. Dacă înregistrarea provine de la o sursă de date, înregistrarea este găsită și modificată. Dacă este utilizat rezultatul pentru Defaults, se creează o înregistrare.
- ChangeRecord(s) – Obligatoriu. Una sau mai multe înregistrări care conțin proprietăți de modificat în BaseRecord. Înregistrările de schimbare sunt procesate în formularul de la începutul listei de argumente până la sfârșit, valorile de proprietate ulterioare fiind peste cele anterioare.
Modificați sau creați un set de înregistrări într-o sursă de date
Patch( DataSource, BaseRecordsTable, ChangeRecordTable1 [, ChangeRecordTable2, … ] )
- DataSource – Obligatoriu. Sursa de date care conține înregistrările pe care doriți să o modificați sau va conține înregistrările pe care doriți să le creați.
- BaseRecordTable – Obligatoriu. Un tabel de înregistrări de modificat sau creat. Dacă înregistrarea provine de la o sursă de date, înregistrarea este găsită și modificată. Dacă este utilizat rezultatul pentru Defaults, se creează o înregistrare.
- ChangeRecordTable(s) – Obligatoriu. Unul sau mai multe tabele de înregistrări care conțin proprietăți de modificat pentru fiecare înregistrare BaseRecordTable. Înregistrările de schimbare sunt procesate în formularul de la începutul listei de argumente până la sfârșit, valorile de proprietate ulterioare fiind peste cele anterioare.
Îmbinarea înregistrărilor
Patch( Înregistrare1, Înregistrare2 [, …] )
- Înregistrare(e) - Obligatoriu. Cel puțin două înregistrări pe care le doriți să se îmbine. Înregistrările sunt procesate în comanda de la începutul listei de argumente până la sfârșit, valorile de proprietate ulterioare fiind peste cele anterioare.
Exemple
Modificați sau creați o înregistrare (într-o sursă de date)
În aceste exemple, veți modifica sau crea o înregistrare într-o sursă de date, numită IceCream, care conține datele din acest tabel și generează automat valorile din IDcoloană:
Formula | Descriere | Rezultat |
---|---|---|
Plasture (înghețată, LookUp( IceCream, Flavor = "Chocolate" ), { Quantity: 400 } ) |
Modifică o înregistrare în sursa de date Înghețată:
|
{ ID: 1, Flavor: "Chocolate", Quantity: 400 } Introducerea Ciocolată în sursa de date Înghețată a fost modificată. |
Patch( IceCream, Defaults( IceCream ), { Aromă: „Căpșuni” } ) | Creează o înregistrare în sursa de date Înghețată:
|
{ ID: 3, Aromă: "Căpșună", Cantitate: 0 } Introducerea Căpșună în sursa de date Înghețată a fost creată. |
După ce au fost evaluate formulele anterioare, sursa de date se încheie cu aceste valori:
Îmbinați înregistrările (în afara unei surse de date)
Formula | Descriere | Rezultat |
---|---|---|
Patch( { Nume: „James”, Scor: 90 }, { Nume: „Jim”, Aprobat: adevărat } ) | Îmbină două înregistrări în afara unei surse de date:
|
{ Name: "Jim", Score: 90, Passed: true } |
Utilizarea de As sau ThisRecord
Folosind cuvântul cheie As sau ThisRecord din formulă se evită contextul de evaluare ambiguu.
În exemplul de mai jos, luați în considerare prima căutare în afirmația If
. (OrderID = A[@OrderID])
se așteaptă să compare OrderId
din domeniul de aplicare cu OrderId
al colecției A
din domeniul ForAll
. În acest caz, probabil că doriți A[@OrderId]
să fie rezolvat ca parametru local. Dar este ambiguu.
Power Apps în prezent interpretează atât partea stângă OrderId
cât și partea dreaptă A[@OrderId]
ca un câmp în domeniul de căutare. Prin urmare, căutarea va găsi întotdeauna primul rând din [dbo].[Orders1]
deoarece condiția este întotdeauna adevărată (adică orice rând OrderId
este egal cu el însuși.)
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"
}
)
)
)
Utilizând As sau ThisRecord
Ori de câte ori este posibil, utilizați operatorul As sau ThisRecord pentru a dezambiguiza partea stângă. As este recomandat pentru scenariul de mai sus.
Când formula dvs. folosește mai multe scopuri cu ForAll
, Filter
și Lookup
pe același sursă de date sau tabel, este posibil ca parametrii domeniului să se ciocnească cu același câmp în altă parte. Prin urmare, se recomandă utilizarea operatorului As sau ThisRecord pentru a rezolva numele câmpului și a evita ambiguitatea.
De exemplu, puteți utiliza operatorul As pentru a dezambigua în exemplul de mai jos.
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"
}
)
)
)
Alternativ, puteți utiliza ThisRecord în același scop.
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"
}
)
)
)
Pentru a afla mai multe despre utilizarea operatorului As și ThisRecord consultați articolul Operatori.