Compartir por


Error, IfError, IsError, funcións IsBlankOrError

Funcións Aplícase a
Error
IfError
IsError
Aplicacións de lenzo Copilot Studio Fluxos de escritorio Columnas de fórmulas de Dataverse Aplicacións baseadas en modelos Power Platform CLI Funcións de Dataverse Power Pages
IsBlankOrError Aplicacións de lenzo Copilot Studio Fluxos de escritorio Aplicacións baseadas en modelos Power Platform CLI Dataverse funcións Power Pages

Detecta erros e proporciona un valor alternativo ou toma medidas. Crea un erro personalizado ou pasa por un erro.

Nota

Se unha aplicación desactivou a función de xestión de erros a nivel de fórmula en Configuración>Actualizacións> Retirada, esas funcións non funcionarán correctamente.

IfError

A IfError función proba os valores ata atopar 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 é semellante á da función If : IfError proba os erros, mentres que If proba a verdade.

Utilízase IfError para substituír un erro por un valor válido para que os cálculos posteriores 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 produce 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.

Utilízase IfError para realizar unha acción e só continuar o procesamento se a acción tivo éxito. Aplicando 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, pódese comprobar o valor de retorno de IfError para determinar se houbo problemas:

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

Compatibilidade dos tipos

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

No último exemplo, Parche devolve un rexistro que non é compatible cos booleanos usados ​​nas fórmulas de substitución ou o DefaultResult. O que está ben, xa que non hai ningunha situación na que o valor de devolución destas chamadas de Patch sexa devolto por IfError.

Nota

Mentres o comportamento en proceso para un cambio, os tipos de todos os argumentos deben IfError ser compatibles actualmente.

No exemplo sinxelo descrito anteriormente:

IfError( 1/x, 0 )

Os tipos de 1/x e 0 eran compatibles xa que ambos eran números. Se non o son, o segundo argumento é coaccionado para que coincida co tipo do primeiro argumento.

Excel mostra #DIV/0! cando se produce unha división por cero.

Considere IfError o seguinte:

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

A fórmula anterior non funcionará. A cadea "#DIV/0!" de texto é forzada ao tipo do primeiro argumento a IfError, que é un número. O resultado é IfError outro erro xa que a cadea de texto non se pode forzar. Como corrección, converte o primeiro argumento nunha cadea de texto para que IfError sempre devolva unha cadea de texto:

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

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

FirstError / AllErrors

Dentro das fórmulas de substitución, a información acerca dos erros atopada está dispoñible a través do rexistro FirstError e a táboa AllErrors. AllErrors é unha táboa de rexistros de información de erros con FirstError un atallo ao primeiro rexistro desta táboa. FirstError sempre devolve o mesmo valor que First( AllErrors ).

Error Os rexistros inclúen:

Campo Tipo Descripción
amable Enumeración ErrorKind (número) Categoría do erro.
Mensaxe Cadea de texto Mensaxe sobre o erro, apta para ser mostrada ao usuario final.
Fonte Cadea de texto Localización onde se orixinou o erro, utilizada para informar. Por exemplo, para unha fórmula vinculada a unha propiedade de control, este valor está na forma ControlName.PropertyName.
Observado Cadea de texto Localización onde se extraeu o erro para o usuario, usado para informar. Por exemplo, para unha fórmula vinculada a unha propiedade de control, este valor está na forma ControlName.PropertyName.
Detalles Rexistro Detalles sobre o erro. Actualmente, só se proporcionan detalles para os erros de rede. Este rexistro inclúe HttpStatusCode que contén o código de estado HTTP e HttpResponse que contén o corpo do resposta do conector ou servizo.

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

Set( a, 1/0 )

E esta fórmula na propiedade OnSelect dun segundo control de Botón:

IfError( a, Notify( "Internal error: originated on " & FirstError.Source & ", surfaced on " & FirstError.Observed ) )

A fórmula de exemplo anterior amosaría a seguinte faixa cando os dous botóns están activados en secuencia:

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

Normalmente, só haberá un erro co que FirstError pode funcionar suficientemente. Non obstante, hai escenarios nos que se poden devolver varios erros. Por exemplo, cando se utiliza un operador de encadeamento de fórmulas ou a función Simultánea. Incluso nestas situacións, informar de FirstError pode ser suficiente para revelar un problema en vez de sobrecargar un usuario con varios erros. Se aínda ten o requisito de traballar con cada erro individualmente, pode utilizar a táboa AllErrors.

IsError

A IsError función comproba un valor de erro.

O valor devolto é un booleano verdadeiro ou falso.

O uso IsError impide calquera posterior procesamento do erro.

IsBlankOrError

A IsBlankOrError función proba un valor en branco ou un valor de erro e é o equivalente a Or( IsBlank( X ), IsError( X ) ).

Ao habilitar o manexo de erros para aplicacións existentes, considere substituír IsBlank por IsBlankOrError para preservar o comportamento da aplicación existente. Antes de engadir o tratamento de erros, utilizouse un valor en branco para representar tanto os valores nulos das bases de datos como os valores de erro. Error O manexo separa estas dúas interpretacións de blank , o que podería cambiar o comportamento das aplicacións existentes que seguen a usar IsBlank.

O valor devolto é un booleano verdadeiro ou falso.

O uso IsBlankOrError impide calquera posterior procesamento do erro.

Use a Error función para crear e informar dun erro personalizado. Por exemplo, pode ter lóxica para determinar se algún valor dado é válido para o seu contexto ou non, algo que non se comprobou automaticamente para detectar un problema. Pode crear e devolver o seu propio erro, completo con Tipo e Mensaxe, usando o mesmo rexistro descrito anteriormente para a IfError función.

No contexto de IfError, use a Error función para relanzar ou pasar por un erro. Por exemplo, a súa lóxica pode IfError decidir que nalgúns casos un erro pode ser ignorado con seguridade, pero noutros casos o erro é importante para enviar. Dentro IfError ou App.OnError, use Error( FirstError ) para pasar por un erro.

A Error función tamén se pode pasar unha táboa de erros, como se atoparía na táboa AllErrors . ErrorUse ( AllErrors ) para rebotar todos os erros e non só o primeiro.

Un rexistro en branco ou unha táboa baleira pasada non Error produce ningún erro.

Sintaxe

Error( Error Record )
Error( Táboa de erros )

  • ErrorRecord – Obrigatorio. Error rexistro de información, incluíndo Tipo, Mensaxe e outros campos. Requírese tipo . FirstError pódese pasar directamente.
  • ErrorTable – Obrigatorio. Táboa de rexistros de información de erros. Todos os erros pódense pasar directamente.

IfError( Valor1, Substitución1 [, Valor2, Substitución2, ... [, DefaultResult ] ] )

  • Valores – Obrigatorio. Fórmula(s) para probar un valor de erro.
  • Substitucións – Requírese. 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( Valor )
IsBlankOrError( Valor )

  • Valor – Obrigatorio. Fórmula para probar.

Exemplos

Sinxelo IfError

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 devolución de IfError é o valor de devolución de Notify, forzado ao mesmo tipo que o primeiro argumento de IfError (un número). 1

Sinxelo IsError

Fórmula Descripción Resultado
IsError( 1 ) O argumento non é un erro. falso
IsError( Blank () ) O argumento está en branco, pero non é un erro. falso
IsError( 1/0 ) O argumento é un erro. verdade
If( IsError( 1/0 ), Notify( "Houbo un problema interno") ) O argumento para IsError devolve un valor de erro (debido á 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). verdade

Sinxelo IsBlankOrError

Fórmula Descripción Resultado
IsBlankOrError( 1 ) O argumento non é un erro nin un valor en branco. falso
IsBlankOrError( Blank () ) O argumento é un valor en branco. verdade
IsBlankOrError( 1/0 ) O argumento é un erro. verdade

Sinxelo Error

Neste exemplo, as datas valídanse entre si, o que provoca un erro se hai algún problema.

If( StartDate > EndDate,
    Error( { Kind: ErrorKind.Validation, Message: "Start Date must be before End Date" } ) )

Neste exemplo, permítese pasar algúns erros mentres que outros se suprimen e substitúense por un valor. No primeiro caso, b está nun estado de erro porque o Valor función ten un argumento non válido. Debido a que isto é inesperado polo escritor de fórmulas, pásase para que o usuario o vexa. No segundo caso, coa mesma fórmula, b ten o valor 0, resultando nunha división por cero. Neste caso, o escritor da fórmula pode saber que isto é aceptable para esta lóxica, suprimir o erro (non se mostra ningunha faixa) e devolver -1 no seu lugar.

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

A táboa AllErrors pódese filtrar como calquera outra táboa. Usado coa Error función, os erros esperados poden ser eliminados e os erros restantes conservados e informados. Por exemplo, se sabésemos que a división por cero non ía ser un problema nun contexto particular, eses erros poderían ser filtrados, deixando todos os demais erros intactos coa seguinte fórmula:

Error( Filter( AllErrors, Kind <> ErrorKind.Div0 ) )

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.

    A etiqueta 1 mostra o valor 1234 xa que esta é unha entrada válida para a función Valor.

  5. En TextInput1, ingrese ToInfinity.

    A etiqueta 1 mostra 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 un branco.

Consulte tamén

Referencia de fórmula para Power Apps