Compartilhar via


Error, IfError, IsErrorIsBlankOrError funções

Functions Aplica-se a
Error
IfError
IsError
Aplicativos de tela O Copilot Studio Desktop flui colunas de fórmula do Dataverse para aplicativos controlados por modelos do Power Platform CLI Dataverse functions Power Pages
IsBlankOrError Aplicativos de tela Copilot Studio Desktop flui aplicativos baseados em modelo CLI CLI Dataverse funções Power Pages

Detecta erros e fornece um valor alternativo ou executa ação. Crie um erro personalizado ou passe um erro.

Observação

Se um aplicativo tiver desabilitado o recurso Gerenciamento de erros em nível de fórmula em Configurações>Atualizações>Descontinuado, essas funções não funcionarão corretamente.

IfError

A IfError função testa valores até encontrar um erro. Se a função encontrar um erro, a função avaliará e retornará um valor de substituição correspondente e interromperá a avaliação. Um valor padrão também pode ser fornecido quando nenhum erro for encontrado. A estrutura é IfError semelhante à da função If : IfError testa erros, enquanto If testa true.

Use IfError para substituir um erro por um valor válido para que os cálculos downstream possam continuar. Por exemplo, use essa função se a entrada do usuário puder resultar em uma divisão por zero:

IfError( 1/x, 0 )

Esta fórmula retorna 0 se o valor de x for zero, pois 1/x produz um erro. Se x for diferente de zero, 1/x será retornado.

Interrompendo o processamento adicional

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

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

A segunda função Patch para DS2 será executada mesmo se o Patch para DS1 falhar. O escopo de um erro é limitado a cada fórmula encadeada.

Use IfError para executar uma ação e continuar o processamento somente se a ação tiver sido bem-sucedida. Aplicando-se IfError a este exemplo:

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

Se o Patch do DS1 tiver um problema, a primeira Notificação será executada. Nenhum outro processamento é executado, incluindo o segundo Patch de DS2. Se o primeiro Patch obtiver êxito, o segundo Patch será executado.

Se fornecido, o argumento opcional DefaultResult será retornado se nenhum erro for descoberto. Sem esse argumento, o último argumento Valor será retornado.

Com base no último exemplo, o valor retornado IfError pode ser verificado para determinar se houve algum problema:

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

Compatibilidade de tipo

IfError retorna o valor de um de seus argumentos. Os tipos de todos os valores que podem ser retornados devem IfError ser compatíveis.

No último exemplo, Patch retorna um registro que não é compatível com os booleanos usados para as fórmulas Replacement ou o DefaultResult. O que é bom, já que não há nenhuma situação em que o valor retornado dessas chamadas de Patch seja retornado por IfError.

Observação

Embora o comportamento em processo de alteração, os tipos de todos os argumentos devem IfError ser compatíveis no momento.

No exemplo simples descrito anteriormente:

IfError( 1/x, 0 )

Os tipos de 1/x e 0 eram compatíveis pois ambos eram números. Caso contrário, o segundo argumento será forçado a corresponder ao tipo do primeiro argumento.

O Excel exibe #DIV/0! quando ocorre uma divisão por zero.

Considere IfError com o seguinte em vez disso:

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

A fórmula acima não funcionará. A cadeia de "#DIV/0!" caracteres de texto é coagida para o tipo do primeiro argumento, IfErrorque é um número. O resultado é IfError mais um erro, pois a cadeia de caracteres de texto não pode ser coagida. Como correção, converta o primeiro argumento em uma cadeia de caracteres de texto para que IfError sempre retorne uma cadeia de caracteres de texto:

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

Como visto acima, IfError poderá retornar um erro se a Substituição ou DefaultResult for um erro.

FirstError/AllErrors

Dentro das fórmulas de substituição, as informações sobre os erros encontrados estão disponíveis por meio do registro FirstError e da tabela AllErrors. AllErrors é uma tabela de registros de informações de erro, sendo FirstError um atalho para o primeiro registro desta tabela. FirstError sempre retorna o mesmo valor que First( AllErrors ).

Error os registros incluem:

Campo Tipo Descrição
Tipo Enumeração ErrorKind (número) Categoria do erro.
Mensagem Cadeia de caracteres de texto Mensagem sobre o erro, apropriado para ser exibido para o usuário final.
Fonte Cadeia de caracteres de texto Local de origem do erro, usado para relatórios. Por exemplo, para uma fórmula vinculada a uma propriedade de controle, esse valor está no formato ControlName.PropertyName.
Observado Cadeia de caracteres de texto Location em que o erro é exibido ao usuário, usado para relatórios. Por exemplo, para uma fórmula vinculada a uma propriedade de controle, esse valor está no formato ControlName.PropertyName.
Detalhes Registro Detalhes sobre o erro. Atualmente, os detalhes são fornecidos apenas para erros de rede. Este registro inclui HttpStatusCode, que contém o código de status HTTP e HttpResponse, que contém o corpo da resposta do conector ou serviço.

Por exemplo, considere a seguinte fórmula como uma propriedade OnSelect do controle Button:

Set( a, 1/0 )

Adicione esta fórmula na propriedade OnSelect de um segundo controle Button:

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

A fórmula de exemplo acima exibe o seguinte banner quando os dois botões são ativados em sequência:

Controle Button ativado, mostrando uma notificação da função Notify.

Normalmente, There será apenas um erro com o qual FirstError pode trabalhar suficientemente. No entanto, há cenários em que vários erros podem ser retornados. Por exemplo, ao usar um operador de encadeamento de fórmulas ou a função Concurrent. Mesmo nessas situações, relatar FirstError pode ser suficiente para revelar um problema em vez de sobrecarregar um usuário com vários erros. Se você ainda precisar trabalhar com cada erro individualmente, poderá usar a tabela AllErrors.

IsError

A IsError função testa um valor de erro.

O valor de retorno é um booliano true ou false.

O uso IsError impede qualquer processamento adicional do erro.

IsBlankOrError

A IsBlankOrError função testa um valor em branco ou um valor de erro e é o equivalente a Or( IsBlank( X ), IsError( X ) ).

Ao habilitar o tratamento de erros para aplicativos existentes, considere substituir o IsBlankIsBlankOrError para preservar o comportamento do aplicativo existente. Antes da adição do tratamento de erros, um valor em branco era usado para representar valores nulos de bancos de dados e valores de erro. Error O tratamento separa essas duas interpretações de espaço em branco que podem alterar o comportamento de aplicativos existentes que continuam a usar IsBlank.

O valor de retorno é um booliano true ou false.

O uso IsBlankOrError impede qualquer processamento adicional do erro.

Use a Error função para criar e relatar um erro personalizado. Por exemplo, você pode ter lógica para determinar se um determinado valor é válido para seu contexto ou não, algo não verificado para um problema automaticamente. Você pode criar e retornar seu próprio erro, concluído com Kind e Message, usando o mesmo registro descrito acima para a IfError função.

No contexto de IfError, use a Error função para relançar ou passar por um erro. Por exemplo, sua lógica pode decidir que, em IfError alguns casos, um erro pode ser ignorado com segurança, mas em outros casos o erro é importante para enviar. Dentro IfError ou App.OnError, use Error( FirstError ) para passar por um erro.

A Error função também pode ser passada a uma tabela de erros, como seria encontrado na tabela AllErrors . Use Error( AllErrors ) para relançar todos os erros e não apenas o primeiro.

Um registro em branco ou uma tabela vazia passada para Error não resultar em nenhum erro.

Sintaxe

Error( ErrorRecord )
Error( ErrorTable )

  • ErrorRecord – Obrigatório. Error registro de informações, incluindo Tipo, Mensagem e outros campos. Kind é obrigatório. FirstError pode ser passado diretamente.
  • ErrorTable – Obrigatório. Tabela de registros de informações de erro. AllErrors pode ser passado diretamente.

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

  • Value(s) – obrigatório. Fórmulas para testar quanto a um valor de erro.
  • Substituições – Obrigatório. As fórmulas a serem avaliadas e os valores a serem retornados se os argumentos Valor correspondentes retornarem um erro.
  • DefaultResult – Opcional. As fórmulas para avaliar se a fórmula não encontra erros.

IsError( Valor )
IsBlankOrError( Valor )

  • Value – obrigatório. Fórmula para testar.

Exemplos

Simples IfError

Fórmula Descrição Resultado
IfError( 1, 2 ) O primeiro argumento não é um erro. A função não possui outros erros para verificar e nenhum valor de retorno padrão. A função retorna o último argumento de valor avaliado. 1
IfError( 1/0, 2 ) O primeiro argumento retorna um valor de erro (por causa da divisão por zero). A função avalia o segundo argumento e o retorna como resultado. 2
IfError( 10, 20, 30 ) O primeiro argumento não é um erro. A função não possui outros erros para verificar, mas possui um valor de retorno padrão. A função retorna o argumento DefaultResult. 30
IfError( 10, 11, 20, 21, 300 ) O primeiro argumento 10 não é um erro, portanto, a função não avalia a substituição correspondente desse argumento 11. O terceiro argumento 20 também não é um erro, portanto, 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 padrão. A função retorna esse resultado porque a fórmula não contém erros. 300
IfError( 1/0, Notify( "Houve um problema interno" ) ) O primeiro argumento retorna um valor de erro (devido à divisão por zero). A função avalia o segundo argumento e exibe uma mensagem ao usuário. O valor retornado IfError é o valor retornado de Notify, coagido ao mesmo tipo do primeiro argumento para IfError (um número). 1

Simples IsError

Fórmula Descrição Resultado
IsError( 1 ) O argumento não é um erro. falso
IsError( Blank() ) O argumento é um espaço em branco, mas não é um erro. falso
IsError( 1/0 ) O argumento é um erro. verdadeiro
If( IsError( 1/0 ), Notify( "There was an internal problem" ) ) O argumento para IsError retornar um valor de erro (devido à divisão por zero). Esta função retorna true, o que faz com que If exiba uma mensagem ao usuário com a função Notify. O valor retornado de If é o valor retornado de Notify, forçado para o mesmo tipo do primeiro argumento de If (um booliano). verdadeiro

Simples IsBlankOrError

Fórmula Descrição Resultado
IsBlankOrError( 1 ) O argumento não é um erro ou está em branco. falso
IsBlankOrError( Blank() ) O argumento está em branco. verdadeiro
IsBlankOrError( 1/0 ) O argumento é um erro. verdadeiro

Simples Error

Neste exemplo, as datas são validadas uma em relação à outra, resultando em um erro se houver um problema.

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

Neste exemplo, alguns erros podem passar enquanto outros são suprimidos e substituídos por um valor. No primeiro caso, b está em um estado de erro porque o Valor a função tem um argumento inválido. Como isso é inesperado para o autor da fórmula, ele é repassado para que o usuário o veja. No segundo caso, com a mesma fórmula, b tem o valor 0, resultando em uma divisão por zero. Nesse caso, o redator da fórmula pode saber que isso é aceitável para essa lógica, suprimir o erro (nenhuma faixa é exibida) e 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

A tabela AllErrors pode ser filtrada como qualquer outra tabela. Usados com a Error função, os erros esperados podem ser removidos e os erros restantes mantidos e relatados. Por exemplo, se soubéssemos que a divisão por zero não seria um problema em um contexto específico, esses erros poderiam ser filtrados, deixando todos os outros erros intactos com a seguinte fórmula:

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

Passo a passo

  1. Adicione um controle Text input e nomeie-o como TextInput1 se ele não tiver esse nome por padrão.

  2. Adicione um controle Label e nomeie-o como Label1 se ele não tiver esse nome por padrão.

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

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

    Label1 mostra o valor 1234 pois esta é uma entrada válida para a função Valor.

  5. Em TextInput1, insira ToInfinity.

    Label1 mostra o valor -1 pois esta não é uma entrada válida para a função Value. Sem encapsular a função Value, IfErroro rótulo não mostraria nenhum valor, pois o valor de erro é tratado como um branco.

Consulte também

Referência de fórmula para Power Apps