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.
Pataisa arba kita duomenų funkcija gali grąžinti tuščią reikšmę, jei, pavyzdžiui, nepavyko sukurti įrašo. 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ė
Klaidos( DataSource [, Įrašas ] )
- DataSource - būtina. Duomenų šaltinis, kurio klaidas norite pateikti.
- Įrašas – neprivalomas. 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:
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( IceCream, 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( Error( IceCream, EditRecord ) )
kurti pateikia false, nes funkcija Errors pateikė šią lentelę:
Įrašas | Stulpelinė | Pranešimas | Klaida |
---|---|---|---|
{ Flavor: "Šokoladiniai", Quantity: 100 } | Tuščią | „Į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(Error( IceCream, EditRecord )). Pranešimas
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( Searchup( Error( IceCream, EditRecord ), error = ErrorKind.Conflict ) ) - Norėdami anuliuoti pakeitimą, kai vartotojas pasirenka mygtuką, nustatykite jo ypatybę OnSelect kaip šią formulę:
ReloadButton.OnSelect = grąžinti( IceCream, EditRecord )