Udostępnij przez


Error, , IfErrorIsError, IsBlankOrError , functions

Functions Odnosi się do
Error
IfError
IsError
Aplikacje kanwy Copilot Studio Desktop przepływy formuły Dataverse kolumny Oparte na modelu Aplikacje interfejsu wiersza polecenia platformy Power Platform Funkcje usługi PowerVerse w usłudze Power Pages
IsBlankOrError Aplikacje kanwy Copilot Studio Desktop przepływy oparte na modelu Aplikacje oparte na modelu Interfejs wiersza polecenia platformy PowerVerse funkcje Power Pages

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

Notatka

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 testuje wartości do momentu znalezienia błędu. 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ą. IfError Struktura funkcji If przypomina funkcję If: IfError sprawdza błędy, a funkcja If sprawdza wartość true.

Użyj polecenia IfError , aby zastąpić błąd prawidłową wartością, aby obliczenia podrzędne mogły kontynuować. 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ść x wynosi 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.

Użyj IfError polecenia , aby wykonać akcję i kontynuować przetwarzanie tylko wtedy, gdy akcja zakończyła się pomyślnie. IfError Zastosowanie 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.

Korzystając z ostatniego przykładu, można sprawdzić wartość zwracaną z IfError , aby określić, czy wystąpiły jakieś problemy:

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

Zgodność typów

IfError Zwraca wartość jednego z jego argumentów. Typy wszystkich wartości, które mogą być zwracane przez IfError program, 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. Co jest w porządku, ponieważ nie ma sytuacji, w której wartość zwracana z tych wywołań patch zostanie zwrócona przez .IfError

Notatka

Podczas gdy zachowanie w procesie 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 wymuszony tak, aby pasował do typu pierwszego argumentu.

Wyświetlenia Excela #DIV/0! gdy następuje dzielenie przez zero.

Rozważ IfError zamiast tego następujące kwestie:

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

Powyższa formuła nie zadziała. Ciąg "#DIV/0!" tekstowy jest coerced do typu pierwszego argumentu na IfError, który jest liczbą. Wynik IfError jest kolejnym błędem, ponieważ ciąg tekstowy nie może być konerced. W ramach poprawki przekonwertuj pierwszy argument na ciąg tekstowy, aby IfError zawsze zwracał ciąg tekstowy:

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

Jak pokazano powyżej, może zwrócić błąd, IfError jeśli błąd zastępczy lub DefaultResult jest błędem.

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 ).

Error rekordy 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ć NazwaFormantu.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ć NazwaFormantu.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 testuje wartość błędu.

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

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

IsBlankOrError

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

Podczas włączania obsługi błędów dla istniejących aplikacji rozważ zastąpienie elementu IsBlank elementem 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. Error obsługa rozdziela te dwie interpretacje puste , co może zmienić zachowanie istniejących aplikacji, które nadal korzystają z elementu IsBlank.

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

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

Error Użyj funkcji , aby utworzyć i zgłosić błąd niestandardowy. 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 wraz z typem i komunikatem, używając tego samego rekordu IfError opisanego powyżej dla funkcji.

W kontekście IfErrorfunkcji użyj Error funkcji , aby ponownie wrosnąć lub przekazać błąd. Na przykład logika w IfError programie może zdecydować, że w niektórych przypadkach błąd może zostać bezpiecznie zignorowany, ale w innych przypadkach błąd jest ważny do wysłania. W pliku IfError lub App.OnError użyj Errormetody ( FirstError), aby przejść przez błąd.

Funkcję Error można również przekazać tabelę błędów, jak można znaleźć w tabeli AllErrors . Użyj poleceniaError ( AllErrors ), aby ponownie przerosić wszystkie błędy, a nie tylko pierwsze.

Pusty rekord lub pusta tabela przekazana do Error powoduje brak błędu.

Składnia

Error( ErrorRecord )
Error( ErrorTable )

  • ErrorRecord – wymagane. Error rekord informacyjny, w tym Kind, Message i inne pola. Rodzaj jest wymagany. FirstError można przekazać bezpośrednio.
  • Tabela błędów– wymagane. Tabela rekordów informacji o błędach. Wszystkie błędy mogą być przekazywane bezpośrednio.

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

  • 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

Prosty 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, Notify( "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. Zwracana wartość IfError jest zwracaną wartością Notify, coerced do tego samego typu co pierwszy argument do IfError (liczba). 1

Prosty IsError

Formuła Opis Wynik
IsError( 1 ) Pierwszy argument nie jest błędem. fałszywy
IsError( Blank() ) Argument jest pusty, ale nie jest to błąd. fałszywy
IsError( 1/0 ) Pierwszy argument jest błędem. prawdziwy
If( IsError( 1/0 ), Notify( "Wystąpił problem wewnętrzny" ) ) Argument zwraca IsError wartość błędu (z powodu dzielenia o 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

Prosty IsBlankOrError

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

Prosty Error

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żywany z funkcją Error , oczekiwane błędy można usunąć, 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. Bez zawijania funkcji Value za pomocą IfErrorpolecenia etykieta nie będzie pokazywać żadnej wartości, ponieważ wartość błędu jest traktowana jako pusta.

Zobacz także

Odniesienie do formuły dla Power Apps