Bendrinti naudojant


Error, IfError, IsError, IsBlankOrError funkcijos

Taikoma: Drobės programos formulių stulpeliai Dataverse Darbalaukio srautai Modeliu pagrįstos programos Power Platform CLI

Aptinka klaidas ir pateikia alternatyvią reikšmę arba atlieka veiksmus. Sukurkite pasirinktinę klaidą arba perduokite klaidą.

Pastaba.

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 Ifteisingų 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 )

Jei x reikšmė yra nulis, ši formulė pateikia 0, nes 1/x rezultatas bus klaida. 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 DS1Patch, kyla problema, vykdoma pirmoji Notify. Daugiau nieko neapdorojama, įskaitant antrąją DS2Patch. 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 pateiks vieno iš savo argumentų reikšmę. Visų reikšmių, kurias gali pateikti IfError, tipai turi būti suderinami.

Paskutiniame pavyzdyje Patch pateiks įrašą, kuris nesuderinamas su Bulio logikos reikšmėmis, naudojamomis su pakeitimo formulėmis 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 jie nesuderinami, antrasis argumentas bus keičiamas, kad atitiktų pirmojo argumento tipą.

Dalybos iš nulio atveju „Excel“ bus rodoma #DIV/0!.

Apsvarstykite galimybę IfError naudoti su tolesniais elementais.

IfError( 1/x, "#DIV/0!" )

Pirmiau pateikta formulė neveiks. Teksto eilutė "#DIV/0!" bus pakeista į pirmojo IfError argumento tipą, kuris yra skaičius. IfError rezultatas bus dar viena klaida, nes teksto eilutės pakeisti negalima. 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ė, o FirstError yra nuoroda į pirmąjį šios lentelės įrašą. FirstError visada pateiks 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. Pvz., jei tai su valdiklio ypatybe susieta formulė, ji bus formoje ControlName.PropertyName.
Apžvelgti Teksto eilutė Vieta, kur vartotojui rodoma klaida, naudojama ataskaitoms. Pvz., jei tai su valdiklio ypatybe susieta formulė, ji bus formoje ControlName.PropertyName.
Informacija Įrašas Informacija apie klaidą. Šiuo metu pateikiama tik tinklo klaidų informacija. Šiame įraše yra HttpStatusCode, kuriame yra HTTP būsenos kodas, ir HttpResponse, kuriame yra jungties arba aptarnavimo atsakymo 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:

Suaktyvintas mygtuko valdiklis, rodantis pranešimą iš funkcijos Notify.

Paprastai būna tik viena klaida, kuriai gali pakakti FirstError veikimo. 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 nebus galima toliau apdoroti klaidos.

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ų apdorojimo, tuščia reikšmė buvo naudojama tiek neapibrėžtoms reikšmėms iš duomenų bazių, tiek klaidų reikšmėms atvaizduoti. 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 klaidą nebus galima apdoroti.

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. Kind – būtina. FirstError gali būti perduota tiesiogiai.
  • ErrorTable – būtina. Klaidų informacijos įrašų lentelė. AllErrors gali būti perduota tiesiogiai.

IfError( Value1, Replacement1 [, Value2, Replacement2, ... [, DefaultResult ] ] )

  • Value(s) – būtina. Formulė (-ės), kurią (-ias) reikia išbandyti ieškant klaidos reikšmės.
  • Replacement(s) – būtina. Formulės, kurias reikia įvertinti, ir reikšmės, kurias reikia pateikti, jei atitinkantys Value argumentai pateikė klaidą.
  • DefaultResult – nebūtina. Vertintinos formulės, jei formulė neranda jokių klaidų.

IsError( Value )
IsBlankOrError( Vertė )

  • Vertė – Būtinas. 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, Notify( "Kilo 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ščias() ) Argumentas yra tuščias, bet ne klaida. klaidinga
IsError( 1/0 ) Argumentas yra klaida. teisingas
If( IsError( 1/0 ), Notify( "Kilo 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ė). teisingas

IsBlankOrError paprastas

Formulė Aprašymas Rezultatas
IsBlankOrError( 1 ) Argumentas nėra klaida ar tuščias. klaidinga
IsBlankOrError( Blank() ) Argumentas yra tuščias. teisingas
IsBlankOrError( 1/0 ) Argumentas yra klaida. teisingas

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 kelios klaidos gali būti perduotos, o kitos nerodomos ir pakeičiamos tam tikra reikšme. Pirmuoju atveju b bus klaidos būsena, nes funkcijoje Value yra netinkamas argumentas. Kadangi to nenumatė formulės kūrėjas, ji perduodama, kad vartotojas ją pamatytų. Antruoju atveju, naudojant tą pačią formulę, b turės reikšmę 0, gautą padalijus 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. Pvz., jei žiotume, kad dalyba iš nulio nebus problema konkrečiame kontekste, naudojant šią formulę šios klaidos gali būti išfiltruotos, o visos kitos klaidos liktų nepaveiktos:

Error( Filter( AllErrors, Kind <> ErrorKind.Div0 ) )

Nuoseklūs veiksmai

  1. Įtraukite teksto įvesties valdiklį ir jį pavadinkite TextInput1 (jei numatytasis jo pavadinimas nėra toks).

  2. Įtraukite žymos valdiklį ir jį pavadinkite Label1 (jei numatytasis jo pavadinimas nėra toks).

  3. Label1 ypatybės Text formulę nustatykite kaip:

    IfError( Value( TextInput1.Text ), -1 )
    
  4. Valdiklyje TextInput1 įveskite 1234.

    Valdiklyje Label1 bus rodoma reikšmė 1234, nes tai yra tinkama funkcijos Value įvestis.

  5. Valdiklyje TextInput1 įveskite ToInfinity.

    Valdiklyje Label1 bus rodoma reikšmė -1, nes tai nėra tinkama funkcijos Value įvestis. Funkcijos Value neapgaubiant funkcija IfError, žymoje nebūtų rodoma jokia reikšmė, nes klaidos reikšmė laikoma tuščia.

Taip pat žr.

Informacija apie „ Power Apps“ formules