Funções IfError e IsError no Power Apps

[Este artigo é uma documentação de pré-lançamento e está sujeito a alterações.]

Deteta erros e disponibiliza um valor alternativo ou efetua uma ação.

Nota

IfError

A função IfError testa os valores até encontrar um erro. Se a função descobrir um erro, a função avalia e devolve um valor de substituição correspondente e para a avaliação adicional. Um valor predefinido também pode ser fornecido para quando não são encontrados erros. A estrutura de IfError é semelhante à da função If: IfError testa a existência de erros, enquanto If testa para valores true.

Utilize IfError para substituir um erro com um valor válido para os cálculos a jusante poderem continuar. Por exemplo, utilize esta função se a entrada de utilizador puder resultar numa divisão por zero:

IfError( 1/x, 0 )

Esta fórmula devolve 0 se o valor de x for zero, porque 1/x irá produzir um erro. Se x não for zero, então é devolvido 1/x.

Parar o processamento adicional

Ao encadear fórmulas em fórmulas de comportamento, tais como:

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

A segunda função Patch para DS2 será tentada, mesmo que o Patch para DS1 falhe. O âmbito de um erro está limitado a cada fórmula que está encadeada.

Utilize IfError para executar uma ação e continuar a processar apenas se a ação tiver sido concluída com êxito. Aplicar IfError a este exemplo:

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

Se o Patch de DS1 tiver um problema, é executado o primeiro Notify. Não ocorre nenhum processamento adicional, incluindo o segundo Patch de DS2. Se o primeiro Patch for bem-sucedido, o segundo Patch será executado.

Se for fornecido, o argumento DefaultResult será devolvido se não forem detetados erros. Sem este argumento, é devolvido o último argumento Value.

A partir do último exemplo, o valor de devolução de IfError pode ser verificado para determinar se ocorreram problemas:

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

Compatibilidade de tipos

IfError devolverá o valor de um dos seus argumentos. Os tipos de todos os valores que podem ser devolvidos por IfError têm de ser compatíveis.

No último exemplo, Patch devolverá um registo que não seja compatível com os Booleanos utilizados para as fórmulas Replacement ou o DefaultResult. Não há qualquer problema, uma vez que não há qualquer situação em que o valor devolvido por estas chamadas para Patch seriam devolvidas pelo IfError.

Nota

Enquanto o comportamento está no processo para uma alteração, os tipos de todos os argumentos para IfError têm de ser compatíveis.

No exemplo simples descrito anteriormente:

IfError( 1/x, 0 )

Os tipos de 1/x e 0 eram compatíveis porque ambas eram cadeias de texto. Se não forem, o segundo argumento será forçado a corresponder ao tipo do primeiro argumento.

O Excel apresentará #DIV/0! quando ocorrer uma divisão por zero.

Em vez disso, considere IfError com o seguinte:

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

A fórmula acima não vai funcionar. A cadeia de texto "#DIV/0!" será forçada para o tipo do primeiro argumento como IfError, que é um número. O resultado de IfError será ainda outro erro, uma vez que a cadeia de texto não pode ser forçada. Como correção, converta o primeiro argumento numa cadeia de texto para IfError devolver sempre uma cadeia de texto:

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

Como visto acima, IfError poderá devolver um erro se Replacement ou DefaultResult gerar um erro.

ErrorInfo

Nas fórmulas de substituição, o registo ErrorInfo fornece informações sobre o erro que foi encontrado. Este registo inclui:

Campo ErrorInfo Tipo Descrição
Controlo Cadeia de texto Nome do controlo atual, utilizado para reportar onde ocorreu o erro.
Tipo Enumeração ErrorKind (número) Categorizou o erro.
Mensagem Cadeia de texto Mensagem sobre o erro, adequada para ser apresentada ao utilizador final.
Notify Booleano Se não for detetado por IfError, se se dever apresentar uma faixa de notificação ao utilizador final.
Propriedade Cadeia de texto Nome da propriedade atual, utilizado para reportar onde ocorreu o erro.

Por exemplo, considere a seguinte fórmula como propriedade OnSelect de um controlo Button:

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

A fórmula de exemplo acima apresentaria a seguinte faixa quando o botão é ativado:

Controlo de botão ativado a mostrar uma notificação a partir da função Notify

IsError

A função IsError testa um valor de erro. O valor devolvido é um Booleano true ou false.

A utilização de IsError impedirá processamentos futuros do erro.

Sintaxe

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

  • Value(s) – obrigatório. A fórmula ou fórmulas a testar para um valor de erro.
  • Replacement(s) – obrigatório. As fórmulas a avaliar e os valores a devolver se os argumentos Value correspondentes tiverem devolvido um erro.
  • DefaultResult – opcional. As fórmulas a avaliar se a fórmula não encontrar erros.

IsError( Value )

  • Valor – Obrigatório. A fórmula a testar para um valor de erro.

Exemplos

Simple IfError

Fórmula Descrição Resultado
IfError( 1, 2 ) O primeiro argumento não é um erro. A função não tem outros erros para verificar e nenhum valor devolvido predefinido. A função devolve o último argumento value avaliado. 1
IfError( 1/0, 2 ) O primeiro argumento devolve um valor de erro (devido à divisão por zero). A função avalia o segundo argumento e devolve-o como resultado. 2
IfError( 10, 20, 30 ) O primeiro argumento não é um erro. A função não tem outros erros para verificar, mas tem um valor devolvido predefinido. A função devolve o argumento DefaultResult. 30
IfError( 10, 11, 20, 21, 300 ) O primeiro argumento 10 não é um erro, pelo que a função não avalia a substituição correspondente do argumento 11. O terceiro argumento 20 também não é um erro, pelo que a função não avalia a substituição correspondente desse argumento 21. O quinto argumento 300 não tem substituição correspondente e é o resultado predefinido. A função devolve esse resultado porque a fórmula não contém erros. 400
IfError( 1/0, Notify( "Ocorreu um problema interno" ) ) O primeiro argumento devolve um valor de erro (devido à divisão por zero). A função avalia o segundo argumento e apresenta uma mensagem ao utilizador. O valor devolvido de IfError é o valor devolvido de Notify, que tem de ser do mesmo tipo que o primeiro argumento de IfError (um número). 1

Simple IsError

Fórmula Descrição Resultado
IsError( 1 ) O argumento não é um erro. false
IsError( 1/0 ) O argumento é um erro. true
If( IsError( 1/0 ), Notify( "Ocorreu um problema interno" ) ) O argumento para IsError devolve um valor de erro (devido à divisão por zero). Esta funciton devolve true, o que faz com que If apresente uma mensagem ao utilizador com a função Notify. O valor devolvido de If é o valor devolvido de Notify, que tem de ser do mesmo tipo que o primeiro argumento de If (um booleano). true

Passo a passo

  1. Adicione um controlo Text input e atribua-lhe o nome TextInput1 caso não tenha esse nome por predefinição.

  2. Adicione um controlo de Label e dê-lhe o nome Label1, caso não tenha esse nome por predefinição.

  3. Defina a fórmula da propriedade Text de Label1 para:

    IfError( Value( TextInput1.Text ), -1 )
    
  4. Em TextInput1, introduza 1234.

    Será apresentado o valor 1234 para Label1, pois esta é uma entrada válida para a função Value.

  5. Em TextInput1, introduza ToInfinity.

    Será apresentado o valor -1 para Label1, pois esta não é uma entrada válida para a função Value. Sem incluir a função Value na função IfError, a etiqueta não apresentaria valores, visto que o valor de erro é tratado como se estivesse blank.

Consulte também

Referência de fórmula Power Apps

Nota

Pode indicar-nos as suas preferências no que se refere ao idioma da documentação? Responda a um breve inquérito. (tenha em atenção que o inquérito está em inglês)

O inquérito irá demorar cerca de sete minutos. Não são recolhidos dados pessoais (declaração de privacidade).