Funkcja Errors
Dotyczy: aplikacje kanwy
aplikacje oparte na modelu
Zawiera informacje o błędach wcześniejszych zmian źródła danych.
Omówienie
Podczas wprowadzania zmian w rekordzie źródła danych mogą występować błędy. Mogą one mieć różne przyczyny, łącznie z awarią sieci, niewystarczającymi uprawnieniami i konfliktami edycji.
Funkcje, które modyfikują dane w źródłach danych, takie jak Patch, Collect, Remove, RemoveIf, Update, UpdateIf i SubmitForm, zgłaszają błędy na dwa sposoby:
- Każda z tych funkcji zwraca wartość błędu w wyniku operacji. Błędy można wykrywać za pomocą funkcji IsError oraz zastępować lub pomijać je w zwykły sposób za pomocą funkcji IfError i App.OnError. Zobacz temat Obsługa błędów, aby uzyskać więcej informacji.
- Po operacji funkcja Errors zwraca również błędy z poprzednich operacji. Może być to przydatne do wyświetlania komunikatu o błędzie na ekranie formularza bez konieczności przechwytywania błędu w zmiennej stanu.
Możesz uniknąć niektórych błędów zanim wystąpią przy użyciu funkcji Validate i DataSourceInfo. Aby uzyskać więcej sugestii dotyczących obsługi i unikania błędów, zobacz artykuł na temat pracy ze źródłami danych.
Opis
Funkcja Errors zwraca tabelę błędów, które zawiera następujące kolumny:
- Rekord. Rekord w źródle danych, którego dotyczy błąd. Jeśli błąd wystąpił podczas tworzenia rekordu, ta kolumna będzie pusta.
- Kolumna. Kolumna, która spowodowała błąd, jeśli ten błąd można przypisać do jednej kolumny. Jeśli nie można tego zrobić, ta kolumna będzie pusta.
- Wiadomość. Opis błędu. Ten ciąg błędu może być wyświetlany u użytkownika końcowego. Ten komunikat może zostać wygenerowany przez źródło danych, może być długi i może zawierać nieprzetworzone nazwy kolumn, które mogą nie mieć żadnego znaczenia dla użytkownika.
- Błąd. Kod błędu, którego można użyć w formułach w celu usunięcia błędu:
ErrorKind | Opis |
---|---|
ErrorKind.Conflict | Wprowadzono inną zmianę tego samego rekordu, co spowodowało konflikt zmiany. Użyj funkcji Refresh, aby ponownie załadować rekord, i spróbuj ponownie wprowadzić zmianę. |
ErrorKind.ConstraintViolation | Naruszono co najmniej jedno ograniczenie. |
ErrorKind.CreatePermission | Podjęto próbę utworzenia rekordu i bieżący użytkownik nie ma uprawnień do tworzenia rekordów. |
ErrorKind.DeletePermission | Podjęto próbę usunięcia rekordu i bieżący użytkownik nie ma uprawnień do usuwania rekordów. |
ErrorKind.EditPermission | Podjęto próbę edytowania rekordu i bieżący użytkownik nie ma uprawnień do edytowania rekordów. |
ErrorKind.GeneratedValue | Podjęto próbę zmiany kolumny wygenerowanej automatycznie przez źródło danych. |
ErrorKind.MissingRequired | W rekordzie brakuje wartości wymaganej kolumny. |
ErrorKind.None | Nie ma błędu. |
ErrorKind.NotFound | Podjęto próbę edytowania lub usunięcia rekordu, ale nie można było odnaleźć rekordu. Inny użytkownik mógł zmienić rekord. |
ErrorKind.ReadOnlyValue | Podjęto próbę zmiany kolumny, która jest tylko do odczytu. |
ErrorKind.Sync | Źródło danych zgłosiło błąd. Więcej informacji można znaleźć w kolumnie Wiadomość. |
ErrorKind.Unknown | Wystąpił błąd nieznanego typu. |
ErrorKind.Validation | Wykryto ogólny problem weryfikacji, który nie mieści się w żadnej innej kategorii. |
Zwracane błędy mogą dotyczyć całego źródła danych lub tylko wybranego wiersza, jeśli wprowadzisz w funkcji argument Rekord.
Funkcja Patch lub inna funkcja danych może zwrócić pustą wartość, jeśli na przykład nie udało się utworzyć rekordu. Możesz przekazać pustą wartość do funkcji Errors – w takiej sytuacji zwróci ona odpowiednie informacje o błędzie. Kolejne użycie funkcji danych w tym samym źródle danych spowoduje wyczyszczenie informacji o tym błędzie.
W przypadku braku błędów tabela zwrócona przez funkcję Errors będzie pusta i będzie można ją przetestować przy użyciu funkcji IsEmpty.
Składnia
Errors( ŹródłoDanych [, Rekord ] )
- DataSource – wymagane. Źródło danych, dla którego mają być zwracane błędy.
- Rekord - wartość opcjonalna. Rekord, dla którego mają być zwracane błędy. Jeśli ten argument nie zostanie określony, funkcja będzie zwracać błędy dla całego źródła danych.
Przykłady
Krok po kroku
W tym przykładzie użyto źródła danych IceCream:
Użytkownik ładuje za pomocą aplikacji rekord Chocolate w formie wpisu danych, a następnie zmienia wartość Ilość na 90. Rekord, który ma zostać użyty, znajduje się w zmiennej kontekstowejEditRecord:
- UpdateContext( { EditRecord: LookUp( IceCream, Flavor = "Chocolate" ) } )
Aby wprowadzić tę zmianę w źródle danych, należy użyć funkcji Patch:
- Patch( IceCream, EditRecord, Gallery.Updates )
gdzie element Gallery.Updates daje w wyniku wartość { Quantity: 90 }, ponieważ zmodyfikowano tylko właściwość Quantity.
Niestety, tuż przed wywołaniem funkcji Patch inna osoba zmieniła wartość właściwości Ilość dla rekordu Chocolate na 80. Usługa Power Apps wykryje to i nie zezwoli na zmianę powodującą konflikt. Możesz to sprawdzić przy użyciu formuły:
- IsEmpty( Errors( IceCream, EditRecord ) )
Zwraca ona wartość false, ponieważ funkcja Errors zwróciła następującą tabelę:
Rekord | Kolumna | Wiadomość | Błąd |
---|---|---|---|
{ Flavor: "Chocolate", Quantity: 100 } | puste | „Inny użytkownik zmodyfikował rekord, który próbujesz zmienić. Załaduj ten rekord ponownie i ponów próbę.” | ErrorKind.Conflict |
Możesz dodać etykietę do formularza, aby pokazać ten błąd użytkownikowi.
- Aby wyświetlić błąd, ustaw dla właściwości Text etykiety następującą formułę:
Label.Text = First(Errors( IceCream, EditRecord )).Message
Możesz też dodać do formularza przycisk Załaduj ponownie, aby umożliwić użytkownikowi efektywne rozwiązanie konfliktu.
- Aby wyświetlać przycisk tylko w przypadku wystąpienia konfliktu, ustaw dla właściwości Visible przycisku następującą formułę:
!IsEmpty( Lookup( Errors( IceCream, EditRecord ), Error = ErrorKind.Conflict ) ) - Aby przywrócić zmianę po wybraniu przycisku przez użytkownika, ustaw dla właściwości OnSelect przycisku następującą formułę:
ReloadButton.OnSelect = Revert( IceCream, EditRecord )