Märkus.
Juurdepääs sellele lehele nõuab autoriseerimist. Võite proovida sisse logida või kausta vahetada.
Juurdepääs sellele lehele nõuab autoriseerimist. Võite proovida kausta vahetada.
Selles artiklis kirjeldatud käitumine on saadaval ainult siis, kui valemitaseme veahaldusfunktsioon on sisse lülitatud.
Power Fx toetab valemitasemel veakäsitlust. See funktsioon on vaikimisi sisse lülitatud kõigi uute rakenduste puhul. Kuid mõnel vanemal rakendusel võib see rakenduse seadetes välja lülitada. Hoia see funktsioon sisse lülitatuna.
- Ava lõuendi rakendus redigeerimisrežiimis.
- Mine vahekaardile Seaded>Uuendused>Pensionile jäänud.
- Veendu, et valemitaseme halduse keelamine on välja lülitatud.
Lisateabe saamiseks vaata Kontrollimine, millised funktsioonid on lubatud.
Ilmneb tõrkeid. Võrgud lagunevad, salvestusruum saab täis, ootamatud väärtused. On oluline, et teie loogika töötaks potentsiaalsete probleemide puhul jätkuvalt õigesti.
Vaikimisi vooguvad tõrked rakenduse valemite kaudu ja neist teatatakse rakenduse lõppkasutajale. Nii teab lõppkasutaja, et juhtus midagi ootamatut. Nad võivad probleemi ise lahendada teise sisendi abil või teatada probleemist rakenduse omanikule.
Rakenduste loojana võta kontrolli oma rakenduse vigade üle:
- Tuvasta ja lahenda viga. Kui on võimalus, et võib tekkida viga, kirjuta rakenduse valemid, et tuvastada veatingimus, ja proovi operatsiooni uuesti. Lõppkasutaja ei pea muretsema, et viga tekkis, kuna tegija arvestas võimalusega. Püüa viga kinni, kasutades funktsioone IfError, IsError ja IsErrorOrBlank valemis.
- Teata veast. Kui viga ei käsitleta valemis, kus sa selle kohtasid, ilmub viga App.OnError haldurile. Viga ei saa asendada, sest see on juba esinenud ja on osa valemite arvutustest. Kuid saate kasutada funktsiooni App.OnError, et juhtida seda, kuidas veast lõppkasutajale teatatakse, sealhulgas tõrketeadete koos keelamiseks. App.OnError pakub ka ühist kitsaskohta tõrgetest teatamiseks kogu rakenduses.
- Loo ja viska viga uuesti. Lõpuks võid tuvastada veaolukorra oma loogikaga, mis on spetsiifiline sinu rakendusele. Kasutage kohandatud tõrgete loomiseks funktsiooni Tõrge. Kasuta Error-funktsiooni , et pärast küsitlemist IfErroris või App.OnErroris uuesti viga esitada.
Alustamine
Alustame lihtsa näitega.
- Loo uus ekraan Power Apps Canvas rakenduses.
- Sisestage TextInput juhtelement. Vaikimisi on nimi TextInput1.
- Sisestage juhtelement Silt.
- Määrake Silt juhtelemendi atribuudile Tekst valem
1/Value( TextInput1.Text )
Sa näed viga, sest TextInput juhtnupu vaikimisi tekst on "Text input", mida ei saa numbriks teisendada. Vaikimisi on see hea: lõppkasutaja saab teate, et rakenduses midagi ei tööta ootuspäraselt.
Loomulikult ei taha sa kasutajat iga kord, kui ta selle rakenduse käivitab, viga tervitada. Tõenäoliselt "Text input" pole see tekstisisestusvälja jaoks õige vaikesäte. Selle probleemi lahendamiseks muuda TextInputjuhtnuppu vaikimisi omadus järgmiselt:
Blank()
Hmm, nüüd näed teist viga. Matemaatilised operatsioonid tühja väärtusega, nagu jagamine, sunnivad tühja väärtuse nullini. See väärtus põhjustab nulli jagamise vea. Selle probleemi lahendamiseks pead otsustama, milline on selle olukorra jaoks sobiv käitumine selles rakenduses. Vastus võib olla näidata tühjana , kui teksti sisestamine on tühi. Seda eesmärki saab saavutada, mähkides oma valemi IfError funktsiooniga:
IfError( 1/Value( TextInput1.Text ), Blank() )
Nüüd asendatakse viga kehtiva väärtusega ja vea bänner kaob. Aga võib-olla oled mööda läinud, sest kasutatud IfError katab kõik vead, sealhulgas vale väärtuse sisestamise, näiteks "hello". Seda probleemi saab lahendada, häälestades oma IfErrori nii, et jagamine nulliks, ja kõik teised vead uuesti välja viskad:
IfError( 1/Value( TextInput1.Text ),
If( FirstError.Kind = ErrorKind.Div0, Blank(), Error( FirstError ) ) )
Nii et käivita oma rakendus ja proovi erinevaid väärtusi.
Ilma väärtuseta, nagu rakenduse käivitamisel, ei kuvata vastust, kuna vaikeväärtus on tühi, kuid ei kuvata ka viga, kuna IfError asendab nulliga jagamise veaga.
Kui sisestad 4, saad oodatava tulemuse 0,25:
Ja kui sisestad midagi ebaseaduslikku, näiteks hello, siis saad veateate:
See on lihtne sissejuhatav näide. Vigadega saab toime tulla mitmel erineval viisil, sõltuvalt rakenduse vajadustest:
- Vea bänneri asemel võiks sildi juhtimises näidata "#Error " koos valemiga. Selleks, et asendajate tüübid oleksid ühilduvad IfErrori esimese argumendiga, tuleb numbriline tulemus selgesõnaliselt teisendada tekstistringiks, kasutades Tekstifunktsiooni .
IfError( Text( 1/Value( TextInput1.Text ) ), If( FirstError.Kind = ErrorKind.Div0, Blank(), "#Error" )
- Selle asemel, et seda konkreetset instantsi IfErroriga mähkida, võiksid kirjutada tsentraliseeritud App.OnError haldaja. Sa ei saa näidatud stringi asendada "#Error"-ga, kuna viga on juba juhtunud ja App.OnError on mõeldud ainult aruandluse kontrollimiseks.
If( FirstError.Kind <> ErrorKind.Div0, Error( FirstError ) )
Vea levitamine
Vead voolavad läbi valemite samamoodi nagu Excelis. Näiteks Excelis, kui lahtril A1 on valem =1/0, siis A1 kuvab veaväärtust #DIV0!:
Kui rakk A2 viitab A1 valemile, =A1*2näiteks , levib viga ka selle valemi kaudu:
Viga asendab väärtuse, mida valem muidu arvutaks. Lahtris A2 pole korrutamise tulemust, ainult A1 jagamise viga.
Power Fx töötab samamoodi. Üldiselt, kui annad funktsioonile või operaatorile argumendina vea, siis operatsioon ei toimu. Sisendviga voolab läbi operatsiooni tulemusena. Näiteks Mid( Text( 1/0 ), 1, 1 ) tagastab Division by Zero vea, kuna kõige sisemine viga läbib Text funktsiooni ja Mid-funktsiooni :
Üldiselt ei liigu vead läbi Power Apps'i juhtimisomaduste. Laiendame eelmist näidet teise juhtnupiga, mis kuvab, kas esimese sildi Text omadus on veaseisund:
On täiesti normaalne, et vead ei levi läbi juhtimise, sest süsteem märkab vigu, mis on kõigi juhtimisomaduste sisendis. Viga pole kadunud.
Enamik funktsioone ja operaatoreid järgib reeglit "viga sisse, viga välja", kuid on ka erandeid. Funktsioonid IsError, IsErrorOrBlank ja IfError on loodud vigadega töötamiseks, seega ei pruugi need viga tagastada isegi siis, kui viga neile edasi antakse.
Tõrgete vaatlemine
Power Fx ei märka vigu enne, kui valem kasutab veaväärtust.
Seetõttu ei pruugi If jaSelect funktsioonid viga tagastada, kui see edastatakse. Kaaluge valemit If( false, 1/0, 3 ). Selles valemis on nulliga jagamise viga, kuid kuna If funktsioon ei võta seda haru false tingimuse tõttu, siis Power Fx ja Power Apps ei teata veast:
Set-funktsiooni kasutamine veaga ei anna vea kohta vea kohta, kus viga on muutujasse paigutatud. Näiteks Power Apps-s on valem App.OnStart mis paigutab nullvea jaotuse muutujasse x:
Vigadest ei teatata, kuna koodile x ei viidata. Kuid hetkel, kui lisad sildikontrolli ja seadistad selle Teksti omaduseks x, kuvatakse viga:
Valemi sees saab vigu jälgida, kasutades funktsioone IfError, IsError ja IsErrorOrBlank . Nende funktsioonide abil saad tagastada alternatiivse väärtuse, võtta alternatiivseid meetmeid või muuta viga enne, kui see on märgatud ja raporteeritud.
Tõrgete aruandlus
Pärast Power FX-i vea märkamist on järgmine samm vea teatamine lõppkasutajale.
Erinevalt Excelist ei ole alati mugavat kohta veatulemuse kuvamiseks, sest valemi tulemus võib määrata omaduse nagu X ja Y koordinaadid kontrollis, mille jaoks pole mugavat kohta mõne teksti kuvamiseks. Iga Power Fx hostiga saab määrata, kuidas tõrked lõppkasutajale lõpuks kuvatakse ja kui palju tegija selle protsessi üle juhib. Power Apps. aastal kuvatakse vea bänner ja App.OnError kontrollib, kuidas viga raporteeritakse.
Oluline on märkida, et App.OnError ei saa viga asendada samamoodi nagu IfError. Kui App.OnError käivitatakse, on viga juba toimunud ja tulemus levib läbi teiste valemite. App.OnError kontrollib ainult seda, kuidas tõrkest lõppkasutajale teatatakse, ja annab tegijale soovi korral konksu tõrke logimiseks.
Ulatuse muutujad FirstError ja AllErrors pakuvad kontekstiteavet vea või vigade kohta. See kontekst annab teavet vea tüübi kohta, kus viga tekkis ja kus seda täheldati.
Tõrke järel peatamine
Käitumisvalemid toetavad toimingu võtmist, andmebaaside muutmist ja oleku muutmist. Need valemid võimaldavad järjestuses teha rohkem kui ühte tegevust, kasutades ahelaoperaatorit ; (või ;; sõltuvalt asukohast).
Näiteks sellisel juhul näitab ruudustiku juhtimine, mis T on tabelis. Iga nupu valik muudab selle tabeli olekut kahe Patch päringuga:
Aheldatud käitumisvalemis ei lõpe tegevused pärast esimest viga. Muutkem oma näidet nii, et esimeses Patch-päringus edastataks kehtetu indeksinumber. Teine Patch töötab hoolimata varasemast veast. Esimesest veast teatatakse lõppkasutajale ja see kuvatakse Studios veana juhtnupul:
Kasuta IfErrori , et peatada käivitamine pärast viga. Sarnaselt funktsiooniga If annab selle funktsiooni kolmas argument koha toimingute käivitamiseks, mida saab käivitada ainult juhul, kui tõrget pole.
Kui ForAll'i ühe iteratsiooni ajal tekib viga, ei peatu ülejäänud iteratsioonid. ForAll on loodud iga iteratsiooni iseseisvaks käivitamiseks, võimaldades paralleelset täitmist. Kui ForAll on lõpetatud, tagastatakse viga, mis sisaldab kõiki esinevaid vigu (uurides AllErrors failides IfError või App.OnError).
Näiteks järgmine valem annab ForAllile kaks viga (nulli jagamise korral 0 Value korral kaks korda) ja Collection sellel on kolm kirjet (kui Value ei ole 0): [1, 2, 3].
Clear( Collection );
ForAll( [1,0,2,0,3], If( 1/Value > 0, Collect( Collection, Value ) ) );
Mitme tõrkega töötamine
Kuna käitumisvalem võib käivitada rohkem kui ühe toimingu, võib see esineda ka rohkem kui ühe veaga.
Vaikimisi teatab rakendus esimesest veast lõppkasutajale. Selles näites ebaõnnestuvad mõlemad Patchi kutsed, kuid teine kutse ebaõnnestub nullveaga jagamisega. Kasutaja näeb ainult esimest viga indeksi kohta:
IfError funktsioon ja App.OnError pääsevad ligi kõigile vigadele, kasutades AllErrors ulatuse muutujat. Sellisel juhul saad selle muutuja määrata globaalseks muutujaks ja vaadata mõlemaid esinevaid vigu. Need kuvatakse tabelis samas järjekorras, milles need esinesid:
Mittekäitumuslikud valemid võivad samuti tagastada mitu viga. Näiteks funktsiooni Patch kasutamine koos värskendatavate kirjete partiiga võib tagastada mitu viga, üks iga ebaõnnestunud kirje kohta.
Tabelite tõrked
Nagu varem nägite, saab vigu salvestada muutujatesse. Sa võid lisada vigu ka andmestruktuuridesse, näiteks tabelitesse. See lähenemine on oluline, sest see tagab, et ühegi kirje viga ei saa kogu tabelit kehtetuks muuta.
Näiteks vaatleme seda andmetabeli juhtimist Power Apps'is:
AddColumns'i arvutus näitas ühe väärtuse puhul nulli jagamise vea. Selle ühe kirje puhul on veerus Vastastikune veaväärtus (jagamine nulliga), kuid teistel kirjetel pole ja need on korras.
IsError( Index( output, 2 ) ) Tagastab väärtuse väär ja IsError( Index( output, 2 ).Value ) tagastab väärtuse tõene.
Kui tabeli filtreerimisel tekib viga, on kogu kirje viga. Operatsioon tagastab ikkagi tulemuse kirje, et lõppkasutaja teaks, et seal oli midagi ja probleem on olemas.
Näiteks see. Siin pole algses tabelis vigu, kuid filtreerimine tekitab vea alati, kui Väärtus võrdub 0-ga:
Väärtused -5 ja -3 on korralikult välja filtreeritud. Väärtused 0 põhjustavad filtri töötlemisel tõrke ja seetõttu on ebaselge, kas kirje tuleks tulemusesse kaasata või mitte. Et maksimeerida lõppkasutajate läbipaistvust ja aidata silumistel, lisab operatsioon originaali asemel veakirje. Sel juhul tagastab IsError( Index( output, 2 ) ) väärtuse Tõene.
Andmeallika tõrked
Funktsioonid, mis muudavad andmeid andmeallikas, nagu näiteks Paik, Kogu, Eemalda, RemoveIf, Värskenda, UpdateIf ja SubmitForm, teatavad tõrkeid kahel viisil.
- Kõik need funktsioonid tagastavad toimingu tulemusena veaväärtuse. Saad vigu tuvastada IsErrori abil ning asendada või summutada neid tavapäraselt IfError ja App.OnError abil.
- Pärast operatsiooni tagastab Errors funktsioon ka varasemate operatsioonide vead. See käitumine võib olla kasulik veateate kuvamiseks vormi ekraanil, ilma et peaks viga jäädvustama olekumuutujas.
Näiteks see valem kontrollib Collect vea ja kuvab kohandatud veateate:
IfError( Collect( Names, { Name: "duplicate" } ),
Notify( $"OOPS: { FirstError.Message }", NotificationType.Warning ) )
Funktsioon Tõrked tagastab ka teavet käitusaegsete toimingute ajal ilmnenud vigade kohta. See võib olla kasulik tõrke kuvamisel vormi kuval, ilma et oleks vaja jäädvustada tõrget oleku muutujas.
Kukutamistõrked
Mõnikord ootad võimalikke vigu ja võid neid turvaliselt ignoreerida.
IfErroris ja App.OnErroris, kui tuvastatakse viga, mis peaks edastama järgmisele kõrgemale käsitlejale, viska see uuesti kasutades Error( AllErrors ).
Oma tõrgete loomine
Samuti saad ise vigu luua, kasutades Error funktsiooni.
Kui tekitad ise vead, kasuta väärtusi üle 1000, et vältida võimalikke konflikte tulevaste süsteemiveaväärtustega.
ErrorKind loendi väärtused
| ErrorKindi loend | Väärtus | Kirjeldus |
|---|---|---|
| AnalysisError | 18 | Süsteemitõrge. Kompilaatorianalüüsiga on probleem. |
| BadLanguageCode | 14 | Kasutati kehtetut või tundmatut keelekoodi. |
| BadRegex | sept. | Kehtetu regulaaravaldis. Kontrollige funktsioonide IsMatch, Match või MatchAll puhul kasutatavat süntaksit. |
| Konflikt | 6 | Kirje, mida uuendad, on juba algallikas muudetud ja sa pead konflikti lahendama. Levinud lahendus on kohalike muudatuste salvestamine, kirje värskendamine ja muudatuste uuesti rakendamine. |
| ConstraintViolated | 8 | Kirje ei läbinud serveris piirangute kontrolli. |
| CreatePermission | 3 | Sul ei ole luba andmeallika jaoks kirjet luua. Näiteks kutsutakse esile funktsiooni Kogu. |
| DeletePermissions | 5 | Sul ei ole luba kustutada andmeallika kirjet. Näiteks kutsutakse esile funktsiooni Eemalda. |
| Div0 | 13 | Nulliga jagamine. |
| EditPermissions | 4 | Sul ei ole luba andmeallika jaoks kirjet luua. Näiteks kutsutakse esile funktsiooni Lapi. |
| GeneratedValue | 9 | Serverile edastati ekslikult väärtus välja jaoks, mille server automaatselt arvutab. |
| InvalidFunctionUsage | 16 | Funktsiooni vale kasutamine. Sageli on funktsiooni üks või mitu argumenti valed või neid kasutatakse sobimatul viisil. |
| FileNotFound | 17 | SaveData salvestusruumi ei leitud. |
| InsufficientMemory | 21 | Seadmel pole piisavalt mälu ega salvestusruumi operatsiooniks. |
| InvalidArgument | 25 | Funktsioonile anti üle kehtetu argument. |
| Sisemine | 26 | Süsteemitõrge. Ühe funktsiooniga on sisemine probleem. |
| MissingRequired | 2 | Kirje nõutav väli puudub. |
| Võrk | 23 | Võrgusidega on probleem. |
| Pole | 0 | Süsteemitõrge. Tõrkeid pole. |
| Pole rakendatav | 27 | Ühtegi väärtust pole saadaval. See viga on kasulik, et eristada tühja väärtust, mida saab numbrilistes arvutustes käsitleda nullina, tühjadest väärtustest, mida tuleks potentsiaalse probleemina märgistada, kui väärtust kasutada. |
| NotFound | 7 | Kirjet ei leitud. Näiteks kirje, mida muudetakse funktsioonis Lapi. |
| NotSupported | 20 | See mängija või seade ei toeta seda toimingut. |
| Numbriline | 24 | Numbrifunktsiooni kasutati valesti. Näiteks Sqrt koos -1-ga. |
| QuoteExceeded | 22 | Salvestuskvoot on ületatud. |
| ReadOnlyValue | 10 | Veerg on kirjutuskaitstud ja seda ei saa muuta. |
| ReadPermission | 19 | Sul ei ole luba andmeallika kirjeid lugeda. |
| Sünkroonimine | 1 | Andmeallikas teatas tõrkest. Vaadake lisateavet veerust Sõnum. |
| Teadmata | 12 | Ilmnes tõrge, kuid tundmatut tüüpi. |
| Kinnitamine | 11 | Kirje ei läbinud valideerimiskontrolli. |