Share via


Түзету функциясы

Қолданылады: Canvas қолданбалары Үлгіге негізделген қолданбалар Power Platform CLI Жұмыс үстелі ағындары

Деректер көзінде бір немесе бірнеше жазбаны өзгертеді немесе жасайды, я болмаса деректер көзінен тыс жазбаларды біріктіреді.

Пайдаланушы әрекеттесуін қажет етпейтін жаңартуларды орындау немесе бірнеше экранды қамтитын пішіндерді пайдалану сияқты қиын жағдайларда жазбаларды өзгерту үшін Patch функциясын пайдаланыңыз.

Оңай өзгертулер үшін деректер көзіндегі жазбаларды оңайырақ жаңарту үшін оның орнына Пішінді өңдеу басқару элементін пайдаланыңыз. Пішінді өңдеу басқару элементін қосқанда, сіз пайдаланушыларға толтырылатын, содан кейін өзгертулерді деректер көзіне сақтайтын пішінді қамтамасыз етесіз. Қосымша ақпаратты Деректер пішіндерін түсіну бөлімінен қараңыз.

Patch функциясын пайдалану жолын білу үшін мына бейнені қараңыз:

Шолу

Patch функциясын деректер көзінің бір немесе бірнеше жазбасын өзгерту үшін пайдаланыңыз. Белгілі бір өрістердің мәндері басқа сипаттарға әсер етпестен өзгертіледі. Мысалы, бұл формула Contoso деген тұтынушының телефон нөмірін өзгертеді:

Patch( Customers, First( Filter( Customers, Name = "Contoso" ) ), { Phone: "1-212-555-1234" } )

Жазбаларды жасау үшін Patch функциясын Defaults функциясымен бірге пайдаланыңыз. Бұл мінез-құлықты жазбаларды жасау және өңдеу үшін бір экранды жасау үшін пайдаланыңыз. Мысалы, бұл формула Contoso деген тұтынушы үшін жазбаны жасайды:

Patch( Customers, Defaults( Customers ), { Name: "Contoso" } )

Тіпті деректер көзімен жұмыс істеп жатпасаңыз да, екі немесе көбірек жазбаны біріктіру үшін Patch функциясын пайдаланыңыз. Мысалы, бұл формула екі жазбаны Contoso телефон нөмірін және орнын көрсететін бір жазбаға біріктіреді:

Patch( { Name: "Contoso", Phone: "1-212-555-1234" }, { Name: "Contoso", Location: "Midtown" } )

Сипаттама

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

Бұл функцияны деректер көзімен бірге пайдалану үшін деректер көзін көрсетіңіз, содан кейін негізгі жазбаны көрсетіңіз:

  • Жазбаны өзгерту үшін негізгі жазба деректер көзінен келуі керек. Негізгі жазба галереяның Элементтер сипаты арқылы келуі, мәтінмәндік айнымалыға орналастырылуы немесе басқа бір жол арқылы келуі мүмкін. Бірақ, негізгі жазба қай деректер көзінен шыққанын анықтай аласыз. Бұл маңызды, өйткені жазба өзгерту үшін қайтадан табуға көмектесу үшін қосымша ақпаратты қамтиды.
  • Жазбаны жасау үшін әдепкі мәндері бар негізгі жазбаны жасау үшін 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'

Деректер көзін жаңартқанда, бір немесе бірнеше мәселе пайда болуы мүмкін. Қателерді анықтау және оларға жауап беру үшін Patch ішінен қайтарылатын мәні бар IfError және IsError функцияларын Қатені өңдеу бөлімінде сипатталғандай пайдаланыңыз. Сондай‑ақ Errors функциясын Деректер көздерімен жұмыс істеу бөлімінде сипатталғандай мәселелерді анықтау және тексеру үшін пайдалануға болады.

Қатысты функциялар бүкіл жазбаны ауыстыру үшін Update функциясын және жазбаны жасау үшін Collect функциясын қамтиды. UpdateIf функциясын шарттың негізінде бірнеше жазбаның белгілі бір сипаттарын өзгерту үшін пайдаланыңыз.

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

Сондай-ақ Patch функциясын бір шақыруы бар бірнеше жазбаны жасау немесе өзгерту үшін пайдалануға болады.

Бір негізгі жазбаны өткізу орнына екінші аргументте негізгі жазбалар кестесін беруге болады. Өзгерту жазбалары да негізгі жазбалармен бір-бірге сәйкес келетін кестеде беріледі. Әр өзгерту кестесіндегі жазбалардың саны негізгі кестедегі жазбалар санымен бірдей болуы керек.

Patch функциясын осылай пайдаланғанда да қайтарылатын мән әр жазба негізгі және өзгерту жазбаларына бір-бірге сәйкес келетін кесте болады.

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

Біріктіру керек екі немесе көбірек жазбаны көрсетіңіз. Жазбалар аргументтер тізімінің басынан соңына қарай ретпен өңделеді, кешірек сипат мәндері ертеректерін қайта анықтайды.

Patch функциясы біріктірілген жазбаны қайтарады және ешбір деректер көздерінде оның аргументтерін немесе жазбаларын өзгертпейді.

Синтаксис

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

Patch( DataSource, BaseRecord, ChangeRecord1 [, ChangeRecord2, … ])

  • DataSource – Міндетті. Сіз өзгерткіңіз келетін жазбаны қамтитын немесе жасағыңыз келетін жазбаны қамтитын деректер көзі.
  • BaseRecord – Міндетті. Өзгертетін немесе жасайтын жазба. Жазба деректер көзінен келген болса, жазба табылады және өзгертіледі. Defaults нәтижесі пайдаланылса, жазба жасалады.
  • ChangeRecord(s) – Міндетті. BaseRecord ішіндегі өзгертетін сипаттарды қамтитын бір немесе бірнеше жазба. Өзгерту жазбалары аргументтер тізімінің басынан соңына қарай ретпен өңделеді, кешірек сипат мәндері ертеректерін қайта анықтайды.

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

Patch( DataSource, BaseRecordsTable, ChangeRecordTable1 [, ChangeRecordTable2, … ] )

  • DataSource – Міндетті. Сіз өзгерткіңіз келетін жазбаларды қамтитын немесе жасағыңыз келетін жазбаларды қамтитын деректер көзі.
  • BaseRecordTable – Міндетті. Өзгертетін немесе жасайтын жазбалар кестесі. Жазба деректер көзінен келген болса, жазба табылады және өзгертіледі. Defaults нәтижесі пайдаланылса, жазба жасалады.
  • ChangeRecordTable(s) – Міндетті. BaseRecordTable кестесінің әр жазбасы үшін өзгертеін сипаттарды қамтитын бір немесе бірнеше жазбалар кестесі. Өзгерту жазбалары аргументтер тізімінің басынан соңына қарай ретпен өңделеді, кешірек сипат мәндері ертеректерін қайта анықтайды.

Жазбаларды біріктіру

Patch( Record1, Record2 [, …] )

  • Record(s) – Міндетті. Біріктіру керек кемінде екі жазба. Жазбалар аргументтер тізімінің басынан соңына қарай ретпен өңделеді, кешірек сипат мәндері ертеректерін қайта анықтайды.

Мысалдар

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

Бұл мысалдарда, сіз IceCream атты деректер көзінде осы кестеде деректерді қамтитын және Идентификаторбағанында мәндерді автоматты түрде жасайтын жазбаны өзгертесіз немесе жасайсыз:

Балмұздақ мысалы.

Формула Сипаттама Нәтиже
Patch( IceCream,
LookUp( IceCream, Flavor = "Chocolate" ), { Quantity: 400 } )
IceCream деректер көзіндегі жазбаны өзгертеді:
  • Өзгертетін жазбаның Идентификатор бағаны 1 мәнін қамтиды. (Шоколад жазбасында сол идентификатор бар).
  • Мөлшер бағанындағы мән 400 болып өзгереді.
{ ID: 1, Flavor: "Chocolate", Quantity: 400 }

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

IceCream деректер көзіндегі Құлпынай жазбасы жасалды.

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

Кейінгі балмұздақ мысалы.

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

Формула Сипаттамасы Нәтиже
Patch( { Name: "James", Score: 90 }, { Name: "Jim", Passed: true } ) Деректер көзінен тыс екі жазбаны біріктіреді:
  • Әр жазбаның Name бағанындағы мәндер сәйкес емес. Нәтиже жазбадағы аргументтер тізімінің басына жақынырақ (James) мәнінің орнына, жазбадағы аргументтер тізімінің соңына жақынырақ (Jim) мәнін қамтиды.
  • Бірінші жазба екінші жазбада жоқ (Score) бағанын қамтиды. Нәтиже сол бағанды мәнімен (90) бірге қамтиды.
  • Екінші жазба бірінші жазбада жоқ бағанды (Passed) қамтиды. Нәтиже сол бағанды мәнімен (true) бірге қамтиды.
{ Name: "Jim", Score: 90, Passed: true }

As немесе ThisRecord кілт сөзін пайдалану

Формулада As немесе ThisRecord кілт сөзін пайдалану анық емес бағалау контекстін болдырмайды.

Төмендегі мысалда If мәлімдемесіндегі бірінші іздеуді қарастырайық. (OrderID = A[@OrderID]) іздеу ауқымындағы OrderId кілт сөзін OrderId кілт сөзімен AForAll ауқымында салыстырады. Бұл жағдайда сіз A[@OrderId] жергілікті параметр ретінде шешілгенін қалауыңыз мүмкін. Бірақ бұл анық емес.

Power Apps бағдарламасы қазіргі уақытта сол жақ OrderId және оң жақ A[@OrderId] іздеу ауқымындағы өріс ретінде қарастырады. Сондықтан іздеу әрқашан бірінші жолды [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 сол жағын ажырату үшін пайдаланыңыз. As жоғарыдағы сценарий үшін ұсынылады.

Сіздің формулаңыз бір дерек көздерінде немесе кестеде ForAll, Filter және Lookup бар бірнеше ауқымды қолданған кезде, ауқым параметрлері басқа жерде бірдей өріспен соқтығысуы мүмкін. Сондықтан 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 операторын пайдалану туралы қосымша ақпаратты Операторлар мақаласынан қараңыз.