Bendrinti naudojant


Klaidų funkcija

Taikoma: drobės programoms Modeliu pagrįstoms programoms

Pateikta ankstesnių duomenų šaltinio pakeitimų klaidų informaciją.

Apžvalga

Klaidų gali įvykti, kai pakeičiamas duomenų šaltinio įrašas. To priežasčių gali būti įvairių, įskaitant dingusį tinklo ryšį, netinkamas teises ir redagavimo konfliktus.

Funkcijos, kurios modifikuoja duomenis duomenų šaltiniuose, pvz., Patch, Collect, Remove, RemoveIf, Update, UpdateIf ir SubmitForm apie klaidas praneša dviem būdais:

  • Kiekviena iš šių funkcijų kaip operacijos rezultatą pateiks klaidos reikšmę. Klaidas įprastai galima aptikti naudojant IsError ir pakeisti arba nerodyti naudojant IfError ir App.OnError. Daugiau informacijos žr. Klaidų apdorojimas.
  • Atlikus šią operaciją, funkcija Errors taip pat pateiks ankstesnių operacijų klaidas. Tai gali būti naudinga norint parodyti klaidos pranešimą formos ekrane neužfiksuojant jos būsenos kintamajame.

Kai kurių klaidų galite išvengti iš anksto, naudodami funkcijas Validate ir DataSourceInfo. Žr. straipsnį apie darbą su duomenų šaltiniais, kuriame pateikiama daugiau pasiūlymų, kaip dirbti su klaidomis ir jų išvengti.

Aprašas

Funkcija Errors pateikia klaidų lentelę, kurioje yra tolesni stulpeliai.

  • Įrašas. Duomenų šaltinio įrašas, dėl kurio įvyko klaida. Jei klaida įvyko kuriant įrašą, šis stulpelis bus tuščias.
  • Stulpelis. Stulpelis, dėl kurio įvyko klaida, jei klaidą galima priskirti vienam stulpeliui. Jei negalima, jis bus tuščias.
  • Pranešimas. Klaidos aprašas. Šią klaidos eilutę galima rodyti galutiniam vartotojui. Turėkite omenyje, kad šį pranešimą gali sugeneruoti duomenų šaltinis ir jis gali būti ilgas bei jame gali būti neapdorotų stulpelių pavadinimų, kurie vartotojui gali neturėti prasmės.
  • Klaida. Klaidos kodas, kurį galima naudoti formulėse, kad būtų lengviau ištaisyti klaidą:
ErrorKind Aprašas
ErrorKind.Conflict Buvo atliktas kitas to paties įrašo pakeitimas, todėl atsirado keitimo konfliktas. Naudodami funkciją Refresh, iš naujo įkelkite įrašą ir bandykite keisti dar kartą.
ErrorKind.ConstraintViolation Pažeistas vienas arba daugiau apribojimų.
ErrorKind.CreatePermission Buvo bandyta sukurti įrašą, o dabartinis vartotojas neturi teisės kurti įrašų.
ErrorKind.DeletePermission Buvo bandyta panaikinti įrašą, o dabartinis vartotojas neturi teisės naikinti įrašų.
ErrorKind.EditPermission Buvo bandyta redaguoti įrašą, o dabartinis vartotojas neturi teisės redaguoti įrašų.
ErrorKind.GeneratedValue Buvo bandyta pakeisti stulpelį, kurį duomenų šaltinis generuoja automatiškai.
ErrorKind.MissingRequired Įraše trūksta būtino stulpelio reikšmės.
ErrorKind.None Klaidos nėra.
ErrorKind.NotFound Buvo bandyta redaguoti arba panaikinti įrašą, tačiau įrašo nepavyko rasti. Įrašą galėjo pakeisti kitas vartotojas.
ErrorKind.ReadOnlyValue Buvo bandyta pakeisti tik skaitomą stulpelį.
ErrorKind.Sync Duomenų šaltinis pranešė apie klaidą. Daugiau informacijos rasite stulpelyje Pranešimas.
ErrorKind.Unknown Įvyko klaida, tačiau nežinoma, kokia.
ErrorKind.Validation Buvo aptikta bendra tikrinimo problema, kurios nebuvo galima priskirti vienai iš kitų rūšių.

Gali būti pateikiamos viso duomenų šaltinio arba tik pasirinktos eilutės klaidos, funkcijoje pateikiant argumentą Record.

Jei, pavyzdžiui, įrašo sukurti nepavyko, Patch ar kita duomenų funkcija gali pateikti tuščią reikšmę. Funkcijai Erros galite perduoti tuščią reikšmę ir funkcija šiais atvejais pateiks atitinkamą klaidų informaciją. Tame pačiame duomenų šaltinyje vėliau naudojant duomenų funkcijas, ši klaidų informacija bus išvalyta.

Jei klaidų nėra, lentelė, kurią pateikia Errors, bus tuščia ir ją galima išbandyti naudojant funkciją IsEmpty.

Sintaksė

Errors( DataSource [, Record ] )

  • DataSource – Būtinas. Duomenų šaltinis, kurio klaidas norite pateikti.
  • Record – nebūtina. Konkretus įrašas, kurio klaidas norite pateikti. Jei šio argumento nenurodote, funkcija pateikia viso duomenų šaltinio klaidas.

Pavyzdžiai

Nuoseklūs veiksmai

Šiame pavyzdyje dirbsime su duomenų šaltiniu Ledai:

Ledai.

Programoje vartotojas į duomenų įvedimo formą įrašo įrašą Šokoladiniai ir elemento Quantity reikšmę pakeičia į 90. Įrašas, su kuriuo bus dirbama, įdedamas į konteksto kintamąjįEditRecord:

  • UpdateContext( { EditRecord: LookUp( IceCream, Flavor = "Chocolate" ) } )

Norint, kad šis pakeitimas būtų atliktas duomenų šaltinyje, naudojama funkcija Patch:

  • Patch( Ledai, EditRecord, Gallery.Updates )

įvertinta Gallery.Updates reikšmė yra { Quantity: 90 }, nes modifikuota tik ypatybė Quantity.

Deja, tik prieš iškviečiant funkciją Patch, kažkas įrašo Šokoladiniai ypatybę Quantity modifikuoja į 80. „Power Apps“ tai aptiks ir neleis įvykti nesuderinamam pakeitimui. Šią situaciją galite patikrinti naudodami formulę:

  • IsEmpty( Errors( Ledai, EditRecord ) )

kurti pateikia false, nes funkcija Errors pateikė šią lentelę:

Įrašas Stulpelinė Pranešimas Klaida
{ Flavor: "Šokoladiniai", Quantity: 100 } blank „Įrašą, kurį bandote modifikuoti, modifikavo kitas vartotojas. Iš naujo įkelkite įrašą ir bandykite dar kartą.“ ErrorKind.Conflict

Žymą galite padėti formoje, kad ši klaida būtų rodoma vartotojui.

  • Norėdami rodyti klaidą, nustatykite žymos ypatybę Tekstas kaip šią formulę:
    Label.Text = First(Errors( Ledai, EditRecord )).Message

Taip pat formoje galite įtraukti mygtuką Įkelti iš naujo, kad vartotojas galėtų efektyviai išspręsti konfliktą.

  • Jei norite, kad mygtukas būtų rodomas tik kilus konfliktui, nustatykite mygtuko ypatybę Visible kaip šią formulę:
    !IsEmpty( Lookup( Errors( Ledai, EditRecord ), Error = ErrorKind.Conflict ) )
  • Norėdami anuliuoti pakeitimą, kai vartotojas pasirenka mygtuką, nustatykite jo ypatybę OnSelect kaip šią formulę:
    ReloadButton.OnSelect = Revert( Ledai, EditRecord )