Funcións IfError e IsError en Power Apps

[Este artigo é a documentación de pre-lanzamento e está suxeito a cambios.]

Detecta erros e proporciona un valor alternativo ou toma medidas.

Nota

IfError

A función IfError proba os valores ata que atopa un erro. Se a función descobre un erro, a función avalía e devolve un correspondente valor de substitución e detén a súa avaliación. Tamén se pode fornecer un valor por defecto cando non se atopen erros. A estrutura de IfError aseméllase á da función If: IfError proba en busca de erros, mentres que If proba en busca do valor verdadeiro.

Use IfError para substituír un erro por un valor válido para que os cálculos descendentes poidan continuar. Por exemplo, use esta función se a entrada do usuario pode producir unha división por cero:

IfError( 1/x, 0 )

Esta fórmula devolve 0 se o valor de x é cero, xa que 1/x producirá un erro. Se x non é cero, entón 1/x é devolto.

Deter o procesamento

Ao encadear fórmulas xuntas en fórmulas de comportamento, como:

Patch( DS1, ... );
Patch( DS2, ... )

A segunda función Patch para DS2 intentarase aínda que Patch para DS1 falle. O alcance dun erro está limitado a cada fórmula que se encadea.

Use IfError para facer unha acción e continuar a tramitación só se a acción tivo éxito. Aplicación de IfError a este exemplo:

IfError(
    Patch( DS1, ... ), Notify( "problem in the first action" ),
    Patch( DS2, ... ), Notify( "problem in the second action" )
)

Se o Parche de DS1 ten un problema, a primeira Notificación execútase. Non se produce outro procesamento, incluído o segundo Parche de DS2. Se o primeiro Parche ten éxito, o segundo Parche executarase.

Se se fornece, o argumento opcional DefaultResult é devolto se non se descobren erros. Sen este argumento, o último argumento de Valor devólvese.

Baseándose no último exemplo, o valor de retorno de IfError pódese comprobar para determinar se hai algún problema:

IfError(
    Patch( DS1, ... ), Notify( "problem in the first action" );  false,
    Patch( DS2, ... ), Notify( "problem in the second action" ); false,
    true
)

Compatibilidade dos tipos

IfError devolverá o valor dun dos seus argumentos. Os tipos de todos os valores que poden ser devoltos por IfError deben ser compatibles.

No último exemplo, o Parche devolverá un rexistro que non é compatible cos booleanos empregados para as fórmulas de Substitución ou para DefaultResult. O que está ben, xa que non hai ningunha situación na que o valor de retorno destas chamadas de Parche serían devoltas por IfError.

Nota

Mentres o comportamento está en proceso de cambio, o tipo de todos os argumentos en IfError debe ser compatible actualmente.

No exemplo sinxelo descrito anteriormente:

IfError( 1/x, 0 )

Os tipos de 1/x e 0 eran compatibles xa que ambos eran cadeas de texto. Se non o son, o segundo argumento será coaccionado para que coincida co tipo do primeiro argumento.

Excel amosará #DIV/0! cando se produza unha división por cero.

Considere IfErrorco seguinte no seu lugar:

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

A fórmula anterior non funcionará. A cadea de texto "#DIV/0!" coaccionarase co tipo do primeiro argumento en IfError, que é un número. O resultado de IfError será outro erro, xa que non se pode coaccionar a cadea de texto. Como solución, converta o primeiro argumento nunha cadea de texto para que IfError sempre devolva unha cadea de texto:

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

Como se pode ver, IfError pode devolver un erro se Replacement ou DefaultResult é un erro.

ErrorInfo

Dentro das fórmulas de substitución, o rexistro ErrorInfo proporciona información sobre o erro que se atopou. Este rexistro inclúe:

O campo ErrorInfo Tipo Descripción
Control Cadea de texto Nome do control actual, usado para informar de onde se produciu o erro.
Tipo Enumeración ErrorKind (número) Categorizouse o erro.
Mensaxe Cadea de texto Mensaxe sobre o erro, apta para ser mostrada ao usuario final.
Notificar Booleano IfError non o colleu, se se debe mostrar unha faixa de notificación para o usuario final.
Propiedade Cadea de texto Nome da propiedade actual, usada para informar de onde se produciu o erro.

Por exemplo, considere a seguinte fórmula como a propiedade OnSelect do control de botón.

IfError( 1/0, Notify( "Internal error: " & ErrorInfo.Control & "." & ErrorInfo.Property ) )

A fórmula de exemplo anterior mostraría a seguinte faixa cando está activado o botón:

O control de botón activouse, mostrando unha notificación da función Notificar

IsError

A función IsError comproba se hai un valor de erro. O valor devolto é un booleano verdadeiro ou falso.

Usando IsError evitará outro procesamento do erro.

Sintaxe

IfError( Value1, Replacement1 [, Value2, Replacement2, ... [, DefaultResult ] ] )

  • Value(s): obrigatorio. Fórmula(s) para probar un valor de erro.
  • Replacement(s): Obrigatorio. As fórmulas para avaliar e os valores para devolver se os argumentos de Valor coincidentes devolveron un erro.
  • DefaultResult: Opcional. As fórmulas para avaliar se a fórmula non atopa ningún erro.

IsError( Value )

  • Valor: necesario. Fórmula para probar un valor de erro.

Exemplos

IfError sinxelo

Fórmula Descripción Resultado
IfError( 1, 2 ) O primeiro argumento non é un erro. A función non ten outros erros que comprobar e ningún valor de retorno por defecto. A función devolve o último argumento de valor avaliado. 1
IfError( 1/0, 2 ) O primeiro argumento devolve un valor de erro (por mor da división por cero). A función avalía o segundo argumento e devólveo como resultado. 2
IfError( 10, 20, 30 ) O primeiro argumento non é un erro. A función non ten outros erros que comprobar pero ten un valor de retorno por defecto. A función devolve o argumento DefaultResult. 30
IfError( 10, 11, 20, 21, 300 ) O primeiro argumento 10 non é un erro, polo que a función non avalía a substitución 11 correspondente dese argumento. O terceiro argumento 20 tampouco é un erro, polo que a función non avalía a substitución 21 correspondente dese argumento. O quinto argumento 300 non ten substitución correspondente e é o resultado por defecto. A función devolve ese resultado porque a fórmula non contén erros. 300
IfError( 1/0, Notify( "Houbo un problema interno" ) ) O primeiro argumento devolve un valor de erro (pola división por cero). A función avalía o segundo argumento e mostra unha mensaxe ao usuario. O valor de retorno de IfError é o valor de retorno de Notificar, coaccionado ao mesmo tipo que o primeiro argumento en IfError (un número). 1

IsError sinxelo

Fórmula Descripción Resultado
IsError( 1 ) O argumento non é un erro. false
IsError( 1/0 ) O argumento é un erro. true
If( IsError( 1/0 ), Notify( "Houbo un problema interno" ) ) O argumento para IsError devolve un valor de erro (por mor da división por cero). Esta función devolve verdadeiro, o que provoca que If mostre unha mensaxe ao usuario coa función Notify. O valor de retorno de If é o valor de retorno de Notify, coaccionado ao mesmo tipo que o primeiro argumento en If (un booleano). true

Paso a paso

  1. Engada un control de Entrada de texto e noméeo TextInput1 se non ten ese nome por defecto.

  2. Engada un control de Etiqueta e noméeo Label1 se non ten ese nome por defecto.

  3. Estableza a fórmula para a propiedade de Texto de Label1 en:

    IfError( Value( TextInput1.Text ), -1 )
    
  4. En TextInput1, ingrese 1234.

    Label1 amosará o valor 1234 xa que esta é unha entrada válida para a función Valor.

  5. En TextInput1, ingrese ToInfinity.

    Label1 amosará o valor -1 xa que esta non é unha entrada válida para a función Valor. Sen envolver a función Valor con IfError, a etiqueta non mostraría ningún valor xa que o valor de erro é tratado como en branco.

Consulte tamén

Referencia da fórmula para Power Apps