Compartir a través de


Error, IfError, , IsBlankOrErrorIsErrorfunciones

Functions Se aplica a
Error
IfError
IsError
Aplicaciones de lienzo Copilot Studio Desktop fluyen columnas de fórmulas de Dataverse formula columns Model-driven apps Power Platform CLI Dataverse functions Power Pages
IsBlankOrError Aplicaciones de lienzo Copilot Studio Desktop fluyen aplicaciones controladas por modelos de power Platform FUNCIONES de Power Platform Dataverse Power Pages

Detectan errores y proporcionan un valor alternativo o llevan a cabo una acción. Crean un error personalizado o pasan un error.

Nota

Si una aplicación ha deshabilitado la función de Gestión de errores a nivel de fórmula en Configuración>Actualizaciones>Retiradas, esas funciones no funcionarán correctamente.

IfError

La IfError función prueba los valores hasta que encuentra un error. Si la función descubre un error, la función evalúa y devuelve un valor de reemplazo correspondiente y detiene la evaluación adicional. También se puede proporcionar un valor predeterminado para cuando no se encuentran errores. La estructura de es similar a la de IfError la función If : IfError comprueba si hay errores, mientras que Si comprueba si es true.

Use IfError para reemplazar un error por un valor válido para que los cálculos de bajada puedan continuar. Por ejemplo, use esta función si la entrada del usuario puede resultar en una división por cero:

IfError( 1/x, 0 )

Esta fórmula devuelve 0 si el valor de x es cero, ya que 1/x produce un error. Si x no es cero, entonces se devuelve 1/x.

Detener el procesamiento posterior

Cuando se encadenan fórmulas en fórmulas de comportamiento, como:

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

La segunda función Patch para DS2 se intentará incluso si Patch en DS1 genera un error. El alcance de un error está limitado a cada fórmula que está encadenada.

Use IfError para realizar una acción y continuar procesando solo si la acción se realizó correctamente. Aplicación IfError a este ejemplo:

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

Si Patch de DS1 tiene un problema, se ejecuta el primer Notify. No se produce más procesamiento, incluido el segundo Patch de DS2. Si el primer Patch es correcto, se ejecuta el segundo Patch.

Si se suministra, se devuelve el argumento opcional DefaultResult si no se descubren errores. Sin este argumento, se devuelve el último argumento Value.

Basándose en el último ejemplo, se puede comprobar el valor devuelto de IfError para determinar si hay algún problema:

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

Compatibilidad de tipos

IfError devuelve el valor de uno de sus argumentos. Los tipos de todos los valores que pueden devolverse IfError deben ser compatibles.

En el último ejemplo, Patch devuelve un registro que no es compatible con los valores booleanos utilizados para las fórmulas de Reemplazo o el Resultado predeterminado. Lo cual es correcto, ya que no hay ninguna situación en la que el valor devuelto de estas llamadas de revisión se devolvería mediante IfError.

Nota

Aunque el comportamiento en proceso de un cambio, los tipos de todos los argumentos a IfError deben ser compatibles actualmente.

En el ejemplo simple descrito anteriormente:

IfError( 1/x, 0 )

Los tipos de 1/x y 0 eran compatibles ya que ambos eran números. Si no es así, se fuerza el segundo argumento para que coincida con el tipo del primer argumento.

Excel muestra #DIV/0! cuando se produce una división por cero.

Tenga en cuenta IfError lo siguiente en su lugar:

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

La fórmula anterior no funcionará. La cadena "#DIV/0!" de texto se convierte en el tipo del primer argumento en IfError, que es un número. El resultado de IfError es otro error, ya que la cadena de texto no se puede coerced. Como corrección, convierta el primer argumento en una cadena de texto para que IfError siempre devuelva una cadena de texto:

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

Como se ha visto anteriormente, IfError puede devolver un error si Replacement o DefaultResult es un error.

FirstError/AllErrors

Dentro de las fórmulas de reemplazo, la información sobre los errores encontrados está disponible a través del registro FirstError y la tabla AllErrors. AllErrors es una tabla de registros de información de errores donde FirstError es un acceso directo al primer registro de esta tabla. FirstError siempre devuelve el mismo valor que First( AllErrors ).

Error los registros incluyen:

Campo Tipo Descripción
Amable Enumeración ErrorKind (número) Categoría del error.
Mensaje Cadena de texto Mensaje sobre el error, adecuado para mostrar al usuario final.
Fuente Cadena de texto Ubicación en donde se originó el error, utilizada para informar. Por ejemplo, para una fórmula vinculada a una propiedad de control, este valor tiene el formato ControlName.PropertyName.
Observado Cadena de texto Ubicación en la que se muestra el error al usuario, utilizada para informar. Por ejemplo, para una fórmula vinculada a una propiedad de control, este valor tiene el formato ControlName.PropertyName.
Detalles Grabar Detalles sobre el error. Actualmente, solo se proporcionan detalles de errores de red. Este registro incluye HttpStatusCode, que contiene el código de estado HTTP y HttpResponse, que contiene el cuerpo de la respuesta del conector o servicio.

Por ejemplo, considere la siguiente fórmula como propiedad OnSelect de un control Button:

Set( a, 1/0 )

Y esta formula en la propiedad OnSelect de un segundo control Button:

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

La fórmula de ejemplo anterior mostraría el siguiente banner cuando se activan dos botones en una secuencia:

Control Button activado, que muestra una notificación de la función Notify.

Por lo general, solo habrá un error con el que FirstError pueda trabajar de manera adecuada. Sin embargo, hay escenarios en los que se pueden devolver varios errores. Por ejemplo, al usar un operador de encadenamiento de fórmulas o la función Concurrent. Incluso en estas situaciones, el informe FirstError podría ser suficiente para revelar un problema en lugar de sobrecargar a un usuario con múltiples errores. Si todavía tiene el requisito de trabajar con cada error individualmente, puede usar la tabla AllErrors.

IsError

La IsError función comprueba si hay un valor de error.

El valor devuelto es un valor booleano true o false.

El uso IsError evita cualquier procesamiento adicional del error.

IsBlankOrError

La IsBlankOrError función comprueba si hay un valor en blanco o un valor de error y es el equivalente de Or( IsBlank( X ), IsError( X ) ).

Al habilitar el control de errores para las aplicaciones existentes, considere la posibilidad de reemplazar IsBlank por IsBlankOrError para conservar el comportamiento de la aplicación existente. Antes de la incorporación del manejo de errores, se utilizaba un valor en blanco para representar valores nulos de bases de datos y valores de error. Error el control separa estas dos interpretaciones de en blanco que podrían cambiar el comportamiento de las aplicaciones existentes que siguen usando IsBlank.

El valor devuelto es un valor booleano true o false.

El uso IsBlankOrError evita cualquier procesamiento adicional del error.

Use la Error función para crear e informar de un error personalizado. Por ejemplo, puede tener lógica para determinar si un valor dado es válido para su contexto o noalgo no comprobado para un problema automáticamente. Puede crear y devolver su propio error, completo con Kind y Message, con el mismo registro descrito anteriormente para la IfError función.

En el contexto de IfError, use la Error función para volver a iniciar o pasar a través de un error. Por ejemplo, la lógica de IfError puede decidir que, en algunos casos, se puede omitir un error de forma segura, pero en otros casos es importante enviar el error. Dentro IfError o App.OnError, use Error( FirstError ) para pasar por un error.

La Error función también se puede pasar una tabla de errores, como se encontraría en la tabla AllErrors . Use Error( AllErrors ) para volver a iniciar todos los errores y no solo el primero.

Un registro en blanco o una tabla vacía pasada a Error da como resultado ningún error.

Sintaxis

Error( ErrorRecord )
Error( ErrorTable )

  • ErrorRecord – Obligatorio. Error registro de información, incluidos Kind, Message y otros campos. Se requiere tipo . FirstError se puede pasar directamente.
  • ErrorTable – Obligatorio. Tabla de registros de información de errores. AllErrors se pueden pasar directamente.

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

  • Valores – Obligatorio. Fórmulas para probar si hay un valor de error.
  • Reemplazos – Requeridos. Las fórmulas que se deben evaluar y los valores que se deben devolver si los argumentos de Value coincidentes devuelven un error.
  • DefaultResult – Opcional. Las fórmulas para evaluar si la fórmula no encuentra ningún error.

IsError( Value )
IsBlankOrError( Value )

  • Valor – Obligatorio. Fórmula que se probará.

Ejemplos

Sencillo IfError

Fórmula Descripción Resultado
IfError( 1, 2 ) El primer argumento no es un error. La función no tiene otros errores para verificar y ningún valor de retorno predeterminado. La función devuelve el último argumento de value evaluado. 1
IfError( 1/0, 2 ) El primer argumento devuelve un valor de error (debido a la división por cero). La función evalúa el segundo argumento y lo devuelve como resultado. 2
IfError( 10, 20, 30 ) El primer argumento no es un error. La función no tiene otros errores para verificar pero tiene un valor de retorno predeterminado. La función devuelve el argumento DefaultResult. 30
IfError( 10, 11, 20, 21, 300 ) El primer argumento 10 no es un error, por lo que la función no evalúa el reemplazo correspondiente de ese argumento 11. El tercer argumento 20 no es un error tampoco, por lo que la función no evalúa el reemplazo correspondiente de ese argumento 21. El quinto argumento 300 no tiene reemplazo correspondiente y es el resultado predeterminado. La función devuelve ese resultado porque la fórmula no contiene errores. 300
IfError( 1/0, Notify( "Hubo un problema interno" ) ) El primer argumento devuelve un valor de error (debido a la división por cero). La función evalúa el segundo argumento y muestra un mensaje al usuario. El valor devuelto de IfError es el valor devuelto de Notify, coerced al mismo tipo que el primer argumento a IfError (un número). 1

Sencillo IsError

Fórmula Descripción Resultado
IsError( 1 ) El argumento no es un error. FALSO
IsError( Blank() ) El argumento está en blanco, pero no es un error. FALSO
IsError( 1/0 ) El argumento es un error. verdadero
If( IsError( 1/0 ), Notify( "There was an internal problem" ) ) El argumento para devuelve un valor de error (debido a IsError la división por cero). Esta función devuelve true, que hace que If muestre un mensaje al usuario con la función Notify. El valor devuelto de If es el valor devuelto de Notify, convertido al mismo tipo que el primer argumento de If (un booleano). verdadero

Sencillo IsBlankOrError

Fórmula Descripción Resultado
IsBlankOrError( 1 ) El argumento no es un error ni está en blanco. FALSO
IsBlankOrError( Blank() ) El argumento está en blanco. verdadero
IsBlankOrError( 1/0 ) El argumento es un error. verdadero

Sencillo Error

En este ejemplo, las fechas se validan entre sí, lo que genera un error si hay algún problema.

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

En este ejemplo, se permite el paso de algunos errores mientras que otros se suprimen y se reemplazan por un valor. En el primer caso, b está en un estado de error porque el Valor La función tiene un argumento no válido. Debido a que el escritor de la fórmula no lo esperaba, se transmite para que el usuario lo vea. En el segundo caso, con la misma fórmula, b tiene el valor 0, lo que resulta en una división por cero. En este caso, el escritor de fórmulas puede saber que esto es aceptable para esta lógica, suprimir el error (no se muestra ningún banner) y devolver -1 en su 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

La tabla AllErrors se puede filtrar como cualquier otra tabla. Se usa con la Error función , los errores esperados se pueden quitar y los errores restantes se conservan y notifican. Por ejemplo, si supiéramos que la división por cero no va a ser un problema en un contexto particular, esos errores podrían filtrarse, dejando todos los demás errores intactos con la siguiente fórmula:

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

Paso a paso

  1. Agregue un control Text input y asígnele el nombre TextInput1, siempre que no sea su nombre predeterminado.

  2. Agregue un control Label y asígnele el nombre Label1, siempre que no sea su nombre predeterminado.

  3. Establezca la fórmula para la propiedad Text de Label1 en:

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

    La etiqueta 1 muestra el valor 1234 ya que esta es una entrada válida para la función Valor.

  5. En TextInput1, introduzca ToInfinity.

    La etiqueta 1 muestra el valor -1 ya que esta no es una entrada válida para la función Valor. Sin ajustar la función Value con IfError, la etiqueta no mostraría ningún valor, ya que el valor de error se trata como un espacio en blanco.

Vea también

Referencia de fórmula para Power Apps