De functie Errors

Van toepassing op: Canvas-apps Modelgestuurde apps

Biedt foutinformatie voor eerdere wijzigingen in een gegevensbron.

Samenzicht

Fouten kunnen ontstaan wanneer een record van een gegevensbron is gewijzigd. Er zijn veel oorzaken mogelijk, zoals netwerkstoringen, ontoereikende machtigingen en bewerkingsconflicten.

De functies die gegevens in gegevensbronnen wijzigen, zoals Patch, Collect, Remove, RemoveIf, Update, UpdateIf en SubmitForm rapporteren fouten op twee manieren:

  • Elk van deze functies retourneert een foutwaarde als resultaat van de bewerking. Fouten kunnen zoals gewoonlijk worden opgespoord met IsError en worden vervangen of onderdrukt met IfError en App.OnError. Zie Foutafhandeling voor meer informatie.
  • Na de bewerking retourneert de functie Errors ook de fouten voor eerdere bewerkingen. Dit kan handig zijn om het foutbericht op een formulierscherm weer te geven zonder de fout in een statusvariabele te hoeven vastleggen.

U kunt bepaalde fouten voorkomen voordat ze plaatsvinden met behulp van de functies Validate en DataSourceInfo. Zie Werken met gegevensbronnen voor meer suggesties voor het werken met en voorkomen van fouten.

Beschrijving

De functie Errors retourneert een tabel met fouten die de volgende kolommen bevat:

  • Record. De record in de gegevensbron waarin de fout optrad. Als de fout is opgetreden tijdens het maken van een record, is deze kolom leeg.
  • Kolom. De kolom die de fout veroorzaakt heeft, indien de fout kan worden toegeschreven aan één kolom. Zo niet, dan is deze kolom leeg.
  • Message. Een beschrijving van de fout. Deze fouttekenreeks kan worden weergegeven voor de eindgebruiker. Let erop dat dit bericht mogelijk is gegenereerd door de gegevensbron en lang kan zijn en onbewerkte kolomnamen kan bevatten die mogelijk onduidelijk zijn voor de gebruiker.
  • Fout. Een foutcode die kan worden gebruikt in formules om te helpen bij het oplossen van de fout:
ErrorKind Beschrijving
ErrorKind.Conflict Er is nog een wijziging gemaakt in dezelfde record, wat leidt tot een conflict. Gebruik de functie Refresh om de record opnieuw te laden en probeer de wijziging vervolgens opnieuw.
ErrorKind.ConstraintViolation Er zijn een of meer beperkingen overtreden.
ErrorKind.CreatePermission Er is een poging gedaan om een record te maken en de huidige gebruiker is niet gemachtigd om records te maken.
ErrorKind.DeletePermission Er is een poging gedaan om een record te verwijderen en de huidige gebruiker is niet gemachtigd om records te verwijderen.
ErrorKind.EditPermission Er is een poging gedaan om een record te bewerken en de huidige gebruiker is niet gemachtigd om records te bewerken.
ErrorKind.GeneratedValue Er is een poging gedaan om een kolom te wijzigen die de gegevensbron automatisch genereert.
ErrorKind.MissingRequired De waarde voor een vereiste kolom ontbreekt in de record.
ErrorKind.None Er is geen fout.
ErrorKind.NotFound Er is een poging gedaan om een record te bewerken of te verwijderen, maar de record kan niet worden gevonden. De record is mogelijk door een andere gebruiker gewijzigd.
ErrorKind.ReadOnlyValue Er is een poging gedaan om een kolom te wijzigen die alleen-lezen is.
ErrorKind.Sync Er is een fout gerapporteerd door de gegevensbron. Controleer de kolom Bericht voor meer informatie.
ErrorKind.Unknown Er is een onbekend type fout opgetreden.
ErrorKind.Validation Er is een algemeen validatieprobleem gedetecteerd dat niet binnen een van de andere categorieën past.

Fouten kunnen worden geretourneerd voor de gehele gegevensbron of alleen voor een geselecteerde rij door het argument Record te verstrekken aan de functie.

Patch of een andere gegevensfunctie retourneert mogelijk een lege waarde als bijvoorbeeld een record niet kan worden gemaakt. U kunt leeg doorgeven naar Fouten waarna het in dergelijke gevallen de juiste foutinformatie retourneert. Als u opnieuw een gegevensfunctie voor dezelfde gegevensbron gebruikt, worden deze foutgegevens gewist.

Als er geen fouten zijn, is de tabel die door Errors wordt geretourneerd leeg en kan deze worden getest met de functie IsEmpty.

Syntaxis

Errors( DataSource [, Record ] )

  • DataSource: vereist. De gegevensbron waarvoor u fouten wilt ophalen.
  • Record: optioneel. Een specifieke record waarvoor u fouten wilt ophalen. Als u dit argument niet opgeeft, retourneert de functie fouten voor de gehele gegevensbron.

Voorbeelden

Stapsgewijs

In dit voorbeeld werken we met de gegevensbron IceCream:

IceCream.

Via de app laadt een gebruiker de record Chocolate in een formulier voor gegevensinvoer en wijzigt vervolgens de waarde van Quantity in 90. De record waarmee moet worden gewerkt, is geplaatst in de contextvariabeleEditRecord:

  • UpdateContext( { EditRecord: LookUp( IceCream, Flavor = "Chocolate" ) } )

Gebruik de functie Patch om deze wijziging door te voeren in de gegevensbron:

  • Patch( IceCream, EditRecord, Gallery.Updates )

waarbij Gallery.Updates resulteert in { Quantity: 90 }, aangezien alleen de eigenschap Quantity is gewijzigd.

Helaas heeft iemand anders net voordat de functie Patch werd aangeroepen de Quantity voor Chocolate gewijzigd in 80. Power Apps detecteert dit en staat de conflicterende wijziging niet toe. U kunt hierop controleren met de volgende formule:

  • IsEmpty( Errors ( IceCream, EditRecord ) )

Deze retourneert false, omdat de functie Errors de volgende tabel heeft geretourneerd:

Record Kolom Bericht Fout
{ Flavor: "Chocolate", Quantity: 100 } leeg "Een andere gebruiker heeft de record gewijzigd die u probeert te wijzigen. Laad de record opnieuw en probeer het nogmaals." ErrorKind.Conflict

U kunt een label op het formulier plaatsen om de gebruiker deze fout te tonen.

  • Om de fout te tonen, stelt u de eigenschap Text van het label in op deze formule:
    Label.Text = First(Errors( IceCream, EditRecord )).Message

U kunt ook een knop Opnieuw laden aan het formulier toevoegen, zodat de gebruiker efficiënt het conflict kan oplossen.

  • Als u wilt dat de knop alleen wordt weergegeven wanneer er een conflict is opgetreden, stelt u de eigenschap Visible in op deze formule:
    !IsEmpty( Lookup( Errors( IceCream, EditRecord ), Error = ErrorKind.Conflict ) )
  • Om de wijziging terug te draaien wanneer de gebruiker de knop selecteert, stelt u de eigenschap OnSelect van de knop in op deze formule:
    ReloadButton.OnSelect = Revert( IceCream, EditRecord )