Udostępnij za pośrednictwem


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.
  • Komunikat. 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.

Patch lub inna funkcja danych może zwrócić pustą wartość, jeśli na przykład nie można 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

Błędy( DataSource [, Rekord ] )

  • Źródło danych– wymagane. Źródło danych, dla którego mają być zwracane błędy.
  • Rekord – opcjonalny. 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:

Ice Cream.

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( Lody, Smak = "Czekolada" ) } )

Aby wprowadzić tę zmianę w źródle danych, należy użyć funkcji Patch:

  • Łatka( Lody, EditRecord, Galeria.Aktualizacje )

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( Błędy ( Lody, EditRecord ) )

Zwraca ona wartość false, ponieważ funkcja Errors zwróciła następującą tabelę:

Rekord Kolumna Wiadomość Błąd
{ Flavor: "Chocolate", Quantity: 100 } pusty „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 )). Komunikat

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 = Przywróć( Lody, EditRecord )