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ä:
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
Lisää Text input -ohjausobjekti ja anna sille nimeksi TextInput1, jos tämä ei ole sen oletusnimi.
Lisää Label-ohjausobjekti ja anna sille nimeksi Label1, jos tämä ei ole sen oletusnimi.
Määritä Label1:n Text-ominaisuuden kaavaksi:
IfError( Value( TextInput1.Text ), -1 )
Kirjoita TextInput1-kohtaan 1234.
Label1 näyttää arvon 1234 , koska se on kelvollinen syöte Value-funktioon.
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ä.