Error, IfError, IsError, IsBlankOrError funkcijos
Taikoma: Drobės programos Dataverse formulių stulpeliai Darbalaukio srautai Modeliu pagrįstos programos Power Pages Power Platform CLI
Aptinka klaidas ir pateikia alternatyvią reikšmę arba atlieka veiksmus. Sukurkite pasirinktinę klaidą arba perduokite klaidą.
Pastaba.
Jei programa išjungė formulės lygio klaidų valdymo funkciją, esančią dalyje Pašalinti parametrų>naujinimai>, šios funkcijos neveiks tinkamai.
IfError
Funkcija IfError išbando reikšmes, kol randa klaidą. Jei funkcija aptinka klaidą, ji įvertina ir pateikia atitinkamą pakaitinę reikšmę bei sustabdo tolimesnį vertinimą. Taip pat gali būti pateikta numatytoji reikšmė, kai klaidų nerandama. IfError struktūra primena funkcijos If struktūrą: IfError tikrina ieškodama klaidų, o If – teisingų reikšmių.
Naudokite IfError, kad klaidą pakeistumėte tinkama reikšme – taip galės būti tęsiami tolimesni skaičiavimai. Pavyzdžiui, šią funkciją naudokite, jei gali būti, kad vartotojo įvestis yra dalyba iš nulio:
IfError( 1/x, 0 )
Ši formulė pateikia 0
, jei reikšmė x
lygi nuliui, kaip 1/x
pateikia klaidą. Jei x
nėra nulis, pateikiama 1/x
.
Tolimesnio apdorojimo sustabdymas
Formules sujungiant į grandinę veikimo formulėse, pvz.:
Patch( DS1, ... );
Patch( DS2, ... )
Bus bandoma vykdyti antrąją funkciją Patch su DS2
, net jei Patch su DS1
nepavyksta. Klaida aprėpia tik kiekvieną į grandinę sujungtą formulę.
Naudokite IfError norėdami atlikti veiksmą, o apdorojimą tęskite tik tada, jei veiksmas buvo sėkmingas. IfError taikymas šiame pavyzdyje:
IfError(
Patch( DS1, ... ), Notify( "problem in the first action" ),
Patch( DS2, ... ), Notify( "problem in the second action" )
)
Jei, vykdant DS1
Patch, kyla problema, vykdoma pirmoji Notify. Daugiau nieko neapdorojama, įskaitant antrąją DS2
Patch. Jei pirmoji Patch bus sėkminga, bus vykdoma antroji Patch.
Jei klaidų neaptinkama, pateikiamas pasirenkamasis argumentas DefaultResult (jei pateiktas). Jei šis argumentas nepateiktas, pateikiamas paskutinis Value argumentas.
Remiantis paskutiniu pavyzdžiu, gali būti tikrinama pateikta IfError reikšmė, siekiant nustatyti, ar nebuvo problemų:
IfError(
Patch( DS1, ... ), Notify( "problem in the first action" ); false,
Patch( DS2, ... ), Notify( "problem in the second action" ); false,
true
)
Tipų suderinamumas
IfError grąžina vieno iš savo argumentų reikšmę. Visų reikšmių, kurias gali pateikti IfError, tipai turi būti suderinami.
Paskutiniame pavyzdyje Patch pateikia įrašą, kuris nesuderinamas su Bulio logika, naudojama pakeitimo formulėms arba DefaultResult. Toks veikimo būdas yra tinkamas, nes nėra tokios situacijos, kad IfError pateiktų reikšmę iš šių Patch iškvietų.
Pastaba.
Kol procesas keičiasi, visų IfError argumentų tipai turi būti suderinami šiuo metu.
Paprastame pavyzdyje, kuris buvo aprašytas anksčiau:
IfError( 1/x, 0 )
Tipai 1/x
ir 0
buvo suderinami, kadangi abu yra skaičiai. Jei taip nėra, antrasis argumentas yra priverstas atitikti pirmojo argumento tipą.
Excel rodo#DIV /0! kai įvyksta padalijimas iš nulio.
Apsvarstykite galimybę IfError naudoti su tolesniais elementais.
IfError( 1/x, "#DIV/0!" )
Pirmiau pateikta formulė neveiks. Teksto eilutė "#DIV/0!"
yra priversta pagal pirmojo argumento tipą į IfError, kuris yra skaičius. "IfError " rezultatas yra dar viena klaida, nes teksto eilutės negalima priversti. Problemą ištaisykite pirmąjį argumentą konvertuodami į teksto eilutę, kad IfError visada pateiktų teksto eilutę:
IfError( Text( 1/x ), "#DIV/0!" )
Kaip matyti pirmiau, jei Replacement arba DefaultResult yra klaida, IfError gali pateikti klaidą.
Pirmoji klaida / Visos klaidos
Pakeitimo formulėse informacija apie rastas klaidas yra pasiekiama naudojant FirstError įrašą ir AllErrors lentelę. AllErrors yra klaidų informacijos įrašų lentelė, kurioje FirstError yra nuoroda į pirmąjį šios lentelės įrašą. FirstError visada grąžina tą pačią reikšmę kaip First (AllErrors ).
Klaidų įrašai apima:
Laukas | Tipas | Aprašą |
---|---|---|
Rūšis | ErrorKind išvardijimas (skaičius) | Klaidos kategorija. |
Pranešimas | Teksto eilutė | Pranešimas apie klaidą, tinkamas rodyti galutiniam vartotojui. |
Šaltinis | Teksto eilutė | Vieta, kur atsirado klaida, naudojama ataskaitoms. Pavyzdžiui, formulės, susietos su valdiklio ypatybe, reikšmė yra formoje ControlName.PropertyName. |
Pastebėta | Teksto eilutė | Vieta, kur vartotojui rodoma klaida, naudojama ataskaitoms. Pavyzdžiui, formulės, susietos su valdiklio ypatybe, reikšmė yra formoje ControlName.PropertyName. |
Išsami informacija | Įrašas | Informacija apie klaidą. Šiuo metu išsami informacija pateikiama tik apie tinklo klaidas. Šis įrašas apima HttpStatusCode , kuriame yra HTTP būsenos kodas, ir HttpResponse , kuriame yra atsakymas iš jungties arba tarnybos tekstas. |
Pavyzdžiui, apsvarstykite galimybę šią formulę naudoti kaip mygtuko valdiklio ypatybę OnSelect:
Set( a, 1/0 )
O ši formulė antrojo OnSelect ypatybė antrajam Mygtukui valdikliui:
IfError( a, Notify( "Internal error: originated on " & FirstError.Source & ", surfaced on " & FirstError.Observed ) )
Aukščiau pateiktoje formulės pavyzdyje rodoma ši reklaminė juosta, kai du mygtukai aktyvuojami seka:
Paprastai bus tik viena klaida, su kuria "FirstError" gali pakankamai dirbti. Tačiau yra scenarijų, kai gali būti pateiktos kelios klaidos. Pvz., naudojant formulės sujungimo į grandinę operatorių arba funkciją Concurrent ". Net ir šiais atvejais gali užtekti pranešti apie FirstError norint parodyti problemą, užuot apkrovus vartotoją keliomis klaidomis. Jei vis tiek būtina dirbti su kiekviena klaida atskirai, galite naudoti lentelę AllErrors.
IsError
Funkcija IsError tikrina, ar nėra klaidos reikšmės.
Pateikiama reikšmė yra true arba false Bulio logikos reikšmė.
Naudojant IsError užkertamas kelias tolesniam klaidos apdorojimui.
IsBlankOrError
IsBlankOrError tuščios reikšmės arba klaidos reikšmės Is Reikšmių Ir yra lygiaverčiai Or( IsBlank( X ), IsError( X ) )
.
Įjungiant klaidos valdymą esančioms programoms, apgalvokite pakeisti IsBlank su IsBlankOrError siekiant išsaugoti esančios programos elgesį. Prieš pridedant klaidų apdorojimą, tuščia reikšmė buvo naudojama tiek neapibrėžtoms reikšmėms iš duomenų bazių, tiek klaidų reikšmėms pateikti. Klaidų apdorojimas atskiria šias dvi tuščios interpretacijas, kurios gali pakeisti esamų programų, kurios ir toliau naudoja IsBlank veikimą.
Pateikiama reikšmė yra true arba false boolean reikšmė.
Naudojant IsBlankOrError užkertamas kelias tolesniam klaidos apdorojimui.
Naudokite funkciją Error norėdami sukurti ir pranešti apie pasirinktinę klaidą. Pavyzdžiui, jums gali atrodyti logiška nustatyti, ar kuri nors duotoji reikšmė tinka jūsų kontekstui, ar ne – tai, ko nepatikrinsi automatiškai, ar nėra problemos. Galite sukurti ir pateikti savo klaidą, užpildykite Rūšis ir Pranešimas, naudodami tą patį įrašą, pirmiau aprašytą funkcijai IfError.
IfError kontekste naudokite funkciją Error, kad permestumėte arba perduotumėte klaidą. Pvz., jūsų logika funkcijoje IfError gali nuspręsti, kad kai kuriais atvejais klaidos galima saugiai nepaisyti, bet kitais atvejais ta klaida yra svarbi ir ją reikia išsiųsti. Funkcijoje IfError arba App.OnError naudokite Error( FirstError ), kad perduotumėte klaidą.
Naudojant funkciją Error taip pat gali būti perduodama klaidų lentelė, kaip tai būtų pateikiama AllErrors lentelėje. Naudokite Error( AllErrors ), kad permestumėte visas klaidas, o ne tik pirmąją.
Perdavus tuščią įrašą arba tuščią lentelę funkcijai Error, negaunama klaidos.
Sintaksė
Error( ErrorRecord )
Error( ErrorTable )
- ErrorRecord – būtina. Klaidos informacijos įrašas, įskaitant Rūšis, Pranešimas ir kitus laukus. Reikia natūros . "FirstError" galima perduoti tiesiogiai.
- ErrorTable – būtina. Klaidų informacijos įrašų lentelė. "AllErrors" galima perduoti tiesiogiai.
IfError(reikšmė1,pakeitimas1 [, reikšmė2,pakeitimas2 , ... [, DefaultResult ] ] )
- Vertybės – būtina. Formulė (-ės), kurią (-ias) reikia išbandyti ieškant klaidos reikšmės.
- Pakeitimai - Būtina. Formulės, kurias reikia įvertinti, ir reikšmės, kurias reikia pateikti, jei atitinkantys Value argumentai pateikė klaidą.
- DefaultResult – neprivaloma. Vertintinos formulės, jei formulė neranda jokių klaidų.
IsError( reikšmė )
IsBlankOrError( reikšmė )
- reikšmė – būtina. Tikrintinė formulė.
Pavyzdžiai
Paprastoji IfError
Formulė | Aprašymas | Rezultatas |
---|---|---|
IfError( 1, 2 ) | Pirmasis argumentas nėra klaida. Funkcija neturi kitų tikrintinų klaidų ir jokios numatytosios pateikiamos reikšmės. Funkcija pateikia paskutinį įvertintą reikšmės argumentą. | 1 |
IfError( 1/0, 2 ) | Pirmasis argumentas pateikia klaidos reikšmę (dėl dalybos iš nulio). Funkcija įvertina antrąjį argumentą ir jį pateikia kaip rezultatą. | 2 |
IfError( 10, 20, 30 ) | Pirmasis argumentas nėra klaida. Funkcija neturi kitų tikrintinų klaidų, tačiau turi numatytąją pateikiamą reikšmę. Funkcija pateikia DefaultResult argumentą. | 30 |
IfError( 10, 11, 20, 21, 300 ) | Pirmasis argumentas 10 nėra klaida, todėl funkcija nevertina to argumento atitinkamo pakaito 11. Trečiasis argumentas 20 irgi nėra klaida, todėl funkcija nevertina to argumento atitinkamo pakaito 21. Penktasis argumentas 300 neturi atitinkamo pakaito ir yra numatytasis rezultatas. Funkcija tą rezultatą pateikia, nes formulėje nėra klaidų. | 300 |
IfError( 1/0, Pranešti( "Buvo vidinė problema" ) ) | Pirmasis argumentas pateikia klaidos reikšmę (dėl dalybos iš nulio). Funkcija įvertina antrąjį argumentą ir vartotojui pateikia pranešimą. Pateikiama IfError reikšmė yra pateikiama Notify reikšmė, pakeista į tą patį tipą, kaip pirmasis IfError argumentas (skaičius). | 1 |
Paprastoji IsError
Formulė | Aprašas | Rezultatas |
---|---|---|
IsError( 1 ) | Argumentas nėra klaida. | klaidinga |
IsError( tuščia() ) | Argumentas yra tuščias, bet ne klaida. | klaidinga |
IsError( 1/0 ) | Argumentas yra klaida. | Tiesa |
Jei( IsError( 1/0 ), Pranešti( "Buvo vidinė problema" ) ) | IsError argumentas pateikia klaidos reikšmę (dėl dalybos iš nulio). Ši funkcija pateikia teisinga, kuri sukielia jei siekiant rodyti pranešimą vartotojui su Pranešti funkcija. Pateikiama If reikšmė yra pateikiama Notify reikšmė, pakeista į tą patį tipą, kaip pirmasis If argumentas (Bulio logikos reikšmė). | Tiesa |
IsBlankOrError paprastas
Formulė | Aprašymas | Rezultatas |
---|---|---|
IsBlankOrError( 1 ) | Argumentas nėra klaida ar tuščias. | klaidinga |
IsBlankOrError( Tuščia() ) | Argumentas yra tuščias. | Tiesa |
IsBlankOrError( 1/0 ) | Argumentas yra klaida. | Tiesa |
Paprastoji klaida
Šiame pavyzdyje datos patikrinamos viena su kita ir, jei yra problema, gaunama klaida.
If( StartDate > EndDate,
Error( { Kind: ErrorKind.Validation, Message: "Start Date must be before End Date" } ) )
Šiame pavyzdyje kai kurioms klaidoms leidžiama praeiti, o kitos yra slopinamos ir pakeičiamos reikšme. Pirmuoju atveju b yra klaidos būsenoje, nes funkcija Reikšmė turi netinkamą argumentą. Kadangi formulės rašytojas tai netikėta, jis perduodamas, kad vartotojas jį matytų. Antruoju atveju, naudojant tą pačią formulę,b turi reikšmę 0, todėl padalijimas iš nulio. Tokiu atveju formulės kūrėjas gali žinoti, kad tai priimtina šiai logikai, nerodyti klaidos (nerodoma jokia juosta) ir vietoje to pateikti -1.
With( {a: 1, b: Value("a")},
IfError( a/b, If( FirstError.Kind <> ErrorKind.Div0, Error( FirstError ), -1 ) ) )
// returns an error with Kind = ErrorKind.InvalidArgument
With( {a: 1, b: 0} )
IfError( a/b, If( FirstError.Kind <> ErrorKind.Div0, Error( FirstError ), -1 ) ) )
// returns -1
Lentelę AllErrors galima filtruoti kaip bet kurią kitą lentelę. Naudojant su funkcija Error, numatomas klaidas galima pašalinti, o likusias klaidas – palikti ir apie jas pranešti. Pavyzdžiui, jei žinojome, kad padalijimas iš nulio nebus problema tam tikrame kontekste, šias klaidas galima išfiltruoti, paliekant visas kitas klaidas nepažeistas naudojant šią formulę:
Error( Filter( AllErrors, Kind <> ErrorKind.Div0 ) )
Nuoseklūs veiksmai
Įtraukite teksto įvesties valdiklį ir jį pavadinkite TextInput1 (jei numatytasis jo pavadinimas nėra toks).
Įtraukite žymos valdiklį ir jį pavadinkite Label1 (jei numatytasis jo pavadinimas nėra toks).
Label1 ypatybės Text formulę nustatykite kaip:
IfError( Value( TextInput1.Text ), -1 )
Valdiklyje TextInput1 įveskite 1234.
Label1 rodo reikšmę 1234 , nes tai yra tinkama funkcijos Reikšmė įvestis.
Valdiklyje TextInput1 įveskite ToInfinity.
Label1 rodo reikšmę-1 , nes tai nėra tinkama funkcijos Reikšmė įvestis. Funkcijos Value neapgaubiant funkcija IfError, žymoje nebūtų rodoma jokia reikšmė, nes klaidos reikšmė laikoma tuščia.