Errore-kudeaketa

Artikulu honetan deskribatutako portaera Formula mailako erroreen kudeaketaren eginbidea aktibatuta dagoenean soilik erabilgarri.

Power Fx-ek formula mailako erroreen kudeaketa onartzen du. Eginbide hau lehenespenez aktibatuta aplikazio berri guztietan. Hala ere, aplikazio zaharrago batzuek desaktibatuta egon daitezke aplikazioaren ezarpenetan. Mantendu funtzio hau aktibatuta.

  1. Ireki mihise-aplikazioa editatzeko moduan.
  2. Joan Ezarpenen>eguneraketak>erretiratutako fitxara.
  3. Ziurtatu 'Desgaitu formula mailako kudeaketa' desaktibatuta dagoela.

Informazio gehiago nahi izanez gero, ikus Gaituta dauden eginbideak 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. Horrela, erabiltzaileak badaki ustekabeko zerbait gertatu dela. Arazoa beste sarrera batekin konpondu dezakete edo aplikazioaren jabeari jakinarazi diezaiokete.

Aplikazioen sortzaile gisa, kontrolatu zure aplikazioko erroreak:

  • Errore bat detektatu eta kudeatu. Errore bat gerta daitekeen aukera badago, idatzi aplikazioaren formulak errore-baldintza detektatzeko eta berriro saiatu eragiketa. Azken erabiltzaileak ez du kezkatu behar errore bat gertatu izanagatik, egileak aukera kontuan hartu duelako. Errorea harrapatzen du formula baten barruan dauden IfError, IsError eta IsErrorOrBlank funtzioak erabiliz.
  • Errore baten berri eman. Aurkitu duzun formulan errore bat kudeatzen ez bada, errorea App.OnError kudeatzailera igoko da. Ezin duzu errorea ordezkatu, dagoeneko gertatu delako eta formularen kalkuluen parte delako. Baina App.OnError erabili dezakezu amaierako erabiltzaileari errorea nola jakinarazten zaion kontrolatzeko, erroreen berri guztiak batera kentzeko barne. App.OnError -k aplikazio osoan erroreak jakinarazteko puntu komun bat ere eskaintzen du.
  • Sortu eta berriro bota errore bat. Azkenik, errore-baldintza bat detekta dezakezu zure logika propioarekin, zure aplikaziorako espezifikoa den baldintza. Erabili Errorea funtzioa errore pertsonalizatuak sortzeko. Erabili Errore funtzioa errorea berriro botatzeko, IfError edo App.OnError atalean galdeketa egin ondoren.

Erabiltzen hastea

Has gaitezen adibide sinple batekin.

  1. Sortu pantaila berri bat Power Apps Canvas aplikazio batean.
  2. Sartu TextInput kontrola. Lehenespenez, TextInput1 izena du.
  3. Txertatu Etiketa kontrola.
  4. Ezarri Testua propietatea Etiketa kontrolekoa formulan
1/Value( TextInput1.Text )

'Testu-sarrera' duen testu-sarrerako kontrolarentzat 'balioa ezin da zenbaki bihurtu' agertzen den errore-bannerraren pantaila-argazkia.

Errore bat ikusten da, TextInput kontrol "Text input"baten testu lehenetsia , eta ezin da zenbaki bihurtu. Lehenespenez, hau gauza ona da: azken erabiltzaileak aplikazioan zerbait espero bezala funtzionatzen ez duela jakinarazpena jasotzen du.

Jakina, ez duzu errore bat nahi erabiltzailea agurtzea aplikazio hau abiarazten duen bakoitzean. Litekeena da "Text input" ez dela testua idazteko koadroaren lehenetsi egokia. Arazo hau konpontzeko, aldatu TextInput kontrolaren propietate lehenetsia honela:

Blank()

Errore-bannerraren pantaila-argazkia, 'zatiketa zerorekin'-rekin.

Orain beste akats bat ikusten duzu. Hutsunea duten eragiketa matematikoek, zatiketa esaterako, hutsunearen balioa zero izatera behartzen dute. Balio horrek zero errorearen zatiketa eragiten du. Arazo hau konpontzeko, aplikazio honetan egoera honetarako portaera egokia zein den erabaki behar duzu. Erantzuna hutsik agertzea izan daiteke testu-sarrera hutsik dagoenean. Helburu hori lor dezakezu formula IfError funtzioarekin itzulbilduz:

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

Pantaila-argazkia ez da errore-bannerrik bistaratu, balio huts baten ondoriozko errorea hutsune batekin ordezkatu da.

Orain errorea baliozko balio batekin ordezkatzen da eta errore-bannerra desagertu egiten da. Baina, baliteke gainditu izana, erabili duzun IfError-ek akats guztiak estaltzen ditu, balio okerra idaztea barne, adibidez "hello". Arazo honi aurre egin diezaiokezu IfError doituz zatiketa zero maiuskulen arabera soilik kudeatzeko eta gainerako errore guztiak berriro botatzeko:

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

Pantaila-argazkia ez da errore-bannerrik bistaratu, zehazki zeroz zatitzeagatik gertatzen den errorea hutsune batekin ordezkatu da, bestela errorea berriro botako da.

Beraz, exekutatu zure aplikazioa eta probatu 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.

Pantaila-argazkia ez da erantzunik bistaratu eta errore-bannerrik ez erakusten du.

4 idazten baduzu, espero den emaitza 0,25 lortuko duzu:

0.25 bistaratuta eta errore-bannerrik ez erakusten duen pantaila-argazkia.

Legez kanpoko zerbait idazten baduzu, adibidez hello, errore-banner bat jasoko duzu:

Pantaila-argazkia ez da baliorik bistaratu eta errore-bannerra erakutsi da 'kaixo' zenbaki bihurtzeko ezintasunagatik.

Hau sarrerako adibide sinple bat da. Erroreak modu desberdinetan kudea ditzakezu, aplikazioaren beharren arabera:

  1. Errore-banner baten ordez, "#Error" erakutsi dezakezu etiketa-kontrolean formula batekin. Ordezko motak IfError-en lehenengo argumentuarekin bateragarriak izan daitezen, zenbakizko emaitza testu-kate bihurtu behar duzu Testua funtzioa erabiliz.
    IfError( Text( 1/Value( TextInput1.Text ) ), 
             If( FirstError.Kind = ErrorKind.Div0, Blank(), "#Error" )
    
    Pantaila-argazkia errorerik gabeko bannerra erakusten du eta horren ordez #Error agertzen da emaitza gisa.
  2. Instantzia zehatz hau IfError-ekin itzulbiratu beharrean, App.OnError kudeatzaile zentralizatu bat idatzi dezakezu. Ezin duzu erakutsitako katea "#Error"-rekin ordeztu, errorea jadanik gertatu delako eta App.OnError txostenak kontrolatzeko soilik ematen delako.
    If( FirstError.Kind <> ErrorKind.Div0, Error( FirstError ) )
    

Errore-hedapena

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

Excel kalkulu-orriaren pantaila-argazkia A1=1/0 eta #DIV/0-rekin! Gelaxkan agertzen da.

Gelaxkak A2 formula batekin A1aipatzen badu=A1*2, errorea formula horren bidez ere hedatzen da:

Excel kalkulu-orriaren pantaila-argazkia A2 = A1 * 2 eta #DIV / 0-rekin! Gelaxkan agertzen da.

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

Power Fx modu berean funtzionatzen du. Orokorrean, errore bat funtzio edo eragile bati argumentu gisa ematen badiozu, eragiketa ez da gauzatzen. Sarrerako errorea eragiketaren ondorioz igarotzen da. Adibidez, Zero zatiketa errorea itzultzen du Mid( Text( 1/0 ), 1, 1 ) , barneko errorea Text funtziotik eta Mid funtziotik igarotzen baita:

Errore-bannerraren pantaila-argazkia, eragiketa baliogabea erakusten duena: zerorekin zatitzea.

Orokorrean, erroreak ez dira Power Apps kontrol-propietateen bidez igarotzen. Luza dezagun aurreko adibidea lehen etiketaren propietatea Text errore-egoera den ala ez bistaratzen duen beste kontrol batekin:

Bigarren etiketa-kontrolean errorerik ez dagoela erakusten duen pantaila-argazkia.

Ondo erroreak kontrol baten bidez ez hedatzea, sistemak sarreran erroreak behatzen dituelako kontrol-propietate guztietan. Errorea ez da galdu.

Funtzio eta operadore gehienek "errorea sartu, errorea kanpoan" araua jarraitzen dute, baina salbuespen batzuk daude. IsError, IsErrorOrBlank eta IfError funtzioak erroreekin lan egiteko diseinatuta daude, beraz, baliteke errorerik ez itzuli, nahiz eta bat pasatzen zaien.

Akatsak behatzea

Power Fx-ek ez ditu erroreak behatzen formulak errorearen balioa erabili arte.

Ondorioz, If eta Select funtzioek ez dute errorerik itzuliko bat pasatzen bada. Kontuan hartu If( false, 1/0, 3 ) formula. Formula honetan zero zatiketa errorea, baina If funtzioak adar hori hartzen ez duenez false baldintzaren ondorioz, Power Fx eta Power Apps ez dute errorerik jakinarazten:

Pantaila-argazkia, errorerik ez erakusten du, Testua propietatearen etiketan If funtzioarekin agertzen den bannerra.

Ezarri funtzioa errore batekin erabiltzeak ez du errorearen berri ematen aldagaian jartzen den unean. Adibidez, Power Apps-n, hona hemen formula bat App.OnStart zatiketa zero errorearen arabera x aldagaian jartzen duena:

Pantaila-argazkia, errorerik ez erakusten du App.OnStart-en Ezarri funtzio-deiarekin agertzen den pantaila-argazkia.

Ez da errorerik jakinarazi, ez delako x erreferentzia egiten. Hala ere, etiketa-kontrol bat gehitzen duzunean eta bere Testua propietatearekin ezartzen xduzunean , errorea bistaratzen da:

X aldagaiari erreferentzia egiten dion etiketa-kontrolarekin agertzen den errore-bannerra erakusten duen pantaila-argazkia.

Formula baten barruko akatsak ikus ditzakezu IfError, IsError eta IsErrorOrBlank funtzioak erabiliz. Funtzio hauek erabiliz, balio alternatibo bat itzul dezakezu, ekintza alternatiboa egin edo errorea alda dezakezu behatu eta jakinarazi aurretik.

Txosten-erroreak

Power Fx-ek errore bat antzeman ondoren, hurrengo urratsa azken erabiltzaileari errorearen berri ematea da.

Excel-ek ez bezala, ez beti leku egokia errorearen emaitza erakusteko, formula baten emaitzak kontrol baten X eta Y koordenatuak bezalako propietate bat gida baitezake, testu batzuk erakusteko leku egokirik ez dagoena. Power Fx Ostalari bakoitzak kontrolatzen du azken erabiltzaileari erroreak nola bistaratzen zaizkion eta egileak prozesu honen gainean zenbat kontrola duen. Power Apps, errore-banner bat bistaratzen da, eta App.OnError erabiltzen da errorea nola jakinarazten den kontrolatzeko.

Garrantzitsua da kontuan izan App.OnError-ek ezin duela errorea ordezkatu IfError-ren modu berean. App.OnError exekutatzen den unean, errorea dagoeneko gertatu da eta emaitza beste formula batzuen bidez hedatzen da. App.OnError -k errorea azken erabiltzaileari nola jakinarazten zaion kontrolatzen du soilik, eta nahi izanez gero, egileak errorea erregistratzeko kako bat eskaintzen dio.

Esparru-aldagaiek FirstError eta AllErrors erroreari edo akatsei buruzko testuinguruari buruzko informazioa ematen dute. Testuinguru honek errore motari buruzko informazioa eskaintzen du, errorea non sortu zen eta non behatu zen.

Errore baten ondoren gelditzea

Jokabide-formulek neurriak hartzea, datu-baseak aldatzea eta egoera aldatzea onartzen dute. Formula hauek sekuentzia batean ekintza bat baino gehiago egitea ahalbidetzen dute, kateatze eragilea ; erabiliz (edo ;; lokalaren arabera).

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

T taulako bi erregistroak ausazko zenbakiekin eguneratzen erakusten dituen animazioaren pantaila-argazkia, botoi bakoitzaren klik bakoitzaren 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:

Animazioaren pantaila-argazkia, T taulako bigarren erregistroa soilik ausazko zenbakiekin eguneratzen erakusten duena, botoiaren klik bakoitzaren ondoren, lehenengo erregistroak errorea eragiten duelarik.

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

T taulako bi erregistroetan aldaketarik ez duen animazioaren pantaila-argazkia, IfError-ek errore baten ondoren bigarren eragiketa amaitzea eragozten duelako.

ForAll-en iterazioetako batean errore bat aurkitzen bada, gainerako iterazioak ez dira gelditzen. ForAll iterazio bakoitza modu independentean exekutatzeko diseinatuta dago, exekuzio paraleloa ahalbidetuz. ForAll amaitutakoan, errore bat itzultzen da, aurkitutako errore guztiak biltzen dituena (IfError edo App.OnError-enAllErrors aztertuz).

Adibidez, ondorengo formulak ForAll-ek bi errore itzultzen ditu (0-ren Value zero zatitzeko, bi aldiz) eta Collection hiru erregistro ditu (0 ez denean Value ): [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, aplikazioak lehen errorea azken erabiltzaileari jakinarazten dio. Adibide honetan, Patch deiek huts egiten dute, baina bigarren deiak huts egiten du zero zatiketa errorearekin. Erabiltzaileak indizeari buruzko lehen errorea bakarrik ikusten du:

Errore-banner batean bistaratutako lehen indize-errorearen pantaila-argazkia, bigarren errorea ez da jakinarazten.

IfError funtzioak eta App.OnError funtzioak aurkitutako errore guztiak atzitu ditzakete AllErrors esparru-aldagaia erabiliz. Kasu honetan, aldagai hau aldagai global gisa ezar dezakezu eta aurkitutako bi erroreak ikus ditzakezu. Taulan aurkitutako ordena berdinean agertzen dira:

Erroreen harrapaketaren pantaila-argazkia PatchErrors aldagai globalean, non bi erroreak agertzen direla ikus dezakegu.

Portaerarik gabeko formulek ere hainbat errore itzul ditzakete. Adibidez, eguneratzeko Adabakia funtzioa erregistro sorta batekin erabiltzeak hainbat errore itzul ditzake, huts egiten duen erregistro bakoitzeko bat.

Taulako erroreak

Lehen ikusi duzun bezala, akatsak aldagaietan gorde ditzakezu. Datu-egituretan ere akatsak sar ditzakezu, hala nola tauletan. Planteamendu hau garrantzitsua da, erregistro bateko errore batek taula osoa baliogabetu ezin duelako ziurtatzen duelako.

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

Datu-taularen pantaila-argazkia, 0-ko sarrera baterako Reciprocal eremuaren errorea erakusten duena, eta horrek zero errorearen zatiketa eragiten du.

AddColumns-en kalkuluak zero bidez zatitzeko errorea aurkitu zuen balioetako batentzat. Erregistro horretarako, Elkarrekikoa zutabeak errore-balioa du (zeroz zatitzea), baina beste erregistroek ez dute eta ondo daude. IsError( Index( output, 2 ) ) faltsua itzultzen du eta IsError( Index( output, 2 ).Value ) egia itzultzen du.

Taula bat iragaztean errore bat gertatzen bada, erregistro osoa errorea izango da. Eragiketak emaitzan erregistroa itzultzen du, azken erabiltzaileak jakin dezan zerbait dagoela 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-irizpideek prozesatu ezin izan dituzten bi erregistroen erroreak erakusten dituen datu-taularen pantaila-argazkia.

-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 fabrikatzaileei arazten laguntzeko, eragiketak errore-erregistro bat sartzen du 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 itzultzen du eragiketaren emaitza gisa. Erroreak antzeman ditzakezu IsError erabiliz, eta akatsak ordezkatu edo ezabatu IfError eta App.OnError erabiliz, ohi bezala.
  • Eragiketaren ondoren, Erroreak funtzioak aurreko eragiketen erroreak ere itzultzen ditu. Portaera hau erabilgarria izan daiteke errore-mezua inprimaki-pantailan bistaratzeko, egoera-aldagai batean errorea harrapatu beharrik gabe.

Adibidez, formula honek Collect-en errore bat egiaztatzen du, eta errore-mezu pertsonalizatu bat bistaratzen 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 potentzialak espero dituzu eta segurtasunez ez ikus ditzakezu. IfError eta App.OnError-en barruan, hurrengo kudeatzaile gorenari pasatu behar zaion errore bat detektatzen bada, bota ezazu Error( AllErrors )berriro .

Zure akatsak sortzea

Zure erroreak ere sor ditzakezu Errore funtzioa erabiliz.

Zure erroreak sortzen badituzu, erabili 1.000 balio handiagoak etorkizuneko sistemaren errore-balioekin gatazkak saihesteko.

ErrorKind enumerazio-balioak

ErrorKind enum Balioa Deskribapenak
AnalysisError 18 Errorea sisteman. Konpilatzaileen analisiarekin arazo bat.
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 zaren erregistroa jadanik iturburuan aldatu da eta gatazka konpondu behar duzu. Konponbide arrunt bat tokiko aldaketak gordetzea, erregistroa freskatzea eta aldaketak berriro aplikatzea da.
ConstraintViolated 8 Erregistroak ez du zerbitzarian muga-egiaztapenik gainditu.
CreatePermission 3 Ez duzu baimenik datu-iturriaren erregistrorik sortzeko. Adibidez, Bildu funtzioa deitu zen.
DeletePermissions 5 Ez duzu baimenik datu-iturburuaren erregistro bat ezabatzeko. Adibidez, Remove funtzioa deitu zen.
Div0 13 Zerorekin zatitu.
EditPermissions 4 Ez duzu baimenik datu-iturriaren erregistrorik sortzeko. Adibidez, Patch funtzioa deitu zen.
GeneratedValue 9 Zerbitzariak automatikoki kalkulatzen duen eremu baten 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 Gailuan ez memoria edo biltegiratze nahikorik eragiketarako.
InvalidArgument 25 Balio ez duen argumentu bat eraman da funtziora.
Barnekoa 26 Errorea sisteman. Barne arazo bat funtzio batekin.
MissingRequired 2 Erregistro baten beharrezko eremua falta da.
Sarea 23 Sareko komunikazioekin arazo bat.
Batere ez 0 Errorea sisteman. Ez da akatsik egon.
Ez da aplikagarria 27 Ez dago baliorik erabilgarri. Errore hau erabilgarria da zenbakizko kalkuluetan zero gisa tratatu daitekeen balio huts bat bereizteko, balio hori erabiliz gero arazo potentzial 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 Ez duzu baimenik datu-iturriaren erregistroak irakurtzeko.
Sinkronizatu 1 Datu-iturburuak errore baten berri eman du. Kontsultatu Mezuaren zutabea informazio gehiagorako.
Ezezaguna 12 Akats bat gertatu da, baina ezezaguna.
Balidazioa 11 Erregistroak ez du baliozkotze egiaztapenik gainditu.