Error-, IfError-, IsError-, IsBlankOrError-funktio

Koskee seuraavia: Pohjaan perustuvat sovellukset Dataverse -kaavasarakkeet Työpöytätyökulut Mallipohjaiset sovellukset Power Platform CLI

Havaitsee virheitä ja tarjoaa vaihtoehtoisen arvon tai suorittaa toiminnon. Luo mukautettu virhe tai välitä virhe.

Muistiinpano

IfError

IfError-funktio testaa arvoja, kunnes se löytää virheen. Jos toiminto havaitsee virheen, funktio laskee ja palauttaa vastaavan korvaavan arvon ja pysäyttää lisäarvioinnin. Oletusarvo voidaan määrittää silloin, kun virheitä ei löydy. IfError-funktion rakenne muistuttaa If-funktion rakennetta: IfError testaa virheitä, mutta If testaa tosi-arvoja.

Käytä IfError-funktiota, kun haluat korvata virheen kelvollisella arvolla, jotta loppupään laskelmia voidaan jatkaa. Käytä tätä toimintoa esimerkiksi silloin, jos käyttäjän syöte voi aiheuttaa jaon nollalla:

IfError( 1/x, 0 )

Tämä kaava palauttaa 0, jos arvo x on nolla, koska 1/x tuottaisi virheen. Jos x ei ole nolla, palautetaan 1/x.

Lisäkäsittelyn lopettaminen

Kun ketjutetaan kaavoja yhteen käyttäytymisskaavoissa, kuten:

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

Toista Patch-toimintoa yritetään kohteelle DS2, vaikka Patch kohteelle DS1 epäonnistuisi. Virheen vaikutusalue rajoittuu kuhunkin ketjutettavaan kaavaan.

Käytä IfError-funktiota suorittamaan toiminto ja jatkamaan käsittelyä vain, jos toiminto onnistui. IfError-funktion käyttäminen tässä esimerkissä:

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

Jos kohteen DS1Patch-funktiossa on ongelma, ensimmäinen Notify suoritetaan. Jatkokäsittelyä ei tapahdu (Patch kohteelle DS2). Jos ensimmäinen Patch onnistuu, toinen Patch suoritetaan.

Valinnainen DefaultResult-argumentti palautetaan, jos virheitä ei löydetä. Jos argumenttia ei ole, funktio palauttaa viimeisen Value-argumentin.

Edellisen esimerkin pohjalta voidaan tarkistaa IfError-funktion paluuarvo ja selvittää, onko ongelmia:

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

Tyypin yhteensopivuus

IfError palauttaa yhden argumenttinsa arvon. Kaikkien niiden arvojen tyyppien, jotka IfError voi palauttaa, on oltava yhteensopivia.

Viimeisessä esimerkissä Patch palauttaa tietueen, joka ei ole yhteensopiva Replacement-kaavan tai DefaultResult-kohteen totuusarvojen kanssa. Tämä toimii hyvin, koska ei ole mitään tilannetta, jossa paluuarvo näistä Patch-kutuista palautettaisiin IfError-funktiosta.

Muistiinpano

Vaikka prosessin toiminnallisuus saattaa muuttua, kaikkien IfError-argumentin tyyppien on oltava yhteensopivia tällä hetkellä.

Aiemmin kuvattussa yksinkertaisessa esimerkissä:

IfError( 1/x, 0 )

Tyypit 1/x ja 0 olivat yhteensopivia, sillä kumpikin oli numero. Jos ne eivät ole, toinen argumentti pakotetaan vastaamaan ensimmäisen argumentin tyyppiä.

Excel näyttää #DIV/0!, kun jako nollalla tapahtuu.

Katsotaan IfError-funktiota sen sijaan seuraavassa tilanteessa:

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

Yllä oleva kaava ei toimi. Tekstimerkkijono "#DIV/0!" pakotetaan ensimmäisen IfError-argumentin tyypiksi, joka on numero. IfError-tulos on jälleen yksi virhe, koska tekstimerkkijonoa ei voi pakottaa. Korjaa tilanne ja muunna ensimmäinen argumentti tekstimerkkijonoksi niin, että IfError palauttaa aina tekstimerkkijonon:

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

Kuten edellä on todettu, IfError voi palauttaa virheen, jos Replacement tai DefaultResult on virhe.

FirstError/AllErrors

Korvauskaavoissa löydettyjä virheitä koskevia tietoja on saatavilla FirstError-tietueessa ja AllErrors-taulukossa. AllErrors on virhetietotietueiden taulukko, kun taas FirstError on kyseisen taulukon ensimmäiseen tietueeseen vievä pikakuvake. FirstError palauttaa aina saman arvon kuin First( AllErrors ).

Virhetietueiden sisältö:

Kenttä Tyyppi Kuvaus
Laji ErrorKind-luettelointi (numero) Virheen luokka.
Sanoma Tekstimerkkijono Virhesanoma, joka voidaan näyttää loppukäyttäjälle.
Lähde Tekstimerkkijono Virheen alkuperäsijainti, jota käytetään raportointiin. Esimerkiksi ohjausobjektiominaisuuteen sidotulla kaavalla tämä on muotoa ControlName.PropertyName.
Havainto Tekstimerkkijono Raportointiin käytettävä sijainti, jossa virhe tulee näkyviin käyttäjälle. Esimerkiksi ohjausobjektiominaisuuteen sidotulla kaavalla tämä on muotoa ControlName.PropertyName.
Tiedot Tietue Virhettä koskevia tietoja. Tällä hetkellä tietoja annetaan vain verkkovirheiden osalta. Tämä tietue sisältää HttpStatusCode-koodin, joka vuorostaan sisältää HTTP-tilakoodin sekä yhdistimen tai palvelun vastauksen tekstin sisältävän HttpResponse-vastauksen.

Voit esimerkiksi käyttää seuraavaa kaavaa OnSelect-ominaisuudessa Button-ohjausobjektissa:

Set( a, 1/0 )

Ja tämä kaava toisen Button-ohjausobjektin OnSelect-ominaisuudessa:

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

Edellä oleva esimerkkikaava näyttää seuraavan ilmoituspalkin, kun kaksi painiketta aktivoidaan järjestyksessä:

Button-ohjausobjekti aktivoitu, ilmoituksen näyttäminen Notify-toiminnosta.

Tyypillisesti on olemassa vain yksi virhe, jonka kanssa FirstError toimii riittävästi. On kuitenkin tilanteita, joissa palautetaan useita virheitä. Esimerkkejä tästä ovat kaavanketjutusoperaattorin tai Concurrent-funktion käyttö. Jopa näissä tilanteissa FirstError-virheen raportointi voi riittää ongelman paljastamiseen sen sijaan että käyttäjää ylikuormitettaisiin useilla virheillä. Jos sinun on tästä huolimatta käsiteltävä jokainen virhe yksilöllisesti, voit käyttää AllErrors-taulukkoa.

IsError

IsError-funktio testaa virhearvoa.

Palautusarvo on totuusarvo true tai false.

IsError-toiminnon käyttäminen estää virheen käsittelemisen edelleen.

IsBlankOrError

IsBlankOrError-funktio testaa joko tyhjän arvon tai virhearvon, ja vastaa Or( IsBlank( X ), IsError( X ) )-funktioita.

Kun otat virhekäsittelyn käyttöön nykyisissä sovelluksissa, harkitse IsBlank-funktion korvaamista IsBlankOrError-funktiolla nykyisen sovelluskäyttäytymisen säilyttämiseksi. Ennen virheenkäsittelyn lisääminen käytettiin tyhjä-arvoa edustamaan sekä tietokantojen null-arvoja että virhearvoja. Virheenkäsittely erottaa nämä kaksi blank-arvon tulkintaa, jotka voivat muuttaa IsBlank-arvoa käyttävien sovellusten toimintaa.

Palautusarvo on totuusarvo true tai false.

IsBlankOrError-funktion käyttö estää virheen jatkokäsittelyn.

Error-toiminnon avulla voit luoda ja raportoida mukautetun virheen. Sinulla voi esimerkiksi olla logiikkaa sen määrittämiseen, onko jokin arvo kelvollinen tilanteessasi – tätä ei nimittäin tarkisteta automaattisesti ongelmien yhteydessä. Voit luoda ja palauttaa oman virheesi, täydentää sen arvoilla Laji ja Sanoma käyttäen edellä IfError-funktion yhteydessä kuvattua tietuetta.

Käytä IfError-kontekstissa Error-funktiota virheen uudelleen käynnistämiseen välittämiseen. Esimerkiksi logiikkasi IfError-funktiossa voi päättää, että virhe voidaan ohittaa turvallisesti joissakin tilanteissa ja että sen välittäminen toisessa tilanteessa on tärkeää. Käytä funktiossa IfError tai App.OnError funktiota Error( FirstError ) virheen välittämiseen.

Error-funktio voidaan välittää myös virhetaulukkona, joka löytyy AllErrors-taulukosta. Voit käynnistää kaikki virheet uudestaan ensimmäisen sijaan käyttämällä funktiota Error( AllErrors ).

Error-funktioon välitetty tyhjä tietue tai tyhjä taulukko ei tuota tuloksesi virhettä.

Syntaksi

Error( ErrorRecord )
Error( ErrorTable )

  • ErrorRecord – Pakollinen. Virhetietotietue, joka sisältää kentät Laji, Sanoma ja muita kenttiä. Laji on pakollinen. FirstError voidaan välittää suoraan.
  • ErrorTable – Pakollinen. Virhetietotietueiden taulukko. AllErrors voidaan välittää suoraan.

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

  • Value(s) – Pakollinen. Kaavat virhearvojen testaamiseksi.
  • Replacement(s) – pakollinen. Arvioitavat kaavat ja palautettavat arvot, jos vastaavat Value-argumentit palauttivat virheen.
  • DefaultResult – Valinnainen. Kaavat, joilla arvioidaan, onko kaavassa virheitä.

IsError( Value )
IsBlankOrError( Value )

  • Value – pakollinen. Testattava kaava.

Esimerkit

Yksinkertainen IfError

Kaava Kuvaus Tulos
IfError( 1, 2 ) Ensimmäinen argumentti ei ole virhe. Toiminnossa ei ole muita tarkistettavia virheitä eikä oletuspalautusarvoa. Funktio palauttaa viimeisen arvioidun Value-argumentin. 1
IfError( 1/0, 2 ) Ensimmäinen argumentti palauttaa virhearvon (jakolasku nollalla). Funktio laskee toisen argumentin ja palauttaa sen tuloksena. 2
IfError( 10, 20, 30 ) Ensimmäinen argumentti ei ole virhe. Toiminnossa ei ole muita tarkistettavia virheitä, mutta siinä on oletuspalautusarvo. Funktio palauttaa DefaultResult-argumentin. 30
IfError( 10, 11, 20, 21, 300 ) Ensimmäinen argumentti 10 ei ole virhe, joten funktio ei arvioi kyseisen argumentin korvaavaa arvoa 11. Kolmas argumentti 20 ei myöskään ole virhe, joten funktio ei arvioi kyseisen argumentin korvaavaa arvoa 21. Viidennessä argumentissa 300 ei ole vastaavaa korvausta, ja se on oletustulos. Funktio palauttaa kyseisen tuloksen, koska kaavassa ei ole virheitä. 300
IfError( 1/0, Notify( "There was an internal problem" ) ) Ensimmäinen argumentti palauttaa virhearvon (jakolasku nollalla). Funktio arvioi toisen argumentin ja käyttäjälle näytetään viesti. IfError-funktion palautusarvo on Notify-funktion palautusarvo, joka on pakotettu samantyyppiseksi kuin ensimmäinen argumentti funktioon IfError (luku). 1

Yksinkertainen IsError

Kaava Kuvaus Tulos
IsError( 1 ) Argumentti ei ole virhe. false
IsError( Blank() ) Argumentti on tyhjä, mutta ei virhe. false
IsError( 1/0 ) Argumentti on virhe. true
If( IsError( 1/0 ), Notify( "There was an internal problem" ) ) IsError-argumentti palauttaa virhearvon (jakolasku nollalla). Tämä funktio palauttaa arvon Tosi, jolloin If näyttää käyttäjälle viestin, jolla on Notify-toiminto. If-funktion palautusarvo on Notify-funktion palautusarvo, joka on pakotettu samantyyppiseksi kuin ensimmäinen argumentti funktioon If (totuusarvo). true

Simple IsBlankOrError

Kaava Kuvaus Tulos
IsBlankOrError( 1 ) Argumentti ei ole virhe eikä tyhjä. false
IsBlankOrError( Blank() ) Argumentti on tyhjä. true
IsBlankOrError( 1/0 ) Argumentti on virhe. true

Yksinkertainen virhe

Tässä esimerkissä päivämäärät tarkistetaan suhteessa toisiinsa, jolloin seurauksena on virhe, jos tässä esiintyy ongelma.

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

Tässä esimerkissä jotkut virheet voidaan välittää, kun taas toiset estetään ja korvataan arvolla. Ensimmäisessä tapauksessa b on virhetilassa, koska Value-funktiolla on virheellinen argumentti. Koska kaavankirjoitustyökalu ei odota tätä, se välitetään eteenpäin käyttäjän nähtäville. Toisessa tapauksessa, jossa on sama kaava, b:n arvo on nolla, jolloin tapahtuu jako nollalla. Tässä tapauksessa kaavankirjoitustyökalu saattaa tietää, että tämä on hyväksyttävää kyseisen logiikan osalta, estää virheen (palkkia ei näytetä) ja palauttaa sen sijaan arvon -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

AllErrors-taulukkoa voi suodattaa kuin mitä tahansa muuta taulukkoa. Kun sitä käytetään yhdessä Error-funktion kanssa, odotetut virheet voidaan poistaa ja muut virheet säilyttää ja raportoida. Jos esimerkiksi tiedämme, että jako nollalla ei olisi ongelma tietyssä tilanteessa, sitä koskevat virheet voisi suodattaa pois siten, että muut virheet säilyisivät muuttumattomana seuraavan kaavan mukaisesti:

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

Vaihe vaiheelta

  1. Lisää Text input -ohjausobjekti ja anna sille nimeksi TextInput1, jos tämä ei ole sen oletusnimi.

  2. Lisää Label-ohjausobjekti ja anna sille nimeksi Label1, jos tämä ei ole sen oletusnimi.

  3. Määritä Label1:n Text-ominaisuuden kaavaksi:

    IfError( Value( TextInput1.Text ), -1 )
    
  4. Kirjoita TextInput1-kohtaan 1234.

    Label1 näyttää arvon 1234, koska tämä on kelvollinen syöte Value-funktioon.

  5. Kirjoita TextInput1-kohtaan ToInfinity.

    Label1 näyttää arvon -1, koska tämä ei ole kelvollinen syöte Value-funktioon. Jos Value-funktiota ei rivitettäisi IfError-funktion kanssa, otsikko ei näyttäisi arvoa, koska virhearvoa kohdellaan tyhjänä.

Katso myös

Kaavaviittaus Power Appsia varten