Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A következőkre vonatkozik: Vászonalapú alkalmazások
Copilot Studio
Desktop folyamatok
Modellalapú alkalmazások
Power Platform CLI
Dataverse-függvények
Módosít vagy létrehoz egy vagy több rekordot egy adatforrásban, vagy egyesíti a rekordokat az adatforráson kívül.
A függvény használatával Patch összetett helyzetekben módosíthatja a rekordokat, például ha olyan frissítéseket végez, amelyek nem igényelnek felhasználói beavatkozást, vagy több képernyőre kiterjedő űrlapokat használnak.
Ha az egyszerű változtatásokhoz könnyebben szeretné frissíteni a adatforrás bejegyzéseit, használja inkább az Űrlap szerkesztése vezérlőt. Amikor hozzáad egy Űrlap szerkesztése vezérlőt, akkor egy kitöltendő űrlapot biztosít a felhasználóknak, majd egy adatforrásba menti a módosításokat. További információ: Az adatűrlapok megismerése.
Ebből a videóból megtudhatja, hogyan használhatja a függvényt Patch :
Overview
A függvény használatával Patch módosíthatja egy adatforrás egy vagy több rekordját. Frissíti az adott mezők értékeit anélkül, hogy más tulajdonságokat érintene. Az alábbi képlet például megváltoztatja a Contoso nevű ügyfélhez tartozó telefonszámot:
Patch( Customers, LookUp( Customers, Name = "Contoso" ), { Phone: "1-212-555-1234" } )
Rekordok létrehozásához használja Patch az Alapértelmezettek függvénnyel. Ennek köszönhetően akár egyetlen képernyőről elvégezhető a rekordok létrehozása és szerkesztése. Az alábbi képlet például a Contoso nevű ügyfélhez hoz létre egy rekordot:
Patch( Customers, Defaults( Customers ), { Name: "Contoso" } )
Note
Ha egy gyűjteményt egy adatforrásból származó rekordot használsz alapértelmezett értékekkel, a patch művelet frissíti a gyűjteményt mind a megadott patch értékekkel, mind az adatforrás alapértelmezett értékeivel. A patch utasítás DataSource és az Defaults függvény DataSource egységnek egyeznie kell, hogy új rekordot hozzanak létre.
Még ha nem is használ adatforrást, Patch két vagy több rekord egyesíthető. Ez a képlet például két rekordot egyesít egy olyanná, amely a Contoso telefonszámát és helyét is azonosítja:
Patch( { Name: "Contoso", Phone: "1-212-555-1234" }, { Name: "Contoso", Location: "Midtown" } )
Description
Rekordok módosítása vagy létrehozása adatforrásban
A függvény adatforrással történő használatához először az adatforrást, majd egy alaprekordot kell megadni:
- Egy rekord módosításához az alap rekordnak egy adatforrásból kell származnia. Az alap rekordot egy galéria Items tulajdonságán keresztül szerezheted meg, egy kontextusváltozóba helyezheted, vagy más útvonalon keresztül szerezheted meg. De képesnek kell lenned visszakövetni az alap rekordot az adatforrásig. Ez a követelmény azért fontos, mert a nyilvántartás további információkat tartalmaz, amelyek segítenek újra megtalálni a nyilvántartást módosításra.
- Rekord létrehozásához a Defaults függvénnyel lehet alapértelmezett értékekkel rendelkező alaprekordot létrehozni.
Ezt követően meg kell adni legalább egy módosítási rekordot, amely új tulajdonságértékeket tartalmaz az alaprekordban szereplők felülírásához. A módosítási rekordok feldolgozása az argumentumlista elejétől a végéig sorrendben történik, és a későbbi tulajdonságértékek felülírják a korábbiakat.
A visszaadott Patch érték a módosított vagy létrehozott rekord. Ha létrehozott egy rekordot, a visszatérési érték tartalmazhat olyan tulajdonságokat, amelyeket az adatforrás automatikusan létrehozott. A visszatérési érték azonban nem ad értéket a kapcsolódó tábla mezőinek.
Például a Set(MyAccount, Patch(Accounts, First(Account), 'Account Name': "Example name"));, majd a MyAccount.'Primary Contact'.'Full Name' képletet használja. Ebben az esetben nem kaphatja meg a teljes nevet. Ehelyett egy kapcsolódó tábla mezőinek eléréséhez használjon külön keresést, például:
LookUp(Accounts, Account = MyAccount.Account).'Primary Contact'.'Full Name'
Adatforrás frissítésekor egy vagy több probléma merülhet fel. Használja az IfError és az IsError függvényt a visszatérési értékkel Patch a hibák észleléséhez és megválaszolásához, ahogyan azt a Hibakezelés írja le. Továbbá az Errors függvénnyel azonosíthatók és megvizsgálhatók a hibák, ahogyan azt az adatforrások használatát ismertető cikk leírja.
A kapcsolódó függvények közé tartozik az Update függvény is, amely egy teljes rekord lecserélésére használható, valamint a Collect függvény, amely rekordok létrehozására szolgál. Az UpdateIf függvénnyel több rekord megadott tulajdonságai módosíthatók valamilyen feltétel alapján.
Rekordkészlet módosítása vagy létrehozása adatforrásban
Egyetlen hívással Patch több rekordot is létrehozhatsz vagy módosíthatsz.
Ahelyett, hogy egyetlen alap rekordot adnánk át, a második argumentumban adj meg egy táblázatot az alaprekordokról. A változás rekordokat is megadja egy táblázatban, az alap rekordokkal egy-egy arányban egyeztetve. A módosítási táblákban szereplő rekordok számának meg kell egyeznie az alaptáblában található rekordok számával.
Így használva Patch a visszaküldési érték is egy táblázat, ahol minden rekord egyesével egyezik az alap- és változásrekordokkal.
Rekordok egyesítése adatforráson kívül
Meg kell adni legalább két, egyesíteni kívánt rekordot. A függvény a rekordokat az argumentuslista elejétől a végéig sorrendben dolgozza fel, a későbbi tulajdonságok értékei felülírják a korábbikat.
Patch visszaadja az egyesített rekordot, és nem módosítja az argumentumait vagy rekordjait egyetlen adatforrásban sem.
Syntax
Rekordok módosítása vagy létrehozása adatforrásban
Patch( DataSource, BaseRecord, ChangeRecord1 [, ChangeRecord2, ... ])
- DataSource – Kötelező. Az adatforrás, amely a módosítani kívánt rekordot tartalmazza, vagy amely a létrehozandó rekordot tartalmazni fogja.
- BaseRecord – Kötelező. A módosítani vagy létrehozni kívánt rekord. Ha a rekord egy adatforrásból származik, a függvény megtalálja és módosítja a rekordot. Ha az Defaults eredményt használják, a függvény rekordot hoz létre. A patch utasítás adatforrásának és az Alapértelmezettek függvény adatforrásának egyeznie kell egy új rekord létrehozásához.
- ChangeRecords – Kötelező. Egy vagy több olyan rekord, amely a BaseRecord elemben módosítandó tulajdonságokat tartalmazza. A függvény folyamatai a argumentuslista elejétől a végéig sorrendben változtatják a rekordokat, a későbbi tulajdonságok pedig felülírják a korábbikat.
Rekordkészlet módosítása vagy létrehozása adatforrásban
Patch( DataSource, BaseRecordsTable, ChangeRecordTable1 [, ChangeRecordTable2, ... ] )
- DataSource – Kötelező. Az adatforrás, amely a módosítani kívánt rekordokat tartalmazza, vagy amely a létrehozandó rekordokat tartalmazni fogja.
- BaseRecordTable – Kötelező. A módosítani vagy létrehozni kívánt rekordok táblája. Ha a rekord egy adatforrásból származik, a függvény megtalálja és módosítja a rekordot. Ha az Defaults eredményt használják, a függvény rekordot hoz létre. A patch utasítás adatforrásának és az Alapértelmezettek függvény adatforrásának egyeznie kell egy új rekord létrehozásához.
- ChangeRecordTables – Kötelező. Egy vagy több olyan rekordtábla, amely a BaseRecordTable rekordjai esetében módosítandó tulajdonságokat tartalmazza. A függvény folyamatai a argumentuslista elejétől a végéig sorrendben változtatják a rekordokat, a későbbi tulajdonságok pedig felülírják a korábbikat.
Merge records
Patch( Rekord1, Rekord2 [, ...] )
- Rekordok – kötelező. Legalább két, egyesíteni kívánt rekord. A függvény a rekordokat sorrendben dolgozza fel az argumentuslista elejétől a végéig, a későbbi tulajdonságok pedig felülírják a korábbikat.
Examples
Rekordok módosítása vagy létrehozása (adatforrásban)
Ezekben a példákban módosíthatsz vagy létrehozsz egy rekordot egy IceCream nevű adatforrásban. Az adatforrás tartalmazza az adatokat ebben a táblázatban , és automatikusan generálja az IDoszlopban lévő értékeket:
Ha szeretnél létrehozni egy memóriabeli verziót ebből az adatforrásból, hogy kipróbálhasd ezeket a példákat, értékeld ezt a képletet:
ClearCollect( IceCream,
{ ID: 1, Flavor: "Chocolate", Quantity: 100 },
{ ID: 2, Flavor: "Vanilla", Quantity: 200 }
)
| Formula | Description | Result |
|---|---|---|
|
Patch( Fagylalt, LookUp( IceCream, Flavor = "Csokoládé" ), { Quantity: 400 } ) |
Módosít egy rekordot az IceCream adatforrásban:
|
{ ID: 1, Flavor: "Csokoládé", Quantity: 400 } A IceCream adatforrásban található Csokoládé bejegyzés módosított. |
| Patch( IceCream, Defaults ( IceCream ), { Íz: "Eper" } ) | Létrehoz egy rekordot az IceCream adatforrásban:
|
{ ID: 3, Íz: "Eper", Mennyiség: 0 } A IceCream adatforrásban található Strawberry bejegyzés létrejött. |
Az előző képletek értékelése után az adatforrás a következő értékekkel ér véget:
Rekordok egyesítése (adatforráson kívül)
| Formula | Description | Result |
|---|---|---|
| Patch( { Név: "James", Pontszám: 90 }, { Név: "Jim", Átment: true } ) | Két rekord egyesítése adatforráson kívül:
|
{ Név: "Jim", Pontszám: 90, Átment: igaz } |
Módosítsa vagy hozzon létre egy rekordkészletet (adatforrásban)
Ha Patch táblázatokat használsz egyetlen rekord helyett, egyetlen hívásban több rekordot is létrehozhatsz vagy módosíthatsz. A visszaadó érték egy olyan rekordtáblázat, amely egyesével egyezik a bemeneti táblákkal.
Ez a példa egyszerre frissíti a mennyiséget több ízre a IceCream adatforrásban:
Patch(
IceCream,
Table(
{ ID: 1, Flavor: "Chocolate", Quantity: 150 },
{ ID: 2, Flavor: "Vanilla", Quantity: 200 }
),
Table(
{ Quantity: 300 },
{ Quantity: 400 }
)
)
Az eredmény egy táblázat a frissített rekordokkal: { ID: 1, Flavor: "Chocolate", Quantity: 300 } és { ID: 2, Flavor: "Vanilla", Quantity: 400 }.
Ez a példa több új rekordot hoz létre az alapértelmezésekkel:
Patch(
IceCream,
Table( Defaults( IceCream ), Defaults( IceCream ) ),
Table(
{ Flavor: "Mint", Quantity: 60 },
{ Flavor: "Peach", Quantity: 80 }
)
)
Note
Táblázatoknál Patch a changetable rekordjainak számának egyeznie kell az alaptáblázat rekordjainak számával. Ellenkező esetben hiba történik.
Több rekord módosítása esetén hibák észleléséhez használd az IfError-t.
IfError a preferált mechanizmus, és működik a Power FX hosztokon:
IfError(
Patch(
IceCream,
baseRecords,
changeRecords
),
Notify( "Some records failed to update: " & FirstError.Message, NotificationType.Error )
)
Patch Dataverse oszloptípusokkal
Az alábbi példák kifejezetten a Microsoft Dataverse adatforrásokra vonatkoznak. A rekordformák adatforrásonként változnak (például a SharePoint és az SQL Server különböző formátumúak).
Választási oszlop: A Choice oszlop beállításához közvetlenül az enum értéket használjuk. Ez a példa egy Státuszválasztási oszlopot állít be egy Számlák táblázatban:
Patch(
Accounts,
LookUp( Accounts, 'Account Name' = "Contoso" ),
{ 'Status': 'Status (Accounts)'.Active }
)
Keresőoszlop: Keresőoszlop beállításához adj meg egy rekordot a kapcsolódó tábla elsődleges kulcsával. Ez a példa a Számlák rekordján található Elsődleges Kapcsolatkeresést mutatja be:
Patch(
Accounts,
LookUp( Accounts, 'Account Name' = "Contoso" ),
{ 'Primary Contact': LookUp( Contacts, 'Full Name' = "John Smith" ) }
)
Note
Ezek az oszlop-típusú példák Dataverse-specifikusak. Más adatforrások, mint például a SharePoint vagy az SQL Server, eltérő rekordformákat igényelhetnek hasonló oszloptípusokhoz. A megfelelő formátumért lásd a dokumentációt a konkrét adatforrásodhoz.
Delegáció olyan képletekben, amelyek Patch
Maga a Patch függvény nem jogosult delegálni , mert az adatforrásra ír, nem pedig lekérdezi. Azonban delegációs figyelmeztetések megjelenhetnek olyan képletekben, amelyek akkor jelennek Patch meg, ha a képlet rekordválasztási része (például Filter, LookUp vagy ForAll) olyan lekérdezést tartalmaz, amely meghaladja az adatforrás delegálási korlátait.
Amikor egy képletben látsz delegációs figyelmeztetést, amely tartalmazza Patcha , ellenőrizd, hogy a figyelmeztetés az adatlekérési függvényekre vonatkozik-e, nem pedig magára Patch . További információért a delegációról lásd: Értsd meg a delegációt egy canvas alkalmazásban.
Gyakori hibák a Patch függvényrel
A funkció használatakor Patch hibák előfordulhatnak adatforrás-kapcsolat, jogosultságok vagy adatütközések miatt. Használdaz IfError és IsError funkciókat a hibák észlelésére és a megfelelő reagálásra.
"Hálózati hiba funkció használatakor Patch ": Ez a hiba általában azt jelzi, hogy az alkalmazás nem éri el az adatforrást. Gyakori okok közé tartozik az internetkapcsolat elvesztése, az adatforrás ideiglenesen elérhetetlensége, vagy a jelenlegi felhasználó számára nem megfelelő jogosultságok. Csomagold be a Patch hívást az IfErrorba , hogy értelmes üzenetet biztosítson a felhasználóknak.
"Ütközések vannak a szerveren lévő változásokkal": Ez a hiba akkor fordul elő, amikor egy másik felhasználó vagy folyamat módosítja ugyanazt a rekordot az alkalmazás olvasása és a módosítás írása között. Frissítsd az adatforrást a Refresh függvény hívásával, és próbáld meg újra.
Engedélyhibák: Ha a felhasználónak nincs engedélye rekordok létrehozására vagy módosítására az adatforrásban, a Patch hívás meghibásodik. Használd az IfError-t az engedélyhez kapcsolódó hibák elkapására és a felhasználó irányítására.
Általános hibakezelési mintákért lásd: Hibakezelés.
Az As vagy a ThisRecord használata
Használd az As vagy ThisRecord kulcsszót a képletedben, hogy elkerüld a kétértelmű értékelési kontextust.
A következő példában vegyük az állítás első LookupIf részét.
(OrderID = A[@OrderID])Várhatóan összehasonlítják a OrderIdLookup hatókörben lévő gyűjteményt ForAllOrderIdA a terjedelmben. Ebben az esetben valószínűleg A[@OrderId] helyi paraméterként szeretnéd feloldani. De ez kétértelmű.
Power Apps jelenleg a bal oldalt OrderId, valamint a jobb oldalt A[@OrderId] egy mezőként értelmezi a Lookup távcsőben. Ezért Lookup mindig megtalálja az első sort, [dbo].[Orders1] mert a feltétel mindig igaz (vagyis bármely sor OrderId egyenlő önmagával).
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"
}
)
)
)
Az As vagy a ThisRecord használata
Lehetőség szerint használd az As operátort vagy a ThisRecord kulcsszót a bal oldal egyértelművé tételéhez. Ahogy az előző esetben is ajánlott.
Ha a képleted több scope-ot használ , ForAllFilter, és Lookup ugyanazon adatforráson vagy táblán, akkor a scope paraméterek máshol ütközhetnek ugyanazzal a mezővel. Ezért használd az As operátort vagy a ThisRecord rendszert a mezőnev megoldására, és elkerüld a kétértelműséget.
Például az alábbi példában az As operátorral lehet egyértelműsíteni.
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"
}
)
)
)
Másik lehetőségként a ThisRecord is használható ugyanerre a célra.
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"
}
)
)
)
Az As operátor és a ThisRecord használatáról többet szeretne megtudni a Operátorok cikkben.