Funzioni IfError e IsError in Power Apps

[Questo articolo fa parte della documentazione non definitiva, pertanto è soggetto a modifiche.]

Rileva errori e fornisce un valore alternativo o esegue un'azione.

Nota

IfError

La funzione IfError verifica i valori fino a quando non trova un errore. Se la funzione rileva un errore, valuta e restituisce un valore di sostituzione corrispondente e interrompe l'ulteriore valutazione. Un valore predefinito può anche essere fornito quando non vengono rilevati errori. La struttura di IfError è simile a quella della funzione If: IfError verifica la presenza di errori, mentre If verifica se sono true.

Utilizzare IfError per sostituire un errore con un valore valido di modo che i calcoli downstream possano continuare. Ad esempio, utilizzare questa funzione se l'input dell'utente potrebbe comportare una divisione per zero:

IfError( 1/x, 0 )

Questa formula restituisce 0 se il valore di x è zero, in quanto 1/x produrrà un errore. Se x non è zero, viene restituito 1/x.

Interrompere un'ulteriore elaborazione

Quando si concatenano formule in formule di comportamento, ad esempio:

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

Verrà tentata la seconda funzione Patch per DS2 anche se Patch per DS1 non riesce. L'ambito di un errore è limitato a ciascuna formula concatenata.

Uilizzare IfError per eseguire un'azione e continuare l'elaborazione solo se l'azione ha avuto esito positivo. Applicando IfError a questo esempio:

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

Se Patch di DS1 ha un problema, viene eseguito il primo Notify. Non si verifica un'ulteriore elaborazione incluso il secondo Patch di DS2. Se il primo Patch riesce, verrà eseguito il secondo Patch.

Se fornito, l'argomento facoltativo DefaultResult viene restituito se non vengono rilevati errori. Senza questo argomento, viene restituito l'ultimo argomento Value.

Sulla base dell'ultimo esempio, il valore restituito da IfError può essere verificato per determinare se ci sono stati problemi:

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

Compatibilità del tipo

IfError restituirà il valore di uno dei relativi argomenti. I tipi di tutti i valori che potrebbero essere restituiti da IfError devono essere compatibili.

Nell'ultimo esempio, Patch restituirà un record non compatibile con i booleani utilizzati per le formule Replacement o DefaultResult. Il che va bene, dal momento che non c'è una situazione in cui il valore restituito da queste chiamate Patch verrebbe restituito da IfError.

Nota

Durante il comportamento in corso per una modifica, i tipi di tutti gli argomenti di IfError devono essere attualmente compatibili.

Nel semplice esempio descritto in precedenza:

IfError( 1/x, 0 )

I tipi di 1/x e 0 erano compatibili in quanto entrambi erano stringhe di testo. In caso contrario, il secondo argomento verrà assegnato per corrispondere al tipo del primo argomento.

In Excel verrà visualizzato #DIV/0! quando si verifica una divisione per zero.

Prendiamo invece in considerazione IfError con quanto segue:

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

La formula sopra non funzionerà. La stringa di testo "#DIV/0!" sarà assegnata al tipo del primo argomento di IfError, che è un numero. Il risultato di IfError sarà ancora un altro errore poiché la stringa di testo non può essere assegnata. Come soluzione, convertire il primo argomento in una stringa di testo di modo che IfErrorrestituisca sempre una stringa di testo:

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

Come visto sopra, IfError può restituire un errore se Replacement or DefaultResult è un errore.

Errorinfo

Nelle formule di sostituzione, il record ErrorInfo fornisce informazioni sull'errore che è stato trovato. Questo record include:

Campo ErrorInfo Tipo Descrizione
Controllo Stringa di testo Nome del controllo corrente, utilizzato per segnalare dove si è verificato l'errore.
Tipo Enumerazione ErrorKind (numero) Categorizza l'errore.
Messaggio Stringa di testo Messaggio sull'errore, adatto per essere visualizzato all'utente finale.
Notify Boolean Quando non rilevato da IfError, se deve essere visualizzato un banner di notifica dell'utente finale.
Proprietà Stringa di testo Nome della proprietà corrente, utilizzata per segnalare dove si è verificato l'errore.

Ad esempio, consideriamo la seguente formula come proprietà OnSelect del controllo Pulsante:

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

La formula di esempio sopra visualizzerebbe il seguente banner quando il pulsante è attivato:

Controllo Pulsante attivato, che mostra una notifica dalla funzione Notify

IsError

La funzione IsError verifica la presenza di un valore di errore. Viene restituito un valore booleano true o false.

L'utilizzo di IsError impedirà qualsiasi ulteriore elaborazione dell'errore.

Sintassi

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

  • Value(s): obbligatorio. Formula o formule in cui verificare la presenza di un valore di errore.
  • Replacement(s): obbligatorio. Formule da valutare e valori da restituire se gli argomenti Value corrispondenti hanno restituito un errore.
  • DefaultResult: facoltativo. Le formule da valutare se la formula non trova errori.

IsError( Value )

  • Value: obbligatorio. Formula in cui verificare la presenza di un valore di errore.

Esempi

IfError semplice

Formula Descrizione Risultato
IfError( 1, 2 ) Il primo argomento non è un errore. La funzione non ha altri errori da controllare e nessun valore restituito predefinito. La funzione restituisce l'ultimo argomento Value valutato. 1
IfError( 1/0, 2 ) Il primo argomento restituisce un valore di errore, a causa della divisione per zero. La funzione valuta il secondo argomento e lo restituisce come risultato. 2
IfError( 10, 20, 30 ) Il primo argomento non è un errore. La funzione non ha altri errori da controllare ma ha un valore restituito predefinito. La funzione restituisce l'argomento DefaultResult. 30
IfError( 10, 11, 20, 21, 300 ) Il primo argomento 10 non è un errore, quindi la funzione non valuta la sostituzione corrispondente 11 di quell'argomento. Neanche il terzo argomento 20 è un errore, quindi la funzione non valuta la sostituzione corrispondente 21 di quell'argomento. Il quinto argomento 300 non ha una sostituzione corrispondente ed è il risultato predefinito. La funzione restituisce quel risultato perché la formula non contiene errori. 300
IfError( 1/0, Notify( "There was an internal problem" ) ) Il primo argomento restituisce un valore di errore, a causa della divisione per zero. La funzione valuta il secondo argomento e visualizza un messaggio all'utente. Il valore restituito di IfError è il valore restituito di Notify, assegnato allo stesso tipo del primo argomento di IfError (un numero). 1

IfError semplice

Formula Descrizione Risultato
IsError( 1 ) L'argomento non è un errore. false
IsError( 1/0 ) L'argomento è un errore. true
If( IsError( 1/0 ), Notify( "There was an internal problem" ) ) L'argomento di IsError restituisce un valore di errore, a causa della divisione per zero. Questa funzione restituisce true, di conseguenza If visualizza un messaggio all'utente con la funzione Notify. Il valore restituito di If è il valore restituito di Notify, assegnato allo stesso tipo del primo argomento di If (un booleano). true

Procedura dettagliata

  1. Aggiungere un controllo Input di testo e denominarlo TextInput1 se non ha tale nome per impostazione predefinita.

  2. Aggiungere un controllo Etichetta e denominarlo Label1 se non ha tale nome per impostazione predefinita.

  3. Impostare la formula per la proprietà Text di Label1 su:

    IfError( Value( TextInput1.Text ), -1 )
    
  4. In TextInput1, immettere 1234.

    Label1 mostrerà il valore 1234, poiché si tratta di un input valido per la funzione Value.

  5. In TextInput1, immettere ToInfinity.

    Label1 mostrerà il valore -1, poiché non è un input valido per la funzione Value. Senza il wrapping della funzione Value con IfError, l'etichetta non mostrerebbe alcun valore perché il valore di errore viene considerato come blank.

Vedi anche

Informazioni di riferimento sulle formule per Power Apps