Funcions Error, IfError, IsError, IsBlankOrError
S'aplica a: Columnes de fórmules
Dataverse d'aplicacions
de llenç Fluxos
d'escriptori CLI d'aplicacions
Power Pages
Power Platform basades en models
Detecta errors i proporciona un valor alternatiu o actua. Crea un error personalitzat o passa un error
Nota
Si una aplicació ha desactivat la funció de gestió d'errors al nivell de fórmula a Actualitzacions de configuració>retirades>, aquestes funcions no funcionaran correctament.
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 retorna 0
si el valor de x
és zero, ja que 1/x
produeix 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 retorna 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 retorna 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 ho són, el segon argument és obligat a coincidir amb el tipus del primer argument.
Mostra l'Excel #DIV/0! quan es produeix una divisió per 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à. La cadena "#DIV/0!"
de text està forçada al tipus del primer argument a IfError, que és un número. El resultat d'IfError és un altre error, ja que la cadena de text no es pot coaccionar. 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ó, informació sobre els errors que s'han trobat mitjançant el registre FirstError i la taula AllErrors. AllErrors és una taula de registres d'informació d'error amb FirstError com a drecera al primer registre d'aquesta taula. FirstError sempre retorna el mateix valor que First( AllErrors ).
Els registres d'errors inclouen:
Camp | Type | Descripció |
---|---|---|
Amable | ErrorKind enum (número) | Categoria de l'error. |
Missatge | Cadena de text | Missatge sobre l'error, apte per mostrar-se a l'usuari final. |
Font | Cadena de text | Ubicació on s'origina l'error, que s'utilitza per als informes. Per exemple, per a una fórmula vinculada a una propietat de control, aquest valor es troba en el format ControlName.PropertyName. |
Observat | Cadena de text | Ubicació on es mostra l'error a l'usuari, que s'utilitza per als informes. Per exemple, per a una fórmula vinculada a una propietat de control, aquest valor es troba en el format ControlName.PropertyName. |
Detalls | Enregistra | Detalls sobre l'error. Actualment, els detalls només es proporcionen per als errors de xarxa. Aquest registre inclou HttpStatusCode , que conté el codi d'estat HTTP, i HttpResponse , que conté el cos de la resposta del connector o servei. |
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, només hi haurà un error amb el qual FirstError pot treballar suficientment. Tanmateix, hi ha escenaris en què es poden retornar diversos errors. Per exemple, quan s'utilitza un operador d'encadenament de fórmules o la funció Concurrent. Fins i tot en aquestes situacions, pot ser que notificar FirstError sigui suficient per revelar un problema en comptes de sobrecarregar un usuari amb diversos errors. Si encara voleu treballar amb cada error individualment, podeu utilitzar la taula AllErrors.
IsError
La funció IsError prova si hi ha un valor d'error.
El valor de retorn és un booleà true o false.
L'ús d'IsError impedeix qualsevol 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 de l'addició de la gestió d'errors, s'utilitzava un valor en blanc per representar tant els valors nuls de les bases de dades com els 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 de IsBlankOrError impedeix qualsevol processament posterior de l'error.
Utilitzeu la funció Error per crear i notificar un error personalitzat. Per exemple, pot ser que tingueu lògica per determinar si un valor determinat és vàlid per al vostre context o no, una cosa en la qual no se cerquen problemes automàticament. Podeu crear i retornar el vostre propi error, complet amb Tipus i Missatge, utilitzant el mateix registre descrit anteriorment per a la funció IfError.
En el context d'IfError, utilitzeu la funció Error per tornar a produir o passar un error. Per exemple, la vostra lògica a IfError pot decidir que en alguns casos un error es pot ignorar amb seguretat, però en altres casos és important passar l'error. Dins d'IfError o App.OnError, utilitzeu Error( FirstError ) per passar un error.
La funció Error també es pot passar a una taula d'errors, com es trobaria a la taula AllErrors. Utilitzeu Error( AllErrors ) per tornar a produir tots els errors i no només el primer.
Un registre en blanc o una taula buida passada als resultats d'Error quan no hi ha cap error.
Sintaxi
Error ( ErrorRecord )
Error ( taula d'errors )
- ErrorRecord : obligatori. Registre d'informació de l'error, com ara Tipus, Missatge i altres camps. Es requereix amabilitat . FirstError es pot passar directament.
- ErrorTable : obligatori. Taula de registres d'informació de l'error. AllErrors es pot passar directament.
IfError(Valor1,Reemplaçament1 [, Valor2,Reemplaçament2 , ... [, Resultat per defecte] ] )
- Valors : obligatori. Les fórmules on es provarà si hi cap valor d'error.
- Substitucions : obligatòries. 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 |
---|---|---|
Error( 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 |
Error( 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 |
Error( 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 |
Error( 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( "Hi ha hagut 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 |
---|---|---|
ÉsError( 1 ) | L'argument no és un error. | fals |
ÉsError( en blanc() ) | L'argument està en blanc, però no és cap error. | fals |
ÉsError( 1/0 ) | L'argument és un error. | veritable |
If( IsError( 1/0 ), Notify( "Hi ha hagut 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à). | veritable |
IsBlankOrError simple
Fórmula | Descripció | Resultat |
---|---|---|
ÉsBlancOrError( 1 ) | L'argument no és cap error ni està en blanc. | fals |
IsBlankOrError( en blanc() ) | L'argument està en blanc. | veritable |
ÉsBlancOrError( 1/0 ) | L'argument és un error. | veritable |
Error simple
En aquest exemple, les dates es validen entre si en relació amb les altres, i produeixen un error si hi ha un problema.
If( StartDate > EndDate,
Error( { Kind: ErrorKind.Validation, Message: "Start Date must be before End Date" } ) )
En aquest exemple, alguns errors es permeten passar mentre que d'altres se suprimeixen i se substitueixen per un valor. En el primer cas,b està en estat d'error perquè la funció Value té un argument no vàlid. Com que això és inesperat per l'escriptor de fórmules, es passa perquè l'usuari el vegi. En el segon cas, amb la mateixa fórmula, b té el valor 0, donant lloc a una divisió per zero. En aquest cas, l'autor de la fórmula pot saber que això és acceptable per a aquesta lògica, suprimir l'error (no es mostra cap bàner) i retornar -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
La taula AllErrors es pot filtrar com qualsevol altra taula. S'utilitza amb la funció Error, es poden suprimir errors previstos, i la resta d'errors es conserven i es notifiquen. Per exemple, si sabéssim que la divisió per zero no seria un problema en un context particular, aquests errors es podrien filtrar, deixant tots els altres errors intactes amb la següent fórmula:
Error( Filter( AllErrors, Kind <> ErrorKind.Div0 ) )
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 mostra el valor 1234 , ja que és una entrada vàlida a la funció Value.
A TextInput1, introduïu ToInfinity.
Label1 mostra el valor-1 , ja que no és una entrada vàlida a 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.