Patch függvény
A következőkre vonatkozik: Vászonalapú alkalmazások
Modellvezérelt alkalmazások
Power Platform CLI Asztali
folyamatok
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 Patch függvény rekordok módosítására használható összetett helyzetekben, például amikor olyan frissítéseket végez, amelyek nem igényelnek felhasználói műveleteket, vagy több képernyős ű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.
A videó megnézve megismeri a Patch függvény használatát:
Áttekintés
A Patch függvénnyel az adatforrás egy vagy több rekordja módosítható. Adott mezők értékeinek megváltoztatása a többi tulajdonságot nem befolyásolja. Az alábbi képlet például megváltoztatja a Contoso nevű ügyfélhez tartozó telefonszámot:
Patch( Customers, First( Filter( Customers, Name = "Contoso" ) ), { Phone: "1-212-555-1234" } )
Rekordokat a Patch és a Defaults függvények együttes használatával lehet létrehozni. 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" } )
A Patch adatforrás használata nélkül is alkalmazható két vagy több rekord egyesítéséhez. 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" } )
Ismertetés
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:
- A rekord módosításához az alaprekordnak adatforrásból kell származnia. Az alaprekord származhat egy katalógus Elemek tulajdonságából, egy környezeti változóból, illetve egyéb elérési útvonallal is rendelkezhet. Az alaprekordnak azonban mindig visszavezethetőnek kell lennie az adatforrásra. Ez azért fontos, mert a rekord további információkat tartalmaz arra az esetre, ha ismét meg kell keresni módosítás céljából.
- 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 Patch visszaadott értéke a módosított vagy létrehozott rekord. Rekord létrehozása esetén a visszaadott érték az adatforrás által automatikusan létrehozott tulajdonságokat tartalmazhat. 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 hibák fordulhatnak elő. Használja az IfError és IsError függvényeket a Patch függvény által visszaadott értékkel a hibák észleléséhez és kezeléséhez, amint azt a Hibakezelés című szakasz is ismerteti. 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
A javítás több rekord létrehozására vagy módosítására is használható egyetlen hívással.
Egyetlen alaprekord átadása helyett alaprekordok egy táblája adható meg a második argumentumban. A módosítási rekordok egy táblában is szerepelnek, ahol egy az egyhez társítással megfeleltethetők az alaprekordoknak. 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.
A Patch ily módon történő használata esetén a visszaadott érték szintén egy olyan tábla, ahol az egyes rekordok egy az egyhez társítással megfeleltethetők az alap- és módosítási rekordoknak.
Rekordok egyesítése adatforráson kívül
Meg kell adni legalább két, egyesíteni kívánt rekordot. A 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 javítás visszaadja az egyesített rekordot, és nem módosítja annak argumentumait vagy rekordjait egyetlen adatforrásban sem.
Szintaxis
Rekordok módosítása vagy létrehozása adatforrásban
Javítás( 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. Az adatforrásból származó rekordokat a rendszer megkeresi és módosítja. A Defaults eredményének használata esetén létrejön egy rekord.
- ChangeRecords – Kötelező. Egy vagy több olyan rekord, amely a BaseRecord elemben módosítandó tulajdonságokat tartalmazza. 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.
Rekordkészlet módosítása vagy létrehozása adatforrásban
Javítás( 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. Az adatforrásból származó rekordokat a rendszer megkeresi és módosítja. A Defaults eredményének használata esetén létrejön egy rekord.
- ChangeRecordTables – Kötelező. Egy vagy több olyan rekordtábla, amely a BaseRecordTable rekordjai esetében módosítandó tulajdonságokat tartalmazza. 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.
Bejegyzések összefésülése
Javítás( Rekord1; Rekord2 [; ...] )
- Rekordok – kötelező. Legalább két, egyesíteni kívánt rekord. A 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.
Példák
Rekordok módosítása vagy létrehozása (adatforrásban)
Az alábbi példákban a Jégkrém nevű adatforrásban fogunk rekordot létrehozni vagy módosítani. Az adatokat ez a tábla tartalmazza, az Azonosítóoszlop értékei pedig automatikusan jönnek létre:
Képlet | Description | Result |
---|---|---|
Tapasz( Fagylalt, LookUp( IceCream, Flavor = "Csokoládé" ), { Quantity: 400 } ) |
Módosít egy rekordot az IceCream adatforrásban:
|
{ ID: 1, Flavor: "Csokoládé", Quantity: 400 } Az IceCream adatforrás Csokoládé bejegyzése módosult. |
Patch( IceCream, Defaults( IceCream ), { Íz: "Eper" } ) | Létrehoz egy rekordot az IceCream adatforrásban:
|
{ ID: 3, Flavor: "Strawberry", Quantity: 0 } Az IceCream adatforrás Eper bejegyzése létrejött. |
A korábbi képletek kiértékelése után az adatforrás végleges értékei a következők:
Rekordok egyesítése (adatforráson kívül)
Képlet | Ismertetés | Eredmény |
---|---|---|
Patch( { Név: "James", Pontszám: 90,Név } { : "Jim", Megfelelt: igaz } ) | Két rekord egyesítése adatforráson kívül:
|
{ Name: "Jim", Score: 90, Passed: true } |
Az As vagy a ThisRecord használata
Az As vagy a ThisRecord kulcsszó használata a képletben elkerüli a kétértelmű értékelési környezetet.
Az alábbi példában érdemes megfontolni az If
utasításban szereplő első keresést.
(OrderID = A[@OrderID])
várhatóan összehasonlítja OrderId
a keresési hatókört a OrderId
hatókörben A
lévő gyűjtemény ForAll
értékkel. Ebben az esetben valószínűleg helyi paraméterként kívánja feloldani a A[@OrderId]
elemet. De ez nem egyértelmű.
Power Apps jelenleg a bal oldali OrderId
elemet és a jobb oldalt A[@OrderId]
elemet a keresési hatókör egyik mezőjének értelmezi. Ezért a keresés mindig megtalálja az első sort itt: [dbo].[Orders1]
, mert a feltétel mindig igaz (vagyis bármely sor OrderId
értéke megegyezik ö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
Amikor csak lehetséges, használja az As operátort vagy a ThisRecord lehetőséget, hogy megkülönböztesse a bal oldalt. Ahogy a fenti forgatókönyv esetében ajánlott.
Ha a képlet több hatókört használ a ForAll
, a Filter
és a Lookup
alkalmazásával ugyanazon adatforráson vagy táblán, előfordulhat, hogy a hatóköri paraméterek esetleg ütköznek ugyanazzal a mezővel máshol. Ezért ajánlott az As operátor vagy a ThisRecord használata a mezőnév feloldásához és a kétértelműség elkerüléséhez.
Például az As operátor használatával feloldható az ellentmondás az alábbi példában.
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"
}
)
)
)
Ha többet szeretne megtudni az As operátor és a ThisRecord használatáról, lásd az Operátorok cikket.