Jagamisviis:


Funktsioonid Error, IfError, IsError, IsBlankOrError

Kehtib: Lõuendirakenduste Dataverse valemiveerud Töölauavood Mudelipõhised rakendused Power Platform CLI

Tuvastab tõrked ja pakub alternatiivset väärtust või võtab meetmeid. Looge kohandatud tõrge või läbige tõrge.

Märkus.

IfError

IfError funktsioon testib väärtusi, kuni leiab tõrke. Kui funktsioon avastab tõrke, siis funktsioon arvutab ja tagastab vastava asendamise väärtuse ning peatab edasise hindamise. Vaikeväärtuse saab esitada ka juhul, kui vigu ei leita. Funktsiooni IfError struktuur meenutab funkstiooni If oma: IfError testib vigu, kui If testib väärtust tõene.

Kasutage funkstiooni IfError, et asendada sobiva väärtusega tõrge, et järgnevad etapilised arvutused saaksid jätkuda. Kasutage seda funktsiooni näiteks juhul, kui kasutaja sisestus võib põhjustada nulliga jagamist.

IfError( 1/x, 0 )

See valem naaseb väärtusele 0 juhul, kui väärtus x on null, kuna 1/x tulemuseks on tõrge. Kui x pole null, siis tagastatakse 1/x.

Edasise töötlemise peatamine

Kui aheldatakse valemid kokku käitumise valemites, näiteks:

Patch( DS1, ... );
Patch( DS2, ... )

Teine funktsioon Patch väärtusele DS2 proovitakse ka siis, kui PatchDS1 ei õnnestu. Tõrke ulatus on piiratud iga aheldatud valemiga.

Kasutage funkstiooni IfError toimingu tegemiseks ja jätkake töötlemist ainult siis, kui toiming õnnestus. Funktsiooni IfError rakendamine selles näites.

IfError(
    Patch( DS1, ... ), Notify( "problem in the first action" ),
    Patch( DS2, ... ), Notify( "problem in the second action" )
)

Kui funktsioonil Patch väärtusel DS1 on probleem, siis käivitatakse esimene teavitamine. Edasist töötlemist ei toimu, sh teine Patch väärtusel DS2. Kui esimene Patch on edukas, siis teine Patch käivitub.

Kui see on saadaval tagastatakse valikuline DefaultResult argument juhul, kui tõrkeid ei avastata. Ilma selle argumendita viimane argument Value tagastatakse.

Viimase näite loomisel saab kontrollida IfError poolt tagastatavat väärtust, et teha kindlaks, kas seal oli probleeme.

IfError(
    Patch( DS1, ... ), Notify( "problem in the first action" );  false,
    Patch( DS2, ... ), Notify( "problem in the second action" ); false,
    true
)

Tüübi ühilduvus

IfError tagastab ühe selle argumendi väärtuse. Kõikide IfError poolt tagastatavad väärtuste tüübid peavad olema ühilduvad.

Viimases näites tagastab Patch, mis ei ühildu kahendmuutujatega, mida kasutatakse Replacement valemites või DefaultResult-is. Mis on hea, sest puudub olukord, kus nende Patch väljakutsete tagastusväärtus tagastatakse IfError poolt.

Märkus.

Kui käitumine on muutunud, peavad kõik funkstiooni IfError argumendid olema praegu ühilduvad.

Eespool kirjeldatud lihtsas näites:

IfError( 1/x, 0 )

Tüübid 1/x ja 0 on mõlemad ühilduvad, sest mõlemad on numbrid. Kui nad ei ole, siis teine argument määratakse vastavalt esimese argumendi tüübile.

Excel kuvab #DIV/0!, kui jagatakse nulliga.

Proovige IfError järgmisega selle asemel.

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

Ülaltoodud valem ei tööta. Tekstistring "#DIV/0!" määratakse funktsiooni IfError esimese argumendi tüübiks, mis on arv. Funktsiooni IfError tulemus on veel üks tõrge, kuna tekstistringi ei saa teisendada. Lahenduseks teisendage esimene argument tekstistringiks, nii et IfError tagastaks alati tekstistringi.

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

Nagu eespool öeldud, võib IfError tagastada vea, kui Replacement või DefaultResult on viga.

Esimene tõrge/ Kõik tõrked

Asendusvalemite sees on tõrgete kohta leitud teave saadaval Esimese tõrke kirjes ja Kõikide tõrgete tabelis. Kõik tõrked on tõrketeabega tabeli kirjed, millest esimene tõrge on otsetee selle tabeli esimese kirjeni. Esimene tõrge tagastab alati sama väärtuse muutujaga First( AllErrors ).

Tõrkekirjed sisaldavad järgmist.

Väli Tüüp Kirjeldus
Liik ErrorKind enum (number) Tõrke kategooria.
Saada sõnum Tekstistring Teade tõrke kohta, mis sobib lõppkasutajale kuvamiseks.
Lähtekeel Tekstistring Asukoht, kust tõrge on pärit. Seda kasutatakse aruandluses. Juhtelemendi atribuudiga seotud valem on näiteks vormingus ControlName.PropertyName.
Arvesse võetud Tekstistring Asukoht, kus tõrge ilmneb kasutajale. Seda kasutatakse aruandluseks. Juhtelemendi atribuudiga seotud valem on näiteks vormingus ControlName.PropertyName.
Üksikasjad Kirje Üksikasjad tõrke kohta. Praegu esitatakse üksikasju ainult võrgutõrgete kohta. See kirje sisaldab koode HttpStatusCode, mis hõlmab HTTP olekukoodi, ja HttpResponse, mis hõlmab vastuse sisu konnektorist või teenusest.

Näiteks kaaluge järgmist valemit, kui juhtelemendi Nupp atribuuti OnSelect:

Set( a, 1/0 )

Ja see valem OnSelect atribuudi teise Nupp kontrollis:

IfError( a, Notify( "Internal error: originated on " & FirstError.Source & ", surfaced on " & FirstError.Observed ) )

Ülaltoodud näitevalem kuvab järgmise banneri, kui kaks nuppu on järjest aktiveeritud:

Aktiveeritakse nupu juhtelement, mis näitab teadet funktsioonilt Notify.

Tavaliselt esineb vaid üks tõrge, millega esimene tõrge tuleb edukalt toime. Siiski leidub olukordi, kus võidakse tagastada mitu tõrget. Näiteks siis, kui kasutatakse valemi tõstmistehtemärki või samaaegset funktsiooni. Isegi sellistes olukordades võib esimese tõrke teade olla piisav probleemi nägemiseks, selle asemel, et koormata kasutajat liigselt mitmete tõrgetega. Kui teil on siiski vaja teha tööd iga tõrkega individuaalselt, võite kasutada kõikide tõrgete tabelit.

IsError

Funktsioon IsError testib vea väärtust.

Tagastusväärtus on loogikaväärtus: tõene või väär.

Funktsiooni IsError kasutamine aitab vältida tõrke edasist töötlemist.

IsBlankOrError

Funktsiooni IsBlankOrError funktsiooni testid tühiväärtuse või tõrkeväärtusega ja on ekvivalentne Or( IsBlank( X ), IsError( X ) ).

Olemasolevate rakenduste tõrkeotsingu lubamisel kaaluge rakenduse IsBlank koos IsBlankOrError asendamist olemasoleva rakenduse olemusega. Enne tõrkekäsitluse kasutamist kasutati tühi väärtust, et tähistada nii andmebaasi nullväärtusi kui ka tõrkeväärtusi. Tõrkekäsitlus eraldab need kaks tühja rakendusse, mis võivad muuta olemasolevate rakenduste käitumist, mis kasutavad jätkuvaltIsBlank funktsiooni.

Tagastusväärtus on kahendmuutuja tõene või väär.

Kasutades IsBlankOrError kasutamine takistab tõrke edasist töötlemist.

Kasutage kohandatud tõrgete loomiseks ja nendest teatamiseks funktsiooni Tõrge. Näiteks võib teil olla loogika määratlemaks seda, kas mõni antud väärtus on kehtiv teie konteksti jaoks – seda ei kontrollita probleemi puhul automaatselt. Teil on võimalik luua ja tagastada oma tõrge koos funktsioonidega Liik ning Sõnum, kasutades sama ülalkirjeldatud kirjet funktsiooni IfError jaoks.

Funktsiooni IfError kontekstis kasutage funktsiooni Tõrge tõrke uuesti kõrvaldamiseks või läbimiseks. Näiteks võib teie loogika funktsioonis IfError otsustada, et mõnedel juhtudel võib tõrget ohutult eirata, kuid teistel juhtudel on tõrge edastamiseks piisavalt oluline. Funktsioonides IfError või App.OnError kasutage funktsiooni Error( FirstError ) tõrke vahendamiseks.

Funktsioonile Tõrge võib edastada ka tõrgetetabeli, nagu oleks leitav kõikide tõrgete tabelis. Kasutage funktsiooni Error( AllErrors ) kõigi tõrgete, mitte ainult esimese, uuesti kõrvaldamiseks.

Tühja kirje või tühja tabeli, mis edastatakse funktsioonile Tõrge, tulemuseks pole ühtegi tõrget.

Süntaks

Tõrge( ErrorRecord )
Tõrge( ErrorTable )

  • ErrorRecord – nõutav. Tõrketeabe kirje, sh liik, sõnum ja muud väljad. Liik on kohustuslik. Esimest tõrget on võimalik otse edastada.
  • ErrorTable – nõutav. Tõrketeabe kirjete tabel. Kõiki tõrkeid on võimalik otse edastada.

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

  • Väärtus(ed) – nõutav. Valemid vea väärtuse testimiseks..
  • Asendus(ed) – nõutav. Hinnatavad valemid ja tagastatavad väärtused, kui vastavad argumendid Value tagastasid vea.
  • DefaultResult – valikuline. Valemid, mida hinnatakse, kui valem ei leia tõrkeid.

IsError( Value )
IsBlankOrError( Väärtus )

  • Väärtus – Nõutav. Testitav valem.

Näited

Lihtne IfError

Valem Kirjeldus Tulemus
IfError( 1, 2 ) Esimene argument pole tõrge. Funktsioonil ei ole muid tõrkeid, mida kontrollida, ja tagastamise vaikeväärtust. Funktsioon tagastab viimase hinnatava value argumendi. 1
IfError( 1/0, 2 ) Esimene argument tagastab veaväärtuse (nulliga jagamise tõttu). Funktsiooni abil hinnatakse teist argumenti ja tagastatakse see tulemina. 2
IfError( 10, 20, 30 ) Esimene argument pole tõrge. Funktsioonil ei ole muid tõrkeid, mida kontrollida, kuid on tagastatav vaikeväärtus. Funktsioon tagastab DefaultResult argumendi. 30
IfError( 10, 11, 20, 21, 300 ) Esimene argument 10 ei ole viga, seega ei hinda funktsioon selle argumenti vastavat asendamist 11. Kolmas argument 20 ei ole samuti viga, seega ei hinda funktsioon selle argumenti vastavat asendamist 21. Viiendal argumentil 300 puudub vastav asendus ja see on vaiketulem. Funktsioon tagastab selle tulemi, kuna valem ei sisalda tõrkeid. 300
IfError( 1/0, Notify( "Tekkis sisemine probleem" ) ) Esimene argument tagastab veaväärtuse (nulliga jagamise tõttu). Funktsioon hindab teist argumenti ja kuvab kasutajale sõnumi. Funkstiooni IfError tagastusväärtus on funktsiooni Notify tagastusväärtus, teisendatud samasse tüüpi kui funktsioni IfError esimene argument (number). 1

Lihtne IsError

Valem Kirjeldus Tulemus
IsError( 1 ) Argument pole tõrge. false
IsError( Blank() ) Argument on tühi, kuid mitte tõrge. false
IsError( 1/0 ) Argument on tõrge. tõene
If( IsError( 1/0 ), Notify( "Tekkis sisemine probleem" ) ) Funktsiooni IsError argument tagastab tõrkeväärtuse (nulliga jagamise tõttu). See funktsioon tagastab väärtuse tõene, mis põhjustab If sõnumit, kui kasutada Notify funktsiooni. Funkstiooni If tagastusväärtus on funktsiooni Notify tagastusväärtus, teisendatud samasse tüüpi kui funktsioni If esimene argument (kahendmuutuja). tõene

Lihtne IsBlankOrError

Valem Kirjeldus Tulemus
IsBlankOrError( 1 ) Argument on tühi, kuid mitte tõrge. false
IsBlankOrError( Blank() ) Argument on tühi. tõene
IsBlankOrError( 1/0 ) Argument on tõrge. tõene

Lihtne tõrge

Selles näites kinnitatakse kuupäevad üksteise suhtes, mille tulemuseks on tõrge, kui seal esineb probleem.

If( StartDate > EndDate,
    Error( { Kind: ErrorKind.Validation, Message: "Start Date must be before End Date" } ) )

Selles näites lubatakse mõnedel tõrgetel läbi minna, samas kui teised surutakse maha ja asendatakse väärtusega. Esimesel juhul on b tõrkeolekus, kuna funktsioonil Väärtus on sobimatu argument. Kuna see on valemi kirjutajalt ootamatu, lastakse see läbi, nii et kasutaja näeb seda. Teisel juhul on b-l sama valemiga väärtuseks 0, mille tulemuseks on nulliga jagamine. Sellisel juhul võib valemi kirjutaja teada, et see on selle loogika puhul vastuvõetav, suruda tõrke maha (ühtegi riba ei kuvata) ja tagastada hoopiski -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

Tabelit Kõik tõrked saab filtreerida nagu kõiki teisi tabeleid. Kasutades funktsiooniga Tõrge, on võimalik eeldatavaid tõrkeid eemaldada ning ülejäänud tõrkeid säilitada ja nendest teavitada. Kui me näiteks teaksime, et nulliga jagamine pole probleemiks konkreetses kontekstis, oleks võimalik need tõrked välja filtreerida, jättes kõik teised tõrked puutumata järgmise valemiga.

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

Samm-sammult

  1. Lisage juhtelement tekstisisend ja nimetage see TekstInput1, kui see pole vaikimisi selle nimega.

  2. Lisage juhtelement silt ja nimetage see Silt1, kui see pole vaikimisi selle nimega.

  3. Seadke valem juhtelemendi Silt1 atribuudile Tekst:

    IfError( Value( TextInput1.Text ), -1 )
    
  4. Väljale TextInput1, sisestage 1234.

    Silt1 näitab väärtust 1234, kuna see on sobiv sisend funktsioonile Value.

  5. Väljale TextInput1, sisestage ToInfinity.

    Silt1 näitab väärtust -1, kuna see pole sobiv sisend funktsioonile Value. Kui funktsiooni Value pole mähitud funktsiooniga IfError, ei kuva silt väärtust, kuna tõrget käsitletakse tühjana.

Vt ka

Valemi viide Power Appsile