Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Келесілерге қолданылады: Кенеп бағдарламалары
Copilot Studio
Жұмыс үстелі ағындары
Модельге негізделген бағдарламалар
Power Platform CLI
Dataverse функциялары
Деректер көзінде бір немесе бірнеше жазбаны өзгертеді немесе жасайды, я болмаса деректер көзінен тыс жазбаларды біріктіреді.
Функцияны Patch күрделі жағдайларда, мысалы, пайдаланушының өзара әрекеттесуін қажет етпейтін жаңартуларды жасағанда немесе бірнеше экранды қамтитын пішіндерді пайдаланғанда жазбаларды өзгерту үшін пайдаланыңыз.
Оңай өзгертулер үшін деректер көзіндегі жазбаларды оңайырақ жаңарту үшін оның орнына Пішінді өңдеу басқару элементін пайдаланыңыз. Пішінді өңдеу басқару элементін қосқанда, сіз пайдаланушыларға толтырылатын, содан кейін өзгертулерді деректер көзіне сақтайтын пішінді қамтамасыз етесіз. Қосымша ақпаратты Деректер пішіндерін түсіну бөлімінен қараңыз.
Функцияны қалай пайдалану Patch керектігін білу үшін мына бейнені қараңыз:
Overview
Деректер көзінің бір немесе бірнеше жазбаларын өзгерту үшін функцияны пайдаланыңыз Patch . Ол басқа қасиеттерге әсер етпей нақты өрістердің мәндерін жаңартады. Мысалы, бұл формула Contoso деген тұтынушының телефон нөмірін өзгертеді:
Patch( Customers, LookUp( Customers, Name = "Contoso" ), { Phone: "1-212-555-1234" } )
Patch функциясын пайдаланыңыз. Бұл мінез-құлықты жазбаларды жасау және өңдеу үшін бір экранды жасау үшін пайдаланыңыз. Мысалы, бұл формула Contoso деген тұтынушы үшін жазбаны жасайды:
Patch( Customers, Defaults( Customers ), { Name: "Contoso" } )
Note
Дереккөзден әдепкі мәндері бар жазба арқылы жинақты патчтағанда, патч операциясы деректер көзінен алынған патч мәндері мен әдепкі мәндерімен жинақты жаңартады. Патч операторының DataSource коды мен Defaults функциясының DataSource жаңа жазба жасау үшін сәйкес болуы керек.
Деректер көзімен жұмыс істемесеңіз де, екі немесе одан да көп жазбаларды біріктіру үшін пайдалануға Patch болады. Мысалы, бұл формула екі жазбаны Contoso телефон нөмірін және орнын көрсететін бір жазбаға біріктіреді:
Patch( { Name: "Contoso", Phone: "1-212-555-1234" }, { Name: "Contoso", Location: "Midtown" } )
Description
Деректер көзінде жазбаны өзгерту немесе жасау
Бұл функцияны деректер көзімен бірге пайдалану үшін деректер көзін көрсетіңіз, содан кейін негізгі жазбаны көрсетіңіз:
- Жазбаны өзгерту үшін базалық жазба деректер көзінен алынуы керек. Сіз базалық жазбаны галереяның Items қасиеті арқылы алып, оны контексттік айнымалыға орналастыруға немесе басқа жолмен алуға болады. Бірақ, базалық жазбаны деректер көзіне дейін іздей алуыңыз керек. Бұл талап маңызды, себебі жазбада жазбаны қайта табуға көмектесетін қосымша ақпарат бар.
- Жазбаны жасау үшін әдепкі мәндері бар негізгі жазбаны жасау үшін Defaults функциясын пайдаланыңыз.
Содан кейін әрқайсысы негізгі жазбадағы сипат мәндерін қайта анықтайтын жаңа сипат мәндерін қамтитын бір немесе бірнеше өзгерту жазбасын көрсетіңіз. Өзгерту жазбалары аргументтер тізімінің басынан соңына қарай ретпен өңделеді, кешірек сипат мәндері ертеректерін қайта анықтайды.
Қайтару мәні Patch - бұл сіз өзгерткен немесе жасалған жазба. Егер жазба жасасаңыз, қайтарылған мәнге деректер көзі автоматты түрде жасалған сипаттарды қамтуы мүмкін. Алайда, қайтарылатын мән қатысты кестенің өрістері үшін мән бермейді.
Мысалы, сіз Set(MyAccount, Patch(Accounts, First(Account), 'Account Name': "Example name"));, содан кейін MyAccount.'Primary Contact'.'Full Name' пайдаланасыз. Бұл жағдайда толық атты пайдалана алмайсыз. Оның орнына қатысты кестенің өрістеріне қатынасу үшін келесідей бөлек іздеуді қолданыңыз:
LookUp(Accounts, Account = MyAccount.Account).'Primary Contact'.'Full Name'
Деректер көзін жаңартқан кезде бір немесе бірнеше мәселелер туындауы мүмкін. Қателерді өңдеу бөлімінде сипатталғандай, қателерді анықтау және оларға жауап беру үшін IfError және IsError мәнімен IfError және Patch мәнін пайдаланыңыз. Сондай‑ақ Errors функциясын Деректер көздерімен жұмыс істеу бөлімінде сипатталғандай мәселелерді анықтау және тексеру үшін пайдалануға болады.
Қатысты функциялар бүкіл жазбаны ауыстыру үшін Update функциясын және жазбаны жасау үшін Collect функциясын қамтиды. UpdateIf функциясын шарттың негізінде бірнеше жазбаның белгілі бір сипаттарын өзгерту үшін пайдаланыңыз.
Деректер көзінде жазбалар жиынын өзгерту немесе жасау
Сондай-ақ, бір қоңыраумен бірнеше жазба жасау немесе өзгерту үшін Patch қолдануға болады.
Бір базалық жазбаны өткізудің орнына, екінші аргументте базалық жазбалар кестесін ұсыныңыз. Кестеде өзгеріс жазбаларын да беріңіз, базалық жазбалармен бір-біріне сәйкес келеді. Әр өзгерту кестесіндегі жазбалардың саны негізгі кестедегі жазбалар санымен бірдей болуы керек.
Осылай қолданғанда Patch , қайтарылатын мән — әр жазбаның базалық және өзгеріс жазбаларымен бір-біріне сәйкес келетін кесте.
Деректер көзінен тыс жазбаларды біріктіру
Біріктіру керек екі немесе көбірек жазбаны көрсетіңіз. Функция жазбаларды аргументтер тізімінің басынан соңына дейін ретпен өңдейді, кейінгі қасиет мәндері бұрынғыларды басып озады.
Patch Біріктірілген жазбаны береді және оның аргументтерін немесе деректер көздеріндегі жазбаларды өзгертпейді.
Syntax
Деректер көзінде жазбаны өзгерту немесе жасау
Patch( DataSource, BaseRecord, ChangeRecord1 [, ChangeRecord2, ... ])
- Деректер көзі – Міндетті. Сіз өзгерткіңіз келетін жазбаны қамтитын немесе жасағыңыз келетін жазбаны қамтитын деректер көзі.
- BaseRecord – Міндетті. Өзгертетін немесе жасайтын жазба. Егер жазба дереккөзден келген болса, функция жазбаны тауып, өзгертеді. Егер Defaults нәтижесі қолданылса, функция жазба жасайды. Жаңа жазбаны жасау үшін патч мәлімдемесінің Деректер көзі мен Әдепкі функцияның Деректер көзі сәйкес келуі керек.
- Жазбаларды өзгерту – Міндетті. BaseRecord ішіндегі өзгертетін сипаттарды қамтитын бір немесе бірнеше жазба. Функция өзгеріс жазбаларын аргументтер тізімінің басынан соңына дейін ретімен өңдейді, кейінгі қасиет мәндері бұрынғы мәндерді ауыстырады.
Деректер көзінде жазбалар жиынын өзгерту немесе жасау
Patch( DataSource, BaseRecordsTable, ChangeRecordTable1 [, ChangeRecordTable2, ... ] )
- Деректер көзі – Міндетті. Сіз өзгерткіңіз келетін жазбаларды қамтитын немесе жасағыңыз келетін жазбаларды қамтитын деректер көзі.
- BaseRecordTable – Міндетті. Өзгертетін немесе жасайтын жазбалар кестесі. Егер жазба дереккөзден келген болса, функция жазбаны тауып, өзгертеді. Егер Defaults нәтижесі қолданылса, функция жазба жасайды. Жаңа жазбаны жасау үшін патч мәлімдемесінің Деректер көзі мен Әдепкі функцияның Деректер көзі сәйкес келуі керек.
- Жазба кестелерін өзгерту – Міндетті. BaseRecordTable кестесінің әр жазбасы үшін өзгертеін сипаттарды қамтитын бір немесе бірнеше жазбалар кестесі. Функция өзгеріс жазбаларын аргументтер тізімінің басынан соңына дейін ретімен өңдейді, кейінгі қасиет мәндері бұрынғы мәндерді ауыстырады.
Merge records
Patch( Жазба1, Жазба2 [, ...] )
- Жазбалар - Міндетті. Біріктіру керек кемінде екі жазба. Функция жазбаларды аргументтер тізімінің басынан соңына дейін ретімен өңдейді, кейінгі қасиет мәндері бұрынғы мәндердің орнына шығады.
Examples
Деректер көзінде жазбаны өзгерту немесе жасау
Бұл мысалдарда сіз IceCream деп аталатын деректер көзінде жазба өзгертесіз немесе жасайсыз. Дереккөз осы кестедегі деректерді қамтиды және IDбағанындағы мәндерді автоматты түрде жасайды:
Осы дереккөздің жадыдағы нұсқасын жасау үшін, осы мысалдарды сынап көру үшін, келесі формуланы бағалаңыз:
ClearCollect( IceCream,
{ ID: 1, Flavor: "Chocolate", Quantity: 100 },
{ ID: 2, Flavor: "Vanilla", Quantity: 200 }
)
| Formula | Description | Result |
|---|---|---|
|
Patch( Балмұздақ, LookUp( Балмұздақ, Дәм = "Шоколад" ), { Саны: 400 } ) |
IceCream деректер көзіндегі жазбаны өзгертеді:
|
{ ID: 1, Дәм: "Шоколад", Саны: 400 } Балмұздақ дереккөзіндегі Chocolate жазбасы өзгертілді. |
| Patch( Балмұздақ, әдепкі ( Балмұздақ ), { Хош иістендіргіш: «Құлпынай» } ) |
IceCream деректер көзінде жазба жасайды:
|
{ ID: 3, Дәм: "Құлпынай", Саны: 0 } IceCream деректер көзіндегі Strawberry жазбасы жасалады. |
Алдыңғы формулалар есептелгеннен кейін, дереккөз келесі мәндермен аяқталады:
Деректер көзінен тыс жазбаларды біріктіру
| Formula | Description | Result |
|---|---|---|
| Patch( { Аты: "Джеймс", Ұпай: 90 }, { Аты: "Джим", Өткізілді: дұрыс } ) | Деректер көзінен тыс екі жазбаны біріктіреді:
|
{ Аты: "Джим", Ұпай: 90, Өтті: шын } |
Деректер көзінде жазбалар жиынтығын өзгерту немесе жасау
Жеке жазбалар орнына кестелермен қолданғанда Patch , бір қоңырауда бірнеше жазбаны құруға немесе өзгертуге болады. Қайтарылатын мән — кіріс кестелерімен бір-бірге сәйкес келетін жазбалар кестесі.
Бұл мысал Балмұздақ деректер көзіндегі бірнеше дәмдердің Санын бір уақытта жаңартады:
Patch(
IceCream,
Table(
{ ID: 1, Flavor: "Chocolate", Quantity: 150 },
{ ID: 2, Flavor: "Vanilla", Quantity: 200 }
),
Table(
{ Quantity: 300 },
{ Quantity: 400 }
)
)
Нәтижесінде жаңартылған жазбалар бар кесте пайда болады: { ID: 1, Flavor: "Chocolate", Quantity: 300 } және { ID: 2, Flavor: "Vanilla", Quantity: 400 }.
Бұл мысал Defaults арқылы бірнеше жаңа жазбаларды жасайды:
Patch(
IceCream,
Table( Defaults( IceCream ), Defaults( IceCream ) ),
Table(
{ Flavor: "Mint", Quantity: 60 },
{ Flavor: "Peach", Quantity: 80 }
)
)
Note
Кестелермен қолданғанда Patch , әр өзгеріс кестесіндегі жазбалар саны базалық кестедегі жазбалар санына сәйкес болуы керек. Әйтпесе, қате болады.
Бірнеше жазбаны өзгерткенде қателерді анықтау үшін IfError қолданыңыз.
IfError Бұл таңдаулы механизм болып табылады және Power Fx хосттары арасында жұмыс істейді:
IfError(
Patch(
IceCream,
baseRecords,
changeRecords
),
Notify( "Some records failed to update: " & FirstError.Message, NotificationType.Error )
)
Patch Dataverse бағана түрлерімен
Төмендегі мысалдар нақты Microsoft Dataverse деректер көздеріне қатысты. Жазба пішіндері деректер көзіне байланысты әртүрлі (мысалы, SharePoint пен SQL Server әртүрлі форматта).
Таңдау бағаны: Таңдау бағанын орнату үшін enum мәнін тікелей қолданыңыз. Бұл мысал Accounts кестесінде Status таңдау бағанын орнатады:
Patch(
Accounts,
LookUp( Accounts, 'Account Name' = "Contoso" ),
{ 'Status': 'Status (Accounts)'.Active }
)
Іздеу бағаны: Lookup бағанын орнату үшін тиісті кестенің негізгі кілті бар жазбаны беріңіз. Бұл мысал Негізгі Контакт іздеуін Аккаунттар жазбасында орнатады:
Patch(
Accounts,
LookUp( Accounts, 'Account Name' = "Contoso" ),
{ 'Primary Contact': LookUp( Contacts, 'Full Name' = "John Smith" ) }
)
Note
Бұл бағана типті мысалдар Dataverse-ке тән. SharePoint немесе SQL Server сияқты басқа деректер көздері ұқсас бағана түрлері үшін әртүрлі жазба пішіндерін талап етуі мүмкін. Дұрыс формат алу үшін өзіңіздің нақты дереккөзіңізге арналған құжаттаманы қараңыз.
Қолданылатын формулаларда делегация Patch
Patch Функцияның өзі делегатталуға жатпайды, себебі ол деректер көзіне жазады, сұрау арқылы емес. Алайда, делегаттық ескертулер формуланың жазба таңдау бөлігі (мысалы, Filter, LookUp немесе ForAll) деректер көздерінің делегация шекарасынан асып кеткен сұранысқа қатысты формулаларда пайда Patch болуы мүмкін.
Формулада делегация туралы ескерту Patchкөрінгенде, ол деректерді алу функцияларына емес Patch , өзіне қатысты ма, соны тексеріңіз. Делегация туралы толығырақ ақпарат алу үшін Canvas қосымшасындағы делегацияны түсіну бөлімін қараңыз.
Функциядағы Patch жиі кездесетін қателер
Функцияны қолданғанда Patch , деректер көздерінің байланысы, рұқсаттар немесе деректер қайшылықтары салдарынан қателер туындауы мүмкін. IfError және IsError қолданып, қателерді анықтап, дұрыс жауап беріңіз.
"Функцияны қолданғанда Patch желілік қате": Бұл қате әдетте қосымшаның деректер көзіне жете алмайтынын білдіреді. Жиі кездесетін себептерге интернет байланысының жоғалуы, деректер көзінің уақытша қолжетімсіз болуы немесе қазіргі пайдаланушыға жеткілікті рұқсаттардың болмауы жатады. Қоңырауды PatchIfError жүйесіне орап, пайдаланушыларға мағыналы хабарлама беріңіз.
"Сервердегі өзгерістермен қайшылықтар бар": Бұл қате басқа пайдаланушы немесе процесс сол жазбаны қосымшаңыз оқып, өзгерісті жазған кезде өзгерткенде пайда болады. Дереккөзді жаңарту функциясын шақырып, операцияны қайта орындаңыз.
Рұқсат қателері: Егер пайдаланушы деректер көзінде жазбалар жасауға немесе өзгертуге рұқсаты болмаса, Patch қоңырау сәтсіз аяқталады. IfError арқылы рұқсатқа қатысты қателерді анықтап, пайдаланушыға бағыт беріңіз.
Жалпы қателерді өңдеу үлгілері үшін Error handling бөлімін қараңыз.
As немесе ThisRecord кілт сөзін пайдалану
Бағалау контекстінде екіұшты болмау үшін формулаңыздағы As немесе ThisRecord кілт сөзін қолданыңыз.
Келесі мысалда тұжырымдамадағы бірінші LookupIf нүктелерді қарастырайық.
(OrderID = A[@OrderID])Ауқымдағы жинақты мен AOrderIdForAll ауқымдағы жинақты салыстыру OrderIdLookup күтіледі. Бұл жағдайда, сіз оны жергілікті параметр ретінде шешкіңіз келеді A[@OrderId] . Бірақ бұл екіұшты.
Қазіргі уақытта Power Apps сол жақ OrderId және оң жақ A[@OrderId]Lookup ауқымындағы өріс ретінде түсіндіреді. Сондықтан, Lookup әрдайым бірінші қатарды табады [dbo].[Orders1] , себебі шарт әрдайым шын (яғни, кез келген қатар OrderId өзіне тең).
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"
}
)
)
)
As немесе ThisRecord кілт сөзін пайдалану
Мүмкін болғанда, сол жақ жағын анықтау үшін As операторын немесе ThisRecord кілтсөзін қолданыңыз. Алдыңғы сценарий үшін ұсынылғандай.
Формулаңыз бірнеше аймақты қолдансаForAll, FilterLookup , және бір дереккөз немесе кестеде қолданса, ауқым параметрлері басқа жерде сол өріспен қақтығысуы мүмкін. Сондықтан, өріс атауын шешу үшін As операторын немесе ThisRecord қолданыңыз.
Мысалы, келесі мысалда As операторын пайдаланып түсініктеме бере аласыз.
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"
}
)
)
)
Сонымен қатар ThisRecord операторын да сол мақсат үшін пайдалануға болады.
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"
}
)
)
)
As операторы мен ThisRecord қолдану туралы толығырақ білу үшін Operators мақаласын қараңыз.