Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
| Functions | Odnosi się do |
|---|---|
| Error IfError IsError |
|
| IsBlankOrError |
|
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:
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
Dodaj kontrolkę Text input i nadaj jej nazwę TextInput1, jeśli nazwa domyślna jest inna.
Dodaj kontrolkę Label i nadaj jej nazwę Label1, jeśli nazwa domyślna jest inna.
Ustaw następującą formułę dla właściwości Text kontrolki Label1:
IfError( Value( TextInput1.Text ), -1 )W polu TextInput1 wprowadź 1234.
Label1 pokazuje wartość 1234 , ponieważ jest to prawidłowe dane wejściowe funkcji Value.
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.