Делите путем


Patch Функцију

Односи се на: Цанвас апликације Цопилот Студио Десктоп токови Апликације засноване на моделу Повер Платформ ЦЛИ Датаверсе функције

Мења или креира један или више записа у извору података или спаја записе изван извора података.

Користите Patch функцију за измену записа у сложеним ситуацијама, као што је када радите ажурирања која не захтевају интеракцију корисника или користите обрасце који обухватају више екрана.

Да бисте лакше ажурирали записе у извору података за једноставне измене, користите тастер Уреди образац уместо контроле. Када додате контролу Уређивање обрасца, корисницима дајете образац за попуњавање и затим се измене чувају у извору података. За више информација, погледајте Објашњење образаца података.

Погледајте овај видео да бисте сазнали како да користите функцију Patch :

Преглед

Користите Patch функцију за измену једног или више записа извора података. Вредности специфичних поља се мењају без утицаја на друга својства. На пример, ова формула мења телефонски број за клијента по имену Contoso:

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

Користите Patch са функцијом Дефаултс за креирање записа. Користите ово понашање за изградњу једног екрана како за креирање, тако и за уређивање записа. На пример, ова формула креира запис за клијента по имену 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 да бисте открили и одговорили на грешке, као што је описано у руковању грешкама . Можете и да користите функцију Errors за препознавање и испитивање проблема, као што је описано у одељку Рад са изворима података.

Сродне функције укључују функцију Update за замену целог записа и функцију Collect за креирање записа. Користите функцију UpdateIf за промену специфичних својстава више записа на основу стања.

Уређујте или креирајте скуп записа у извору података

Patch Може се користити и за креирање или модификовање више записа са једним позивом.

Уместо да прође један основни запис, у другом аргументу може се дати табела основних записа. Записи о променама су дати и у табели, која одговара један за један са основним записима. Број записа у свакој табели промена мора бити исти као и број записа у основној табели.

Када се користи Patch на овај начин, повратна вредност је такође табела са сваким записом који одговара један-за-један са базним и променама записа.

Спајање записа изван извора података

Наведите два или више записа које желите спојити. Записи се обрађују се од почетка листе аргумената до краја, при чему ће касније вредности својства надјачати раније.

Patch Враћа стопљени запис и не мења његове аргументе или записе у било ком извору података.

Синтакса

Уређујте или креирајте запис у извору података

Patch( ДатаСоурце , БасеРецорд , ChangeRecord1 [, ChangeRecord2 , ... ])

  • ДатаСоурце – Обавезно. Извор података који садржи запис који желите да измените или ће садржати запис који желите да креирате.
  • БасеРецорд – Обавезно. Запис за измену или креирање. Ако је запис дошао из извора података, запис се проналази и модификује. Ако се користи резултат за Defaults, креира се запис. ДатаСоурце изјаве закрпе и ДатаСоурце функције Дефаултс морају се поклапати да би се креирао нови запис.
  • ЦхангеРецордс – Обавезно. Један или више записа који садрже својства за модификовање у BaseRecord. Записи о променама обрађују се од почетка листе аргумената до краја, при чему ће касније вредности својства надјачати раније.

Уређујте или креирајте скуп записа у извору података

Patch( ДатаСоурце , БасеРецордсТабле , ChangeRecordTable1 [, ChangeRecordTable2 , ... ] )

  • ДатаСоурце – Обавезно. Извор података који садржи записе које желите да измените или ће садржати записе које желите да креирате.
  • БасеРецордТабле - Обавезно. Табела записа коју можете модификовати или креирати. Ако је запис дошао из извора података, запис се проналази и модификује. Ако се користи резултат за Defaults, креира се запис. ДатаСоурце изјаве закрпе и ДатаСоурце функције Дефаултс морају се поклапати да би се креирао нови запис.
  • ЦхангеРецордТаблес – Обавезно. Једна или више табела записа која садржи својства која се мењају за сваки запис за BaseRecordTable. Записи о променама обрађују се од почетка листе аргумената до краја, при чему ће касније вредности својства надјачати раније.

Обједињавање записа

Patch( Record1 , Record2 [, ...] )

  • Евиденција - Обавезно. Бар два записа која желите да обједините. Записи се обрађују се од почетка листе аргумената до краја, при чему ће касније вредности својства надјачати раније.

Примери

Уређујте или креирајте запис (у извору података)

У овим примерима ћете модификовати или креирати запис у извору података по имену IceCream, који садржи податке у овој табели и аутоматски генерише вредности у IDколоне:

Пример сладоледа.

Формула Опис Резултат
Patch( Сладолед,
ЛоокУп ( сладолед, укус = "чоколада" ), { количина: 400 } )
Измењује запис у извору података IceCream:
  • Колона ID записа који треба изменити садржи вредност 1. (Запис Чоколада има тај ID.)
  • Вредност у колони Количина се мења у 400.
{ ИД: 1, Укус: "Чоколада", Количина: 400 }

Унос Чоколада у извор података IceCream је измењен.
Patch( ИцеЦреам, Дефаултс( ИцеЦреам ), { Флавор: "Страwберрy" } ) Креира запис у извору података IceCream:
  • Колона ID садржи вредност 3, који извор података аутоматски генерише.
  • Колона Количина садржи 0, што је подразумевана вредност за ту колону у IceCream извору података, како одређује функција Defaults.
  • Колона Flavor садржи вредност Strawberry.
{ ИД: 3, Укус: "Јагода", Количина: 0 }

Унос Strawberry у извор података IceCream је креиран.

Након процене претходних формула, извор података се завршава овим вредностима:

Пример сладоледа после.

Спајање записа (изван извора података)

Формула Опис Резултат
Patch( { Име: "Џејмс", Резултат: 90 }, { Име: "Џим", Прошло: истина } ) Спаја два записа изван извора података:
  • Вредности у колони Име за сваки запис се не подудара. Резултат садржи вредност (Jim) у запису који је ближи крају листе аргумената уместо вредности(James) у запису који је ближи почетку.
  • Први запис садржи колону (Резултат) која не постоји у другом запису. Резултат садржи ту колону са њеном вредношћу (90).
  • Други запис садржи колону (Пренето) која не постоји у првом запису. Резултат садржи ту колону са њеном вредношћу (тачно).
{ Име: "Џим", Оцена: 90, Положио: истина }

Употреба As или ThisRecord

Употребом кључне речи As или ThisRecord у формули избегава се двосмислено тумачење контекста.

У примеру испод, размотрите прво претраживање у изјави If. (OrderID = A[@OrderID]) се очекује да упореди OrderId у опсегу претраге са OrderId колекцијом A у ForAll обиму. У овом случају, вероватно желите да 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 да лева страна не буде двосмислена. Као што је препоручено за горњи сценарио.

Када формула користи више опсега помоћу функција 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, погледајте чланак Оператори.