Comparteix a través de


Funció d'errors

S'aplica a: Aplicacions de llenç Aplicacions basades en models

Proporciona informació d'error per als canvis anteriors a una font de dades.

Informació general

Els errors poden ocórrer quan es canvia un registre d'una font de dades. Moltes causes són possibles, incloent-hi talls de xarxa, permisos inadequats i conflictes d'edició.

Les funcions que modifiquen dades a les fonts de dades, Patch, Collect, Remove, RemoveIf, Update, UpdateIf i SubmitForm informen d'errors de dues maneres:

  • Cadascuna d'aquestes funcions retornarà un valor d'error com a resultat de l'operació. Es poden detectar errors amb IsError i substituir-se o suprimir-se amb IfError i App.OnError com sempre. Per obtenir més informació, vegeu Gestió d'errors.
  • Després de l'operació, la funció Errors també retornarà els errors de les operacions anteriors. Això pot ser útil per visualitzar el missatge d'error en una pantalla de formulari sense haver de captar l'error en una variable d'estat.

Podeu evitar alguns errors abans que succeeixin amb les funcions Validate i DataSourceInfo. Vegeu treballar amb fonts de dades per obtenir més suggeriments sobre com treballar i evitar errors.

Descripció

La funció Errors retorna una taula d'errors que conté les columnes següents:

  • Rècord. Registre de la font de dades que ha tingut l'error. Si l'error s'ha produït durant la creació d'un registre, aquesta columna estarà en blanc.
  • Columna. La columna que ha causat l'error, si l'error es pot atribuir a una única columna. Si no, estarà en blanc.
  • Missatge. Una descripció de l'error. Aquesta cadena d'error es pot mostrar per a l'usuari final. Tingueu en compte que aquest missatge pot generar-lo la font de dades i podria ser llarg i contenir noms de columna crus que no tinguin cap significat per a l'usuari.
  • Error. Codi d'error que es pot utilitzar a les fórmules per ajudar-vos a resoldre l'error:
ErrorKind Descripció
ErrorKind.Conflict Un altre canvi s'ha fet al mateix registre, cosa que resulta en un conflicte de canvis. Utilitzeu la funció Refresh per tornar a carregar el registre i torneu a provar el canvi.
ErrorKind.ConstraintViolation S'ha infringit una o més restriccions.
ErrorKind.CreatePermission S'ha produït un intent de crear un registre i l'usuari actual no té permís per crear registres.
ErrorKind.DeletePermission S'ha produït un intent de suprimir un registre i l'usuari actual no té permís per suprimir registres.
ErrorKind.EditPermission S'ha produït un intent d'editar un registre i l'usuari actual no té permís per editar registres.
ErrorKind.GeneratedValue S'ha produït un intent de canviar una columna que la font de dades genera automàticament.
ErrorKind.MissingRequired Falta el valor d'una columna obligatòria al registre.
ErrorKind.None No hi ha cap error.
ErrorKind.NotFound S'ha produït un intent d'editar o suprimir un registre, però no es pot trobar el registre. Un altre usuari pot haver canviat el registre.
ErrorKind.ReadOnlyValue S'ha produït un intent de canviar una columna que és només de lectura.
ErrorKind.Sync La font de dades ha informat d'un error. Per obtenir més informació, consulteu la columna Missatge.
ErrorKind.Unknown S'ha produït un error, però d'un tipus desconegut.
ErrorKind.Validation S'ha detectat un problema general de validació que no s'ajustava a cap dels altres tipus.

Els errors es poden retornar per a tota la font de dades o només per a una fila seleccionada proporcionant l'argument Registre a la funció.

Patch o una altra funció de dades pot retornar un valor en blanc si, per exemple, no s'ha pogut crear un registre. Podeu passar en blanc a Errors i retornarà la informació d'error adequada en aquests casos. L'ús posterior de les funcions de dades en la mateixa font de dades suprimirà aquesta informació d'error.

Si no hi ha cap error, la taula que retorna Errors estarà buida i es podrà provar amb la funció IsEmpty.

Sintaxi

Errors( Font de dades[, Registre ] )

  • DataSource : obligatori. La font de dades per a la qual voleu retornar errors.
  • Registre : opcional. Un registre específic per al qual voleu retornar errors. Si no especifiqueu aquest argument, la funció retorna errors a tota la font de dades.

Exemples

Pas a pas

En aquest exemple, treballarem amb la font de dades Gelat:

Gelat.

A través de l'aplicació, un usuari carrega el registre Xocolata en un formulari d'entrada de dades i, a continuació, canvia el valor de Quantitat a 90. El registre en què s'ha de treballar es col·loca a la variable de context EditRecord:

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

Per fer aquest canvi a la font de dades, s'utilitza la funció Patch:

  • Pegat (Gelat, EditRecord, Galeria.Actualitzacions)

on Gallery.Updates s'avalua a { Quantitat: 90 }, ja que només s'ha modificat la propietat Quantitat.

Desafortunadament, just abans de la funció Patch s'invoca, algú més modifica la Quantitat de Xocolata a 80. El Power Apps detectarà això i no permetrà que es produeixi el canvi conflictiu. Podeu comprovar si hi ha aquesta situació amb la fórmula següent:

  • IsEmpty( Errors( IceCream, EditRecord ) )

que retorna fals, perquè la funció Errors ha retornat la taula següent:

Record Columna Missatge Error
{ Gust: "Xocolata", Quantitat: 100 } Buit "Un altre usuari ha modificat el registre que proveu de modificar. Torneu a carregar el registre i torneu-ho a provar." ErrorKind.Conflict

Podeu col·locar una etiqueta al formulari per mostrar aquest error a l'usuari.

  • Per mostrar l'error, definiu la propietat Text de l'etiqueta a aquesta fórmula:
    Label.Text = First(Errors( IceCream, EditRecord )). Missatge

També podeu afegir un botó Torna a carregar al formulari per tal que l'usuari pugui resoldre el conflicte de manera eficient.

  • Per mostrar el botó només quan s'ha produït un conflicte, definiu la propietat Visible del botó a aquesta fórmula:
    ! IsEmpty( Cerca( Errors( IceCream, EditRecord ), Error = ErrorKind.Conflict ) )
  • Per desfer el canvi quan l'usuari selecciona el botó, definiu la propietat OnSelect en aquesta fórmula:
    ReloadButton.OnSelect = Reverteix( IceCream, EditRecord )