Partekatu honen bidez:


Errore-kudeaketa

Oharra

Artikulu honek deskribatzen duen portaera erabilgarri dago Formula-mailako erroreen kudeaketa eginbide esperimentala Ezarpenak>datozen ezarpenak>aurrebista aktibatuta dago. Informazio gehiago: Gaituta dauden funtzioak kontrolatzea

Akatsak gertatzen dira. Sareak jaisten dira, biltegiratzea betetzen da, ustekabeko balioak sartzen dira. Garrantzitsua da zure logikak behar bezala funtzionatzen jarraitzea balizko arazoen aurrean.

Lehenespenez, akatsak aplikazio baten formuletatik igarotzen dira eta aplikazioaren azken erabiltzaileari jakinaraziko zaizkio. Modu honetan, azken erabiltzaileak ustekabeko zerbait gertatu dela badaki, arazoa beraiek konpondu ahal izango dute beste sarrera batekin edo arazoaren berri eman diezaioke aplikazioaren jabeari.

Aplikazio-sortzaile gisa, zure aplikazioko akatsen kontrola har dezakezu:

  • Arazoak detektatzea eta erroreei aurre egitea. Errore bat gerta daitekeen aukera badago, aplikazioaren formulak idatz daitezke errore-egoera detektatzeko eta eragiketa berriro saiatzeko. Azken erabiltzaileak ez du kezkatu behar errore bat gertatu izanagatik, egileak aukera kontuan hartu duelako. Hori egiten da formulan IfError, IsError, eta IsErrorOrBlank funtzioekin.
  • Erroreen berri ematea. Errore bat aurkitu den formulan kudeatzen ez bada, errorea App.OnError kudeatzailera igotzen da. Hemen, errorea ezin da ordezkatu jada gertatu denez eta formula kalkuluen zati bat da. Baina App.OnError erabili dezakezu amaierako erabiltzaileari errorea nola jakinarazten zaion kontrolatzeko, erroreen berri guztiak batera kentzeko barne. App.OnError k ere akatsen berri emateko puntu komun bat eskaintzen du aplikazio osoan.
  • Errore bat sortzea eta berriro botatzea. Azkenik, akats-baldintza bat detekta dezakezu zure logikarekin, zure aplikazioari berariazko baldintza bat. Erabili Errorea funtzioa errore pertsonalizatuak sortzeko. Errorea funtzioa ere erabiltzen da berriro errorea botatzeko galdetu ondoren IfError edo App.OnError elementuetan.

Erabiltzen hastea

Has gaitezen adibide sinple batekin.

  1. Sortu pantaila berri bat Power Apps mihise aplikazioan.
  2. Sartu TextInput kontrola. Lehenetsia izango da TextInput1 izena.
  3. Txertatu Etiketa kontrola.
  4. Ezarri Testua propietatea Etiketa kontrolekoa formulan
1/Value( TextInput1.Text )

Errore-banda

Errore bat dugu TextInput kontrolaren testu lehenetsia "Text input" delako, ezin baita zenbaki batera bihurtu. Lehenespenez, gauza ona da: azken erabiltzaileak jakinarazpen bat jasoko du aplikazioan espero bezala funtzionatzen ez duen zerbait.

Jakina, ez dugu nahi akatsik erabiltzailea agurtzea aplikazio hau abiarazten duen bakoitzean. Litekeena da "Text input" ez dela testua idazteko koadroaren lehenetsi egokia. Arazoa konpontzeko, aldatu Lehenetsia propietatea TextInput kontrolarena hona:

Blank()

Errorearen pankarta

Hmm, orain beste errore bat dugu. Hutsik duten eragiketa matematikoek, zatiketa adibidez, hutsunearen balioa zero batera behartuko dute. Eta horrek zero errorearen zatiketa eragiten du orain. Hori konpontzeko, egoera honetarako jokabide egokia zein den erabaki behar dugu aplikazio honetan. Erantzuna hutsik erakustea izan daiteke testu-sarrera hutsik dagoenean. Hori lor dezakegu gure formula IfError funtzioarekin bilduz:

IfError( 1/Value( TextInput1.Text ), Blank() )

Ez da erroreen pankartarik bistaratzen, balio huts baten ondoriozko errore bat hutsune batekin ordeztu da

Orain errorea baliozko balio batekin ordezkatzen da eta errorearen pankarta desagertu egin da. Baina, baliteke gainditzea, IfError estalkiak guztiak akatsak erabili genituen, balio txarra idaztea barne gisa "hello". Honi aurre egin diezaiokegu gure IfError zero kasuen araberako zatiketa kudeatzeko eta gainerako akats guztiak berriro botatzeko:

IfError( 1/Value( TextInput1.Text ), 
         If( FirstError.Kind = ErrorKind.Div0, Blank(), Error( FirstError ) ) )

Ez da akatsen pankartarik bistaratzen, hutsune batez ordezkatu da hutsunea dela eta, bestela, errorea berriro botako da.

Beraz, exekuta ditzagun gure aplikazioa eta proba ditzagun balio desberdinak.

Inongo baliorik gabe, aplikazioa abiaraztean bezala, ez da erantzunik agertzen balio lehenetsia hutsik denez, baina ez da errorerik ere erakusten IfError gisak zatiketa zero errorearekin ordezkatzen du.

Ez da erantzunik bistaratzen eta ez dago erroreen pankartarik

4 idazten badugu, espero den emaitza 0,25 lortuko dugu:

0.25 bistaratzen da eta akatsen pankartarik ez

Eta legez kanpoko zerbait idazten badugu, hello adibidez, errore-pankarta bat jasoko dugu:

Ez da baliorik bistaratzen eta erroreen pankarta agertzen da

Hau sarrerako adibide sinple bat da. Erroreak kudeatzea hainbat modutan egin daiteke, aplikazioaren beharren arabera:

  1. Erroreen pankartaren ordez, formularekin "#Error" erakutsi genezakeen etiketa-kontrolean. Ordezkapen motak lehen argumentuarekin bateragarriak izan daitezen IfError esplizituki zenbakizko emaitza testu-kate batean bihurtu behar dugu Testua funtzioa.
    IfError( Text( 1/Value( TextInput1.Text ) ), 
             If( FirstError.Kind = ErrorKind.Div0, Blank(), "#Error" )
    
    Akatsen pankartarik ez eta horren ordez #Error agertzen da emaitza gisa
  2. Instantzia zehatz hau IfError-rekin bildu beharrean App.OnError kudeatzaile zentralizatu bat idatzi genezake. Ezin dugu ordezkatu erakutsitako katea "#Error"-rekin, errorea jada gertatu delako eta App.OnError txostenak kontrolatzeko soilik eskaintzen da.
    If( FirstError.Kind <> ErrorKind.Div0, Error( FirstError ) )
    

Errore-hedapena

Erroreak formulen zehar igarotzen dira Excel-en bezala. Adibidez, Excel-en, gelaxkak A1 formula =1/0 badu, orduan A1-ek errore-balioa #DIV0! erakutsiko du:

Excel kalkulu-orria A1=1/0 eta #DIV/0! gelaxkan agertzen da

A2 gelaxkak A1 adibidez, =A1*2 bezalako formula batekin aipatzen badu, errorea formula horretan ere hedatzen da:

Excel kalkulu-orriarekin A2=A1*2 eta #DIV/0! gelaxkan agertzen da

Erroreak bestela kalkulatuko litzatekeen balioa ordezkatzen du. Ez dago zelula A2-ko biderketaren emaitzarik, zatiketaren errorea bakarrik A1.

Power Fx modu berean funtzionatzen du. Oro har, errore bat funtzio edo operadore bati argumentu gisa ematen bazaio, eragiketa ez da gertatuko eta sarrerako errorea eragiketaren emaitza gisa igaroko da. Adibidez, Mid( Text( 1/0 ), 1, 1 ) Zeroaren araberako zatiketa errore bat itzuliko du, barneko errore gehiena Testua funtziotik pasatzen baita eta Erdiko funtzioa:

Eragiketa baliogabea erakusten duen errore-banda: zeroz zatitzea

Oro har, erroreak ez dira Power Apps kontrol-propietateetatik igarotzen. Heda dezagun aurreko adibidea lehen etiketaren Text propietatea errore-egoera bat den bistaratzen duen kontrol gehigarri batekin:

Ez da errorerik agertzen bigarren etiketen kontrolan

Ondo dago erroreak kontrol baten bidez ez hedatzea, sistemak kontrol-propietate guztietan sarreran akatsak ikusiko dituelako. Errorea ez da galduko.

Funtzio eta operadore gehienek "errorea sartu, errorea kanpoan" araua jarraitzen dute, baina salbuespen batzuk daude. Funtzioak IsError, IsErrorOrBlank, eta IfError akatsekin lan egiteko diseinatuta daude, beraz, agian ez dute errorerik itzultzen, haietara pasatzen bada ere.

Akatsak behatzea

Erroreak ez dira ikusten haien balioa erabili arte.

Ondorioz, Bada eta Hautatu funtzioek ere akatsik ez itzultzea baliteke bat pasatzen bada. Kontuan hartu If( false, 1/0, 3 ) formula. Formulan zerorekin zatitu errorea dago, baina If-ek ez du hartzen adarraren elementua, false, Power Fx eta Power Apps-k ez dutelako errorea jakinarazten:

Ez dago erroreen pankartarik If funtzioarekin etiketa Testuaren jabetzan

Errore batekin Ezarri funtzioa erabiltzeak ez du errorerik jakinaraziko errorea aldagaian jartzen den unean. Adibidez Power Apps-en, hona hemen App.OnStart-en formula bat, zero errorearen zatiketa aldagaian x jartzen duena:

Ez dago erroreen pankartarik Ezarri funtzio-deia App.OnStart-en

Ez da errorerik jakinarazi, ez delako x erreferentzia egiten. Hala ere, etiketa-kontrol bat gehitzen dugunean eta bere Testua propietatea x ezartzen dugunean, errorea bistaratuko da:

Erroreen pankarta x aldagaiari erreferentzia egiten dion etiketa-kontrolarekin erakusten da

Formula bateko erroreak ikusi ditzakezu IfError, IsError, eta IsErrorOrBlank funtzioekin. Funtzio hauekin, ordezko balio bat itzul dezakezu, ordezko ekintzak egin edo errorea alda dezakezu, ikusi eta jakinarazi aurretik.

Txosten-erroreak

Errore bat ikusi ondoren, hurrengo urratsa amaierako erabiltzaileari errorearen berri ematea da.

Excel-ek ez bezala, ez dago beti errore-emaitza erakusteko leku erosorik, formula baten emaitzak testuren bat erakusteko leku egokirik ez duen kontrol baten X eta Y koordenatuak bezalako propietate bat eragin dezakeelako. Power Fx Ostalari bakoitzak kontrolatzen du azken erabiltzaileari erroreak nola bistaratzen zaizkion eta egileak prozesu honen gainean zenbat kontrola duen. Power Apps-en, erroreen pankarta bat erakusten da eta App.OnError erabiltzen da errorea nola jakinarazi den kontrolatzeko.

Garrantzitsua da kontuan izan App.OnError-ek ezin duela errorea ordezkatu IfError-ren modu berean. App.OnError exekutatzen den unean, errorea jada gertatu da, eta emaitza beste formuletatik hedatu da. App.OnError k akatsa amaierako erabiltzaileari nola jakinarazten zaion soilik kontrolatzen du eta nahi izanez gero, egileak akatsa erregistratzeko kako bat eskaintzen du.

Esparru-aldagaiek FirstError eta AllErrors erroreari edo akatsei buruzko testuinguruari buruzko informazioa ematen dute. Honek errore motari eta akatsa non sortu den eta non ikusi den informazioa ematen du.

Errore baten ondoren gelditzea

Jokabide-formulek neurriak hartzea, datu-baseak aldatzea eta egoera aldatzea onartzen dute. Formula hauei esker, ekintza bat baino gehiago egin daitezke sekuentzia batean ; kate-eragilea erabiliz (edo ;; lokalaren arabera).

Kasu honetan, adibidez, sareta kontrola T taulan dagoena erakusten ari da. Botoi hautatzeko bakoitzak taula honetako egoera aldatzen du bi Adabaki dei eginez:

T taulako bi erregistroak ausazko zenbakiekin eguneratzen dituen animazioa, botoi bakoitzean klik egin ondoren

Portaera kateatuaren formula batean, ekintzak ez dira lehen errorearen ondoren gelditzen. Alda dezagun gure adibidea lehen Adabaki deian baliogabeko indize-zenbaki bat pasatzeko. Bigarren Adabakia abian jarraitzen du lehenagoko errore hau izan arren. Lehenengo errorea azken erabiltzaileari jakinaraziko zaio eta Studio-n errore gisa erakusten da kontrolean:

T taulako bigarren erregistroa soilik ausazko zenbakiekin eguneratzen den animazioa, botoiaren klik bakoitzaren ondoren, lehen erregistroak errore bat eragin du.

IfError erabil daiteke errore baten ondoren exekuzioa gelditzeko. If funtzioaren antzera, funtzio honen hirugarren argumentuak akatsik ez badago bakarrik exekutatu behar diren ekintzak jartzeko lekua eskaintzen du:

T taulako edozein erregistrotan aldaketarik ez duen animazioa erakusten du, IfError-ek errore baten ondoren bigarren eragiketa bukatzea eragozten duelako

Errore bat aurkitzen bada ForAll-ren iterazioetako batean, gainerako iteraldiak ez dira geldituko. ForAll iterazio bakoitza modu independentean exekutatzeko diseinatuta dago, exekuzio paraleloa ahalbidetuz. ForAll osatzen denean, errore bat itzuliko da, aurkitutako akats guztiak biltzen dituena (AllErrors aztertuz IfError edo App.OnError-en).

Esate baterako, formula honek ForAll bi errore itzuliko ditu (zeroaren zatiketa egiteko, 0ko Value bi aldiz) eta Collection-k hiru erregistro izango ditu (Value 0 ez denerako): [1, 2, 3].

Clear( Collection ); 
ForAll( [1,0,2,0,3], If( 1/Value > 0, Collect( Collection, Value ) ) );

Akats anitzekin lan egitea

Portaera-formula batek ekintza bat baino gehiago exekutatu ditzakeenez, errore bat baino gehiago ere aurki ditzake.

Lehenespenez, lehenengo errorearen berri ematen zaio amaierako erabiltzaileari. Adibide honetan, bi adabaki deiek huts egingo dute, bigarrenak zero errorearekin zatiketa batekin. Lehenengo errorea (indizeari buruz) bakarrik erakusten zaio erabiltzaileari:

Lehen indize-errorea errore-bandean bistaratzen da, bigarren errorea ez da jakinarazi

IfError funtzioa eta App.OnError-ekin aurkitutako errore guztiak atzi ditzakete AllErrors esparruaren aldagaia. Kasu honetan, aldagai global batean ezarri dezakegu eta aurkitutako bi akatsak aztertu. Taulan aurkitutako ordena berdinean agertzen dira:

Akatsak PatchErrors aldagai globalean atzematea, non akats biak agertzen direla ikus dezakegun

Portaera ez diren formuletan ere errore anitz itzul daitezke. Adibidez, eguneratzeko Adabakia funtzioa erregistro sorta batekin erabiltzeak hainbat errore itzul ditzake, huts egiten duen erregistro bakoitzeko bat.

Taulako erroreak

Lehen ikusi dugunez, akatsak aldagaietan gorde daitezke. Akatsak datu-egituretan ere sar daitezke, tauletan adibidez. Hau garrantzitsua da edozein erregistroko errore batek taula osoa baliogabetu ez dezan.

Adibidez, kontuan hartu datu-taularen kontrol hau Power Apps atalean:

Datu-taula 0 sarrera baterako Erreproka eremurako errore bat erakusten duena, eta horrek zero errorearen zatiketa eragiten du

Gehitu zutabeak-en egindako kalkuluak zero errorearen zatiketa bat aurkitu du balioetako batean. Erregistro horretarako, Elkarrekikoa zutabeak errore-balioa du (zeroz zatitzea), baina beste erregistroek ez dute eta ondo daude. IsError( Index( output, 2 ) ) false itzultzen du eta IsError( Index( output, 2 ).Value ) egia itzultzen du.

Taula bat iragaztean errore bat gertatzen bada, erregistro osoa errore bat da, baina emaitzan itzuliko da, azken erabiltzaileak zerbait dagoela jakin dezan eta arazo bat dagoela.

Hartu adibide hau. Hemen, jatorrizko taulak ez du errorerik, baina iragazteko ekintzak errore bat sortzen du Balioa 0ren berdina den bakoitzean:

Iragazki irizpideen arabera prozesatu ezin izan diren bi erregistroren erroreak erakusten dituen datu-taula

-5 eta -3 balioak behar bezala iragazten dira. 0 balioek iragazkia prozesatzeko errorea eragiten dute, eta, beraz, ez dago argi erregistroa emaitzan sartu behar den edo ez. Azken erabiltzaileentzako gardentasuna maximizatzeko eta arduradunei arazketan laguntzeko, errore-erregistro bat sartzen dugu jatorrizkoaren ordez. Kasu honetan, IsError( Index( output, 2 ) ) egia itzultzen da.

Datu-iturburuaren erroreak

Datu-iturburuetako datuak aldatzen dituzten funtzioak, adibidez Patch, Collect, Remove, RemoveIf, Update, UpdateIf, eta SubmitForm bi modutan ematen dute erroreen berri:

  • Funtzio horietako bakoitzak errore-balio bat itzuliko du eragiketaren emaitza gisa. Erroreak IsError detekta daitezke eta ordezkatu edo kendu IfError eta App.OnError ohi bezala.
  • Eragiketaren ondoren, Errors funtzioak aurreko eragiketetako erroreak ere itzuliko ditu. Baliagarria izan daiteke errore-mezu bat inprimaki-pantailan bistaratzeko, egoera aldagai batean errorea atzeman beharrik gabe.

Adibidez, formula honek Bildu-ren errorerik dagoen egiaztatuko du eta errore-mezu pertsonalizatu bat bistaratuko du:

IfError( Collect( Names, { Name: "duplicate" } ),
         Notify( $"OOPS: { FirstError.Message }", NotificationType.Warning ) )

Errors funtzioak iraganeko erroreei buruzko informazioa ere itzultzen du exekuzio-eragiketetan zehar. Baliagarria izan daiteke errore bat inprimaki-pantailan bistaratzeko, egoera aldagai batean errorea atzeman beharrik gabe.

Akatsak berriro botatzea

Batzuetan, akats potentzial batzuk espero dira eta modu seguruan baztertu daitezke. Barruan IfError eta App.OnError, errore bat hautematen bada, hurrengo kudeatzaileari pasatu beharko zaio, berriro bota daiteke Error( AllErrors )-rekin.

Zure akatsak sortzea

Zure erroreak ere sor ditzakezu Errorea funtzioarekin.

Zure akatsak sortzen ari bazara, gomendatzen da 1000etik gorako balioak erabiltzea etorkizuneko sistemako erroreen balioekin gatazkak ekiditeko.

ErrorKind enumerazio-balioak

ErrorKind enum Balioa Deskribapenak
AnalysisError 18 Errorea sisteman. Arazo bat izan da konpiladorearen analisiarekin.
BadLanguageCode 14 Hizkuntza-kode baliogabea edo aitortu gabekoa erabili da.
BadRegex 15 Espresio erregularrak ez du balio. Egiaztatu IsMatch, Match edo MatchAll funtzioekin erabilitako sintaxia.
Gatazka 6 Eguneratzen ari den erregistroa jatorrian aldatu da dagoeneko eta gatazka konpondu behar da. Konponbide arrunt bat tokiko aldaketak gordetzea, erregistroa freskatzea eta aldaketak berriro aplikatzea da.
ConstraintViolated 8 Erregistroak ez du zerbitzarian muga-egiaztapenik gainditu.
CreatePermission 3 Erabiltzaileak ez du baimenik datu-iturburuan erregistro bat sortzeko. Adibidez, Bildu funtzioa deitu zen.
DeletePermissions 5 Erabiltzaileak ez du baimenik datu-iturburuan erregistro bat ezabatzeko. Adibidez, Remove funtzioa deitu zen.
Div0 13 Zerorekin zatitu.
EditPermissions 4 Erabiltzaileak ez du baimenik datu-iturburuan erregistro bat sortzeko. Adibidez, Patch funtzioa deitu zen.
GeneratedValue 9 Zerbitzariak automatikoki kalkulatzen duen eremu baterako balio bat oker pasatu zaio zerbitzariari.
InvalidFunctionUsage 16 Funtzioaren erabilerak ez du balio. Askotan, funtzioaren argumentu bat edo gehiago ez da zuzena edo modu baliogabean erabiltzen.
FileNotFound 17 Ez da aurkitu SaveData biltegia.
InsufficientMemory 21 Ez dago nahikoa memoria edo biltegiratze gailuan eragiketa egiteko.
InvalidArgument 25 Balio ez duen argumentu bat eraman da funtziora.
Barnekoa 26 Errorea sisteman. Barne arazo bat egon zen funtzioetako batekin.
MissingRequired 2 Erregistro baten beharrezko eremu bat falta zen.
Sarea 23 Arazo bat izan da sareko komunikazioekin.
Batere ez 0 Errorea sisteman. Ez da akatsik egon.
Ez da aplikagarria 27 Ez dago baliorik erabilgarri. Baliagarria da zenbakizko kalkuluetan zero gisa trata daitekeen hutsik balioa balizko arazo gisa markatu beharko liratekeen balio hutsetatik bereizteko.
NotFound 7 Ezin izan da aurkitu erregistroa. Adibidez, Adabaki funtzioan aldatu beharreko erregistroa.
NotSupported 20 Erreproduzigailuak edo gailuak ez du onartzen eragiketa.
Zenbakizkoa 24 Zenbakizko funtzio bat modu desegokian erabili zen. Adibidez, Sqrt -1ekin.
QuotaExceeded 22 Biltegiratze-kuota gainditu da.
ReadOnlyValue 1,0 Zutabea irakurtzeko soilik da eta ezin da aldatu.
ReadPermission 19 Erabiltzaileak ez du baimenik datu-iturburuan erregistro bat irakurtzeko.
Sinkronizatu 1 Errorea informatu zen datu-iturburuaren bidez. Kontsultatu Mezuaren zutabea informazio gehiagorako.
Ezezaguna 12 Akats bat gertatu da, baina ezezaguna.
Balidazioa 11 Erregistroak ez du baliozkotze egiaztapenik gainditu.