Patch Функция

Келесілерге қолданылады: Кенеп бағдарламалары 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 деректер көзіндегі жазбаны өзгертеді:
  • Өзгертетін жазбаның Идентификатор бағаны 1 мәнін қамтиды. (Шоколад жазбасында сол идентификатор бар).
  • Мөлшер бағанындағы мән 400 болып өзгереді.
{ ID: 1, Дәм: "Шоколад", Саны: 400 }

Балмұздақ дереккөзіндегі Chocolate жазбасы өзгертілді.
Patch( Балмұздақ, әдепкі ( Балмұздақ ), { Хош иістендіргіш: «Құлпынай» } ) IceCream деректер көзінде жазба жасайды:
  • Идентификатор бағаны деректер көзі автоматты түрде жасайтын 3 мәнін қамтиды.
  • Defaults функциясы көрсететіндей, Мөлшер бағаны IceCream деректер көзінде сол баған үшін әдепкі мән болып табылатын 0 мәнін қамтиды.
  • Дәм бағаны Құлпынай мәнін қамтиды.
{ ID: 3, Дәм: "Құлпынай", Саны: 0 }

IceCream деректер көзіндегі Strawberry жазбасы жасалады.

Алдыңғы формулалар есептелгеннен кейін, дереккөз келесі мәндермен аяқталады:

Формулалар бағаланғаннан Patch кейін Балмұздақ дереккөзінің скриншоты.

Деректер көзінен тыс жазбаларды біріктіру

Formula Description Result
Patch( { Аты: "Джеймс", Ұпай: 90 }, { Аты: "Джим", Өткізілді: дұрыс } ) Деректер көзінен тыс екі жазбаны біріктіреді:
  • Әр жазбаның Name бағанындағы мәндер сәйкес емес. Нәтиже жазбадағы аргументтер тізімінің басына жақынырақ (James) мәнінің орнына, жазбадағы аргументтер тізімінің соңына жақынырақ (Jim) мәнін қамтиды.
  • Бірінші жазба екінші жазбада жоқ (Score) бағанын қамтиды. Нәтиже сол бағанды мәнімен (90) бірге қамтиды.
  • Екінші жазба бірінші жазбада жоқ бағанды (Passed) қамтиды. Нәтиже сол бағанды мәнімен (true) бірге қамтиды.
{ Аты: "Джим", Ұпай: 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 мақаласын қараңыз.