Jaa


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

Koskee seuraavia: Pohjaan perustuvien sovellusten Dataverse kaavasarakkeet Työpöytätyönkulut Mallipohjaisten sovellusten Power Pages Power Platform CLI

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

Muistiinpano

Jos sovellus on poistanut kaavatason virheiden hallintatoiminnon käytöstä kohdassa Asetusten>päivitykset>poistettu käytöstä, kyseiset toiminnot eivät toimi oikein.

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, kuten 1/x tuottaa 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 DS1 Patch-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 jonkin argumentin arvon. Kaikkien niiden arvojen tyyppien, jotka IfError voi palauttaa, on oltava yhteensopivia.

Viimeisessä esimerkissä korjaustiedosto palauttaa tietueen, joka ei ole yhteensopiva korvauskaavoissa tai DefaultResult-arvossa käytettyjentotuusarvojen 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 argumentin tyypiksi IfError, joka on luku. IfErrorin 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, jossa FirstError on tämän taulukon ensimmäisen tietueen pikakuvake. FirstError palauttaa aina saman arvon kuin First( AllErrors ).

Virhetietueiden sisältö:

Kenttä Tyyppi Kuvaus
Tyyppi ErrorKind-luettelointi (numero) Virheen luokka.
Viesti Tekstimerkkijono Virhesanoma, joka voidaan näyttää loppukäyttäjälle.
Lähde Tekstimerkkijono Virheen alkuperäsijainti, jota käytetään raportointiin. Esimerkiksi ohjausobjektin ominaisuuteen sidotun kaavan arvo on muodossa ControlName.PropertyName.
Havaittu Tekstimerkkijono Raportointiin käytettävä sijainti, jossa virhe tulee näkyviin käyttäjälle. Esimerkiksi ohjausobjektin ominaisuuteen sidotun kaavan arvo on muodossa ControlName.PropertyName.
Tiedot Nauhoita Virhettä koskevia tietoja. Tällä hetkellä tiedot annetaan vain verkkovirheistä. 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.

Yleensä on vain yksi virhe, jonka kanssa FirstError voi toimia 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.

IsErrorin käyttäminen estää virheen jatkokäsittelyn.

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äämistä tyhjää arvoa käytettiin edustamaan sekä tietokantojen tyhjä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äminen 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

Virhe( ErrorRecord )
Virhe( ErrorTable )

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

JosVirhe(Arvo1,Korvaaminen1 [, Arvo2,Korvaaminen2 , ... [, DefaultResult ] ] )

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

IsError( Arvo )
IsBlankOrError( Arvo )

  • Arvo – Pakollinen. Testattava kaava.

Esimerkit

Yksinkertainen IfError

Kaava Kuvaus Tulos
JosVirhe( 1, 2 ) Ensimmäinen argumentti ei ole virhe. Toiminnossa ei ole muita tarkistettavia virheitä eikä oletuspalautusarvoa. Funktio palauttaa viimeisen arvioidun Value-argumentin. 1
JosVirhe( 1/0, 2 ) Ensimmäinen argumentti palauttaa virhearvon (jakolasku nollalla). Funktio laskee toisen argumentin ja palauttaa sen tuloksena. 2
JosVirhe( 10, 20, 30 ) Ensimmäinen argumentti ei ole virhe. Toiminnossa ei ole muita tarkistettavia virheitä, mutta siinä on oletuspalautusarvo. Funktio palauttaa DefaultResult-argumentin. 30
JosVirhe( 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, Ilmoita( "Oli sisäinen ongelma") ) 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. väärä
IsError( Tyhjä() ) Argumentti on tyhjä, mutta ei virhe. väärä
IsError( 1/0 ) Argumentti on virhe. tosi
Jos( IsError( 1/0 ), Ilmoita( "Oli sisäinen ongelma") ) 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). tosi

Simple IsBlankOrError

Kaava Kuvaus Tulos
IsBlankOrError( 1 ) Argumentti ei ole virhe eikä tyhjä. väärä
IsBlankOrError( Tyhjä() ) Argumentti on tyhjä. tosi
IsBlankOrError( 1/0 ) Argumentti on virhe. tosi

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 kaavan kirjoittaja ei odota tätä, se välitetään niin, että käyttäjä näkee sen. Toisessa tapauksessa, samalla kaavalla,b on arvo 0, jolloin saadaan 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 tietäisimme, että nollalla jakaminen ei olisi ongelma tietyssä kontekstissa, nämä virheet voitaisiin suodattaa pois, jolloin kaikki muut virheet jäisivät ennalleen seuraavalla kaavalla:

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 se on kelvollinen syöte Value-funktioon.

  5. Kirjoita TextInput1-kohtaan ToInfinity.

    Label1 näyttää arvon-1 , koska se 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

Kaavaviite Power Apps