Funcions IfError, IsError i IsBlankOrError al Power Apps
[Aquest article forma part de la documentació preliminar i està subjecte a canvis.]
Detecta errors i proporciona un valor alternatiu o actua.
Nota
- Les funcions IfError, IsError i IsBlankOrError formen part d'una característica experimental i estan subjectes a canvis. Més informació: Entendre les característiques experimentals, de versió preliminar i obsoletes al Power Apps.
- El comportament que es descriu en aquest article només està disponible si la característica experimental Administració d'errors al nivell de fórmula està activada a la configuració avançada (està desactivada per defecte).
- Els vostres comentaris són molt valuosos per nosaltres; feu-nos-ho saber la vostra opinió als fòrums de la comunitat del Power Apps.
IfError
La funció IfError prova els valors fins que troba un error. Si la funció descobreix un error, la funció avalua i torna un valor de substitució corresponent i atura l'avaluació posterior. També es pot proporcionar un valor per defecte per si no es troba cap error. L'estructura de la funció IfError s'assembla a la de la funció If: IfError prova si hi ha errors, mentre que If prova si el valor és true.
Utilitzeu IfError per substituir un error per un valor vàlid per tal que puguin continuar els càlculs descendents. Per exemple, utilitzeu aquesta funció si l'entrada de l'usuari pot resultar en una divisió entre zero:
IfError( 1/x, 0 )
Aquesta fórmula torna 0 si el valor de x és zero, ja que 1/x produirà un error. Si x no és zero, es retornarà 1/x.
Aturar el processament posterior
En encadenar fórmules juntes en fórmules de comportament, com ara:
Patch( DS1, ... );
Patch( DS2, ... )
La segona funció Patch de DS2 es provarà fins i tot si Patch de DS1 no es pot dur a terme. L'àmbit d'un error està limitat a cada fórmula que està encadenada.
Utilitzeu IfError per dur a terme una acció i només continueu el processament si l'acció s'ha realitzat correctament. Aplicar IfError a aquest exemple:
IfError(
Patch( DS1, ... ), Notify( "problem in the first action" ),
Patch( DS2, ... ), Notify( "problem in the second action" )
)
Si Patch de DS1 té un problema, s'executarà el primer Notifica. No es produeix cap altre processament, inclòs el segon Patch de DS2. Si el primer Patch es realitza correctament, el segon Patch s'executarà.
Si es proporciona, l'argument DefaultResult es torna si no es descobreix cap error. Sense aquest argument, es retorna l'últim argument Valor.
Amb el darrer exemple, el valor de retorn de la funció IfError es pot comprovar per determinar si hi ha hagut cap problema:
IfError(
Patch( DS1, ... ), Notify( "problem in the first action" ); false,
Patch( DS2, ... ), Notify( "problem in the second action" ); false,
true
)
Compatibilitat de tipus
IfError retornarà el valor d'un dels seus arguments. Els tipus de tots els valors que pot retornar IfError han de ser compatibles.
En l'últim exemple, Patch retornarà un registre que no és compatible amb els booleans utilitzats per a les fórmules de Substitució o DefaultResult. Fet que és correcte, ja que no hi ha cap situació en la qual el valor de retorn d'aquestes trucades de Patch es retorni mitjançant IfError.
Nota
Durant el comportament En procés d'un canvi, els tipus de tots els arguments de la funció IfError han de ser compatibles actualment.
En l'exemple senzill descrit abans:
IfError( 1/x, 0 )
Els tipus de 1/x i 0 són compatibles perquè tots dos són nombres. Si no és així, es forçarà el segon argument per tal que coincideixi amb el tipus del primer argument.
L'Excel mostrarà #DIV/0! quan es produeix una divisió entre zero.
Considereu la possibilitat d'utilitzar IfError en els següents casos com a alternativa:
IfError( 1/x, "#DIV/0!" )
La fórmula anterior no funcionarà. Es forçarà la cadena de text "#DIV/0!" al tipus del primer argument de la funció IfError, que és un nombre. El resultat d'IfError serà un altre error, ja que la cadena de text no es pot forçar. Com a solució, convertiu el primer argument en una cadena de text de manera que IfError sempre torni una cadena de text:
IfError( Text( 1/x ), "#DIV/0!" )
Com s'ha vist anteriorment, IfError pot retornar un error si Substitució o DefaultResult és un error.
FirstError / AllErrors
Dins de les fórmules de substitució, el registre FirstError i la taula AllErrors proporcionen informació sobre els errors que s'han trobat. Els registres inclouen:
| Camp FirstError | Type | Descripció |
|---|---|---|
| Tipus | ErrorKind enum (número) | S'ha categoritzat l'error. |
| Missatge | Cadena de text | Missatge sobre l'error, apte per mostrar-se a l'usuari final. |
| Font | Cadena de text | Ubicació en el format ControlName. PropertyName, on s'ha originat l'error, s'utilitza per als informes. |
| Observat | Cadena de text | Ubicació en el format ControlName. PropertyName, on s'ha mostrat l'error a l'usuari, s'utilitza per als informes. |
Per exemple, tingueu en compte la fórmula següent com a propietat OnSelect del control Botó:
Set( a, 1/0 )
I aquesta fórmula a la propietat OnSelect del segon botó de control:
IfError( a, Notify( "Internal error: originated on " & FirstError.Source & ", surfaced on " & FirstError.Observed ) )
La fórmula d'exemple anterior mostrarà el següent bànner quan els dos botons s'activen en seqüència:

Normalment, si una expressió produeix un error, serà un sol. Però hi ha escenaris en què es poden retornar diversos errors, per exemple, si s'utilitza l'operador de consulta de fórmules o la funció concurrent. En aquests casos, l'aplicació pot utilitzar la taula AllErrors, els registres dels quals tenen els mateixos camps que el registre FirstError per reaccionar enfront dels errors.
IsError
La funció IsError prova si hi ha un valor d'error.
El valor de retorn és un booleà true o false.
L'ús de la funció IsError evitarà el processament posterior de l'error.
IsBlankOrError
La funció IsBlankOrError prova per a un valor en blanc o un valor d'error i és l'equivalent de Or( IsBlank( X ), IsError( X ) ).
Quan activeu el tractament d'errors per a aplicacions existents, considereu l'opció de substituir IsBlank per IsBlankOrError per conservar el comportament de les aplicacions existents. Abans d'afegir la gestió d'errors, s'utilitzava un valor en blanc per representar valors nuls de bases de dades i valors d'error. La gestió d'errors separa aquestes dues interpretacions de blanc, que podrien canviar el comportament de les aplicacions existents que continuen utilitzant IsBlank.
El valor de retorn és un booleà true o false.
L'ús d'IsBlankOrError impedirà el processament addicional de l'error.
Sintaxi
IfError(Valor1, Substitució1, [Valor2, Substitució2, ..., [DefaultResult]])
- Valors: obligatori. Les fórmules on es provarà si hi cap valor d'error.
- Substitucions: obligatori. Les fórmules que s'avaluaran i els valors que es retornaran si els arguments Valor que hi coincideixen han tornat un error.
- DefaultResult: opcional. Les fórmules que s'avaluaran si la fórmula no troba cap error.
IsError(Valor)
IsBlankOrError( Valor )
- Valor: obligatori. Fórmula a provar.
Exemples
IfError simple
| Fórmula | Descripció | Resultat |
|---|---|---|
| IfError(1, 2) | El primer argument no és un error. La funció no té cap altre error per comprovar ni cap valor de retorn per defecte. La funció torna l'últim argument de valor avaluat. | 1 |
| IfError(1/0, 2) | El primer argument torna un valor d'error (a causa de la divisió entre zero). La funció avalua el segon argument i el torna com a resultat. | 2 |
| IfError(10, 20, 30) | El primer argument no és un error. La funció no té cap altre error per comprovar, però té un valor de retorn per defecte. La funció retorna l'argument DefaultResult. | 30 |
| IfError(10, 11, 20, 21, 300) | El primer argument, 10, no és cap error, de manera que la funció no avalua la substitució de l'argument corresponent, 11. El tercer argument, 20, tampoc no és cap error, de manera que la funció no avalua la substitució de l'argument corresponent, 21. El cinquè argument, 300, no té cap substitució corresponent i és el resultat per defecte. La funció retorna aquest resultat perquè la fórmula no conté cap error. | 300 |
| IfError(1/0, Notify("S'ha produït un problema intern")) | El primer argument torna un valor d'error (a causa d'una divisió entre zero). La funció avalua el segon argument i mostra un missatge a l'usuari. El valor de retorn de la funció IfError és el valor de retorn de Notify, forçat amb el mateix tipus que el primer argument d'IfError (un nombre). | 1 |
IsError simple
| Fórmula | Descripció | Resultat |
|---|---|---|
| IsError(1) | L'argument no és un error. | false |
| IsError( Blank() ) | L'argument està en blanc, però no és cap error. | false |
| IsError(1/0) | L'argument és un error. | true |
| If(IsError(1/0), Notify("S'ha produït un problema intern")) | L'argument corresponent a IsError torna un valor d'error (a causa de la divisió entre zero). Aquesta funció retorna cert, la qual cosa provoca que If mostri un missatge a l'usuari amb la funció Notify. El valor de retorn de la funció If és el valor de retorn de Notify, forçat amb el mateix tipus que el primer argument d'If (un booleà). | true |
IsBlankOrError simple
| Fórmula | Descripció | Resultat |
|---|---|---|
| IsBlankOrError( 1 ) | L'argument no és cap error ni està en blanc. | false |
| IsBlankOrError( En blanc() ) | L'argument està en blanc. | true |
| IsBlankOrError( 1/0 ) | L'argument és un error. | true |
Pas a pas
Afegiu un control Entrada de text i anomeneu-lo TextInput1 si no té aquest nom per defecte.
Afegiu un control Etiqueta i anomeneu-lo Label1 si no té aquest nom per defecte.
Definiu la fórmula de la propietat Text de Label1 com a:
IfError( Value( TextInput1.Text ), -1 )A TextInput1, introduïu 1234.
Label1 mostrarà el valor 1234, ja que és una entrada vàlida de la funció Value.
A TextInput1, introduïu ToInfinity.
Label1 mostrarà el valor -1, ja que no és una entrada vàlida de la funció Value. Sense ajustar la funció Value amb IfError, l'etiqueta no mostraria cap valor, ja que el valor d'error es tractaria com a en blanc.