Udostępnij za pośrednictwem


Funkcje Error, IfError, IsError, IsBlankOrError

Dotyczy: Kolumny z formułami Dataverse w aplikacjach kanwy Przepływy pulpitu Interfejs wiersza polecenia aplikacji Power Pages Power Platform opartych na modelu

Wykrywa błędy i podaje wartość alternatywną lub wykonuje działanie. Utwórz błąd niestandardowy lub pomiń błąd.

Uwaga

Jeśli aplikacja wyłączyła funkcję zarządzania błędami na poziomie formuły w obszarze Wycofane> aktualizacje>ustawień, te funkcje nie będą działać poprawnie.

IfError

Funkcja IfError sprawdza wartości, dopóki nie zostanie znaleziona błędna. Jeśli funkcja odnajdzie błąd, ocenia i zwraca wartość odpowiadające zastępstwo i zatrzymuje dalszą ocenę. W przypadku, gdy nie zostaną znalezione żadne błędy, można również podać wartość domyślną. Struktura IfError jest podobna do funkcji If – podczas gdy IfError testuje w poszukiwaniu błędów, funkcja If testuje w poszukiwaniu wartości true.

Użyj IfError, aby zamienić błąd na prawidłową wartość w celu kontynuowania obliczeń podrzędnych. Tej funkcji należy użyć na przykład wtedy, gdy wprowadzenie danych przez użytkownika może skutkować podziałem równym zero:

IfError( 1/x, 0 )

Ta formuła jest zwracana 0 , jeśli wartość wynosi x zero, co 1/x powoduje błąd. Jeśli x nie jest równa zeru, jest zwracane 1/x.

Zatrzymanie dalszego przetwarzania

Przy łańcuchu formuł w formułach zachowania, takich jak:

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

Druga funkcja Patch, która ma być poddana próbie DS2, w sytuacji nieudanego przeprowadzenia Patch w DS1. Zakres błędów jest ograniczony do każdej formuły, która jest uruchomiona w łańcuchu.

Korzystanie z funkcji IfError w celu wykonywania akcji i kontynuowania przetwarzania, jeśli działanie zakończyło się niepowodzeniem. Zastosowanie IfError do tego przykładu:

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

Jeśli Patch napotkała problem w ramach DS1, wykonane jest pierwsze Notify. Nie ma dalszego przetwarzania, w tym drugiej funkcji Patch dla DS2. Jeśli pierwsza funkcja Patch powiedzie się, zostanie wykonana druga funkcja Patch.

Jeśli jest podany, opcjonalny argument DefaultResult zostanie zwrócony w przypadku braku błędów. Bez tego argumentu zwracana jest Wartość ostatniego argumentu.

Rozwijając ostatni przykład, wartość zwrotna funkcji IfError może być sprawdzona, aby ocenić, czy wystąpiły problemy:

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

Zgodność typów

Funkcja IfError zwraca wartość jednego ze swoich argumentów. Typy wszystkich wartości, które mogą zostać zwrócone przez składnik IfError muszą być zgodne.

W ostatnim przykładzie funkcja Patch zwraca rekord, który nie jest zgodny z wartościami logicznymi używanymi dla formuł Replacement lub DefaultResult. Nie jest to problem, ponieważ nie ma sytuacji, w której wartość zwrotna z tych wywołań funkcji Patch jest zwracana przez IfError.

Uwaga

Podczas zachowania podczas przetwarzania zmiany, typy wszystkich argumentów IfError muszą być obecnie zgodne.

W prostym przykładzie opisanym wcześniej:

IfError( 1/x, 0 )

Typy 1/x i 0 były zgodne, ponieważ były to liczby. Jeśli tak nie jest, drugi argument jest wymuszany tak, aby pasował do typu pierwszego argumentu.

Wyświetlanie programu Excel#DIV/0! gdy następuje dzielenie przez zero.

Zamiast tego rozważmy IfError, podając następujący element:

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

Powyższa formuła nie zadziała. Ciąg "#DIV/0!" tekstowy jest przekształcany w typ pierwszego argumentu na IfError, który jest liczbą. Wynikiem IfError jest kolejny błąd, ponieważ nie można przekonwertować ciągu tekstowego. W celu dokonania poprawki należy przekonwertować pierwszy argument na łańcuch tekstowy, tak aby IfError zawsze zwracał ciąg tekstowy:

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

Jak pokazano powyżej, program IfError może zwrócić błąd w przypadku, gdy funkcje Zastępcze lub DefaultResult powoduje wystąpienie błędu.

FirstError / AllErrors

W formułach zastępczych informacje o znalezionych błędach są dostępne za pośrednictwem rekordu FirstError i tabeli AllErrors. AllErrors to tabela rekordów informacji o błędach, przy czym FirstError jest skrótem do pierwszego rekordu tej tabeli. FirstError zawsze zwraca tę samą wartość co First( AllErrors ).

Rekordy błędów obejmują:

Pole Typ Opis
Rodzaj Wyliczenie ErrorKind (liczba) Kategoria błędu.
Komunikat Ciąg tekstowy Komunikat o błędzie, który jest odpowiedni do wyświetlenia użytkownikowi końcowemu.
Źródło Ciąg tekstowy Lokalizacja, w której pochodzi błąd, używana na przykład do raportowania. Na przykład w przypadku formuły powiązanej z właściwością formantu ta wartość ma postać NazwaKontrolki.NazwaWłaściwości.
Obserwowane Ciąg tekstowy Lokalizacja, w której błąd został ujawniony użytkownikowi, używana do raportowania. Na przykład w przypadku formuły powiązanej z właściwością formantu ta wartość ma postać NazwaKontrolki.NazwaWłaściwości.
Szczegóły Nagraj Szczegóły błędu. Obecnie szczegółowe informacje są udostępniane tylko w przypadku błędów sieciowych. Ten rekord zawiera HttpStatusCode, który zawiera kod stanu HTTP, oraz HttpResponse, który zawiera treść odpowiedzi z łącznika lub usługi.

Można na przykład rozważyć użycie następującej formuły w kontrolce Button właściwości OnSelect:

Set( a, 1/0 )

I ta formuła na właściwości OnSelect drugiej kontrolki Button:

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

Powyższa formuła przykładowa wyświetli następujący baner, gdy dwa przyciski zostaną aktywowane kolejno:

Aktywowana kontrolka typu Button, pokazująca powiadomienie z funkcji Notify.

Zazwyczaj będzie tylko jeden błąd, z którym FirstError może wystarczająco pracować. Zdarza się jednak, że może zostać zwróconych wiele błędów. Na przykład w przypadku używania operatora używania formuły do jednoczesnego używania lub funkcji Concurrent. Nawet w takiej sytuacji raportowanie FirstError może wystarczyć, aby znaleźć problem, a nie przeciążyć użytkownika wieloma błędami. Jeśli nadal występuje konieczność pracy z poszczególnymi błędami, można użyć tabeli AllErrors.

IsError

Funkcja IsError sprawdza poprawność wartości błędu.

Wartością zwracaną jest wartość logiczna true lub false.

Użycie IsError zapobiega dalszemu przetwarzaniu błędu.

IsBlankOrError

Funkcja IsBlankOrError sprawdza wartość pustą lub wartość błędu i jest odpowiednikiem wartości Or( IsBlank( X ), IsError( X ) ).

Włączając obsługę błędów w istniejących aplikacjach, rozważ zastąpienie IsBlank z IsBlankOrError, aby zachować istniejące zachowanie aplikacji. Przed dodaniem obsługi błędów wartość pusta była używana do reprezentowania zarówno wartości null z baz danych, jak i wartości błędów. Obsługa błędów rozdziela te dwa rodzaje pustych danych, co może zmienić zachowanie istniejących aplikacji, które nadal korzystają z aplikacji IsBlank.

Wartością zwracaną jest wartość logiczna true lub false.

Użycie IsBlankOrError uniemożliwia dalsze przetwarzanie błędu.

Użyj funkcji Error do utworzenia i utworzenia raportu niestandardowego błędu. Na przykład możesz użyć logiki, aby określić, czy dana wartość jest prawidłowa w Twoim kontekście, czy nie — coś, co nie zostało automatycznie sprawdzone pod kątem problemu. Możesz utworzyć i zwrócić własny błąd, używając funkcji Rodzaj i Wiadomość, używając tego samego rekordu opisanego powyżej dla funkcji IfError.

W kontekście IfError można użyć funkcji Error do ponownego omyłki lub przejścia przez błąd. Na przykład logika w programie IfError może zdecydować, że w niektórych przypadkach można zignorować błąd, ale w innych przypadkach istotne jest jego wysłanie. W IfError lub App.OnError użyj Error( FirstError ) do przejścia przez błąd.

Do funkcji Error można też przekazać tabelę błędów, tak jak w tabeli AllErrors. Użyj Error( AllErrors ), aby ponownie zgłosić wszystkie błędy, a nie tylko pierwszy.

Pusty rekord lub pusta tabela przekazywana do Error nie powoduje błędu.

Składnia

Błąd( ErrorRecord )
Błąd( Tabela błędów)

  • ErrorRecord – wymagane. Rekord informacji o błędzie, w tym Rodzaj, Wiadomość i inne pola. Rodzaj jest wymagany. FirstError można przekazać bezpośrednio.
  • Tabela błędów– wymagane. Tabela rekordów informacji o błędach. AllErrors można przekazać bezpośrednio.

IfError(Wartość1,Zamiana1 [, Wartość2 ;Zamiana2 , ... [, Wynik_ domyślny] ] )

  • Wartości – Wymagane. Co najmniej jedna formuła do testowania pod kątem wartości błędu.
  • Zamienniki – Wymagane. Formuły, które mają zostać obliczone, i wartości, które mają zostać zwrócone, jeśli argumenty Wartość zwróciły błąd.
  • DefaultResult – Opcjonalne. Formuły, które mają zostać oszacowane, jeśli w formule nie zostaną znalezione żadne błędy.

IsError( Wartość )
IsBlankOrError( wartość )

  • Wartość – wymagane. Formułę do przetestowania.

Przykłady

Proste IfError

Formuła Opis Wynik
IfError( 1, 2 ) Pierwszy argument nie jest błędem. Funkcja nie ma innych błędów do sprawdzenia i brak domyślnej wartości zwracanej. Funkcja zwraca wartość ostatniego z argumentów. 1
IfError( 1/0, 2 ) Pierwszy argument zwraca wartość błędu (z powodu dzielenia przez zero). Funkcja ocenia drugi argument i zwraca go w wyniku. 2
IfError( 10, 20, 30 ) Pierwszy argument nie jest błędem. Funkcja nie ma innych błędów do sprawdzenia ale istnieje domyślna wartość zwracana. Funkcja zwraca argument DefaultResult. 30
IfError( 10, 11, 20, 21, 300 ) Pierwszy argument 10 nie jest komunikatem o błędzie, więc funkcja nie daje w wyniku zamiany w tym argumencie odpowiedniego zastępstwa 11. Trzeci argument 20 także nie jest komunikatem o błędzie, więc funkcja nie daje w wyniku zamiany w tym argumencie odpowiedniego zastępstwa 21. Piąty argument 300 nie ma odpowiadającego mu zastępstwa i jest wynikiem domyślnym. Ta funkcja zwraca taki wynik, ponieważ formuła nie zawiera błędów. 300
IfError( 1/0, Powiadom ( "Wystąpił problem wewnętrzny" ) ) Pierwszy argument zwraca wartość błędu (z powodu dzielenia przez zero). Funkcja oblicza drugi argument, co powoduje wyświetlenie komunikatu dla użytkownika. Wartość zwracana przez funkcję IfError jest wartością zwracaną przez funkcję Notify, przekształconą na taki sam typ danych, jaki miał pierwszy argument funkcji IfError (liczba). 1

Proste IsError

Wzór Opis Wynik
IsError( 1 ) Pierwszy argument nie jest błędem. fałszywy
IsError( Puste() ) Argument jest pusty, ale nie jest to błąd. fałszywy
IsError( 1/0 ) Pierwszy argument jest błędem. prawdziwy
If( IsError( 1/0 ), Powiadom ( "Wystąpił problem wewnętrzny" ) ) Argument IsError zwraca wartość błędu (z powodu dzielenia przez zero). Ta funkcja zwraca wartość true, co powoduje, że funkcja If wyświetla komunikat dla użytkownika za pomocą funkcji Notify. Wartość zwracana przez funkcję If jest wartością zwracaną przez funkcję Notify, przekształconą na taki sam typ danych, jaki miał pierwszy argument funkcji If (wartość logiczna). prawdziwy

Proste IsBlankOrError

Formuła Opis Wynik
IsBlankOrError( 1 ) Argument nie jest błędem ani pusty. fałszywy
IsBlankOrError( Puste() ) Argument jest pusty. prawdziwy
IsBlankOrError( 1/0 ) Pierwszy argument jest błędem. prawdziwy

Prosty błąd

W tym przykładzie daty są sprawdzane względem siebie, co skutkuje błędem w przypadku wystąpienia problemu.

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

W tym przykładzie niektóre błędy mogą przejść, podczas gdy inne są pomijane i zastępowane wartością. W pierwszym przypadku b jest w stanie błędu, ponieważ funkcja Value ma nieprawidłowy argument. Ponieważ jest to nieoczekiwane przez autora formuły, jest przekazywane, aby użytkownik mógł je zobaczyć. W drugim przypadku, przy tej samej formule, b ma wartość 0, co daje dzielenie przez zero. W takim przypadku autor formuł może wiedzieć, że jest to akceptowalne dla tej logiki, pominąć błąd (brak baneru) i zamiast tego zwrócić wartość -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

Tabelę AllErrors można filtrować tak, jak każdą inną tabelę. Używane z funkcją Error można usunąć oczekiwane błędy, a pozostałe błędy zostały zachowane i zgłoszone. Na przykład, gdybyśmy wiedzieli, że dzielenie przez zero nie będzie problemem w określonym kontekście, te błędy można odfiltrować, pozostawiając wszystkie inne błędy nienaruszone za pomocą następującej formuły:

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

Krok po kroku

  1. Dodaj kontrolkę Text input i nadaj jej nazwę TextInput1, jeśli nazwa domyślna jest inna.

  2. Dodaj kontrolkę Label i nadaj jej nazwę Label1, jeśli nazwa domyślna jest inna.

  3. Ustaw następującą formułę dla właściwości Text kontrolki Label1:

    IfError( Value( TextInput1.Text ), -1 )
    
  4. W polu TextInput1 wprowadź 1234.

    Label1 pokazuje wartość 1234 , ponieważ jest to prawidłowe dane wejściowe funkcji Value.

  5. W polu TextInput1 wprowadź ToInfinity.

    Label1 pokazuje wartość-1 , ponieważ nie jest to prawidłowe dane wejściowe funkcji Value. Gdyby funkcja Value nie została umieszczona w funkcji IfError, etykieta nie wyświetlałaby wartości, ponieważ błędna wartość jest traktowana jako wartość pusta.

Zobacz także

Odniesienie do formuły dla Power Apps