Comparteix via


Error, IfError, IsError, funcions IsBlankOrError

Funcions S'aplica a
Error
IfError
IsError
Aplicacions de llenç Copilot Studio Fluxos d'escriptori Columnes de fórmules del Dataverse Aplicacions basades en models CLI del Power Platform Funcions del Dataverse Power Pages
IsBlankOrError Aplicacions de llenç Copilot Studio Fluxos d'escriptori Aplicacions basades en models CLI del Power Platform Funcions del Dataverse Power Pages

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 IfError funció 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 IfError s'assembla a la de la funció If : IfError prova errors, mentre que If prova la veritat.

Utilitzeu-lo IfError per substituir un error per un valor vàlid perquè els càlculs posteriors puguin continuar. 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.

S'utilitza IfError per fer una acció i només continuar processant si l'acció s'ha realitzat correctament. Aplicant 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.

A partir de l'últim exemple, es pot comprovar el valor de retorn de IfError per determinar si hi ha hagut problemes:

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 poden 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. La qual cosa està bé, ja que no hi ha cap situació en què el valor de retorn d'aquestes crides de Patch sigui retornat per IfError.

Nota

Mentre que el comportament en procés per a un canvi, els tipus de tots els arguments han IfError 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.

Penseu en IfError el següent:

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

La fórmula anterior no funcionarà. La cadena "#DIV/0!" de text s'obliga al tipus del primer argument a IfError, que és un nombre. El resultat és un altre error, ja que la cadena de IfError text no es pot forçar. Com a solució, convertiu el primer argument en una cadena de text de manera que IfError sempre retorni una cadena de text:

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

Com s'ha vist anteriorment, IfError pot retornar un error si Replacement 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 ).

Error Els registres 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:

Control Botó activat, que mostra una notificació de la funció de notificació

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 IsError funció prova un valor d'error.

El valor de retorn és un booleà true o false.

L'ús IsError impedeix qualsevol processament posterior de l'error.

IsBlankOrError

La IsBlankOrError funció prova un valor en blanc o un valor d'error i és l'equivalent a Or( IsBlank( X ), IsError( X ) ).

Quan habiliteu la gestió d'errors per a les aplicacions existents, considereu la possibilitat de substituir IsBlank per IsBlankOrError conservar el comportament de l'aplicació existent. 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. Error el maneig separa aquestes dues interpretacions de blank , cosa que podria canviar el comportament de les aplicacions existents que continuen utilitzant IsBlank.

El valor de retorn és un booleà true o false.

L'ús IsBlankOrError impedeix qualsevol processament posterior de l'error.

Utilitzeu la Error funció per crear i informar d'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 IfError funció.

En el context de IfError, utilitzeu la Error funció per rellançar o passar un error. Per exemple, la vostra lògica pot IfError decidir que en alguns casos es pot ignorar un error amb seguretat, però en altres casos és important enviar l'error. Dins IfError o App.OnError, utilitzeu Error( FirstError ) per passar un error.

A la Error funció també se li pot passar una taula d'errors, com es trobaria a la taula AllErrors . Utilitzeu Error( AllErrors ) per tornar a llançar tots els errors i no només el primer.

Un registre en blanc o una taula buida a Error la qual no es passa cap error.

Sintaxi

Error( Registre d'error )
Error( Taula d'errors )

  • ErrorRecord : obligatori. Error registre, inclosos 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, Replacement1 [, Valor2, Reemplaçament2, ... [, ResultatPer 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

Senzill IfError

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, Notificar ( "Hi va haver 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 IfError és el valor de retorn de Notify, forçat al mateix tipus que el primer argument de IfError (un nombre). 1

Senzill IsError

Fórmula Descripció Resultat
IsError( 1 ) L'argument no és un error. fals
IsError( Blanc () ) L'argument està en blanc, però no és cap error. fals
IsError( 1/0 ) L'argument és un error. veritable
If( IsError( 1/0 ), Notify( "Hi va haver un problema intern" ) ) L'argument to IsError retorna un valor d'error (a causa de la divisió per 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

Senzill IsBlankOrError

Fórmula Descripció Resultat
IsBlankOrError( 1 ) L'argument no és cap error ni està en blanc. fals
IsBlankOrError( Blanc () ) L'argument està en blanc. veritable
IsBlankOrError( 1/0 ) L'argument és un error. veritable

Senzill Error

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. Utilitzat amb la Error funció, els errors esperats es poden eliminar i els errors restants es poden conservar i informar. 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

  1. Afegiu un control Entrada de text i anomeneu-lo TextInput1 si no té aquest nom per defecte.

  2. Afegiu un control Etiqueta i anomeneu-lo Label1 si no té aquest nom per defecte.

  3. Definiu la fórmula de la propietat Text de Label1 com a:

    IfError( Value( TextInput1.Text ), -1 )
    
  4. A TextInput1, introduïu 1234.

    Label1 mostra el valor 1234 , ja que és una entrada vàlida a la funció Value.

  5. A TextInput1, introduïu ToInfinity.

    Label1 mostra el valor-1 , ja que no és una entrada vàlida a la funció Value. Sense embolicar la funció Value amb IfError, l'etiqueta no mostraria cap valor, ja que el valor d'error es tracta com un espai en blanc.

Consulteu també

Referència de fórmules per a Power Apps