Comparteix via


Errors funció

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

Errors pot passar 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 retorna un valor d'error com a resultat de l'operació. Errors es pot detectar amb IsError i substituir o suprimir amb IfError i App.OnError com de costum. Per obtenir més informació, vegeu Gestió d'errors.
  • Després de l'operació, la Errors funció també retornarà els errors de les operacions anteriors. Pot ser útil per mostrar el missatge d'error en una pantalla de formulari sense necessitat de capturar 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 Errors funció 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 està en blanc.
  • Columna. La columna que ha causat l'error, si l'error es pot atribuir a una única columna. Si no, està en blanc.
  • Missatge. Una descripció de l'error. Aquesta cadena d'error es pot mostrar per a l'usuari final. Aquest missatge pot ser generat per la font de dades i pot ser llarg i contenir noms de columna en brut que poden no tenir 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 Es va detectar un problema de validació general, que no s'ajustava a un dels altres tipus.

Errors es pot retornar per a tota la font de dades o només per a una fila seleccionada proporcionant l'argument Record 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 retorna la informació d'error adequada en aquests casos. L'ús posterior de funcions de dades a la mateixa font de dades esborra aquesta informació d'error.

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

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

Per a aquest exemple, treballarem amb la font de dades IceCream , una font de dades per a la qual el Power Apps intentarà detectar conflictes:

Gelat.

Nota

El Power Apps no intenta detectar conflictes per als canvis a les taules del Dataverse.

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 contextEditRecord:

  • 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 com a { Quantity: 90 }, ja que només s'ha modificat la propietat Quantity .

Desafortunadament, just abans de la funció Patch s'invoca, algú més modifica la Quantitat de Xocolata a 80. Com que es tracta d'una font de dades compatible per a la detecció de conflictes, el Power Apps ho detectarà i no permetrà que es produeixi el canvi en conflicte. Podeu comprovar si hi ha aquesta situació amb la fórmula següent:

  • IsEmpty( Errors( Gelat, EditRecord ) )

Que retorna false, perquè la Errors funció 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( Lookup( Errors( IceCream, EditRecord ), Error = ErrorKind.Conflict ) )
  • Per revertir el canvi, que l'usuari selecciona el botó, definiu la propietat OnSelect en aquesta fórmula:
    ReloadButton.OnSelect = Reverteix( IceCream, EditRecord )