Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bu makalede açıklanan davranış yalnızca Formül düzeyi hata yönetimi özelliği açık olduğunda kullanılabilir.
Power Fx formül düzeyinde hata işlemeyi destekler. Bu özellik tüm yeni uygulamalar için varsayılan olarak açıktır. Ancak bazı eski uygulamalarda uygulama Ayarları'nda kapatılmış olabilir. Bu özelliği açık tutun.
- Tuval uygulamasını düzenleme modunda açın.
- Ayarlar>Güncelleştirmeleri>Kullanımdan Kaldırıldı sekmesine gidin.
- Formül düzeyinde yönetimi devre dışı bırak'ın kapalı olduğundan emin olun.
Daha fazla bilgi için bkz. Hangi özelliklerin etkinleştirildiğini denetleme.
Hatalar ortaya çıkar. Ağlar çöker, depolama alanı dolar, beklenmedik değerler girilir. Olası sorunlar karşısında mantığınızın düzgün çalışmaya devam etmesi önemlidir.
Varsayılan olarak hatalar bir uygulamanın formülleri üzerinden akar ve uygulamanın son kullanıcısına bildirilir. Bu şekilde, son kullanıcı beklenmeyen bir şey olduğunu bilir. Sorunu farklı bir girişle kendileri çözebilir veya uygulamanın sahibine bildirebilirler.
Uygulama oluşturucu olarak uygulamanızdaki hataların denetimini alın:
- Bir hatayı algılama ve işleme. Hata oluşma olasılığı varsa, hata koşulunu algılamak için uygulamanın formüllerini yazın ve işlemi yeniden deneyin. Son kullanıcının, üretici bu sorumluluğu dikkate aldığı için bir hata oluştuğu konusunda endişelenmesine gerek yoktur. Bir formül içinde IfError, IsError ve IsErrorOrBlank işlevlerini kullanarak hatayı yakalayın.
- Hata bildirin. Karşılaştığınız formülde bir hata işlenmezse, hata App.OnError işleyicisine iletilir. Zaten oluştuğundan ve formül hesaplamalarının bir parçası olduğundan hatayı değiştiremezsiniz. Ancak hatanın son kullanıcıya nasıl bildirileceğini kontrol etmek için App.OnError'ı kullanabilirsiniz, buna hata raporlamasını tamamen bastırmak da dahildir. App.OnError ayrıca uygulamanın tamamında hata raporlama için ortak bir tıkanma noktası sağlar.
- Hata oluşturma ve tekrar fırlatma. Son olarak, uygulamanıza özgü bir koşul olan kendi mantığınızla bir hata koşulu algılayabilirsiniz. Özel hatalar oluşturmak için Error işlevini kullanın. IfError veya App.OnError'da sorgulandıktan sonra bir hatayı yeniden göndermek için Error işlevini kullanın.
Başlangıç Yapmak
Basit bir örnekle başlayalım.
- Power Apps Canvas uygulamasında yeni bir ekran oluşturun.
- TextInput denetimi ekleyin. Varsayılan olarak TextInput1 adını kullanır.
- Label denetimi ekleyin.
- Label denetiminin Text özelliğini formüle ayarlayın
1/Value( TextInput1.Text )
TextInput denetiminin "Text input"varsayılan metni sayıya dönüştürülemediğinden bir hata görürsünüz. Varsayılan olarak bu iyi bir şeydir: son kullanıcı uygulamada bir şeyin beklendiği gibi çalışmadığını belirten bir bildirim alır.
Açıkçası, bu uygulamayı her başlattığında kullanıcıyı selamlayan bir hata olmasını istemezsiniz. Büyük olasılıkla "Text input" metin giriş kutusu için doğru varsayılan değildir. Bu sorunu düzeltmek için TextInput denetiminin Default özelliğini şu şekilde değiştirin:
Blank()
Şimdi farklı bir hata görüyorsunuz. Boş değer içeren bölme gibi matematiksel işlemler, boş değeri sıfıra dönüştürür. Bu değer sıfıra bölme hatasına neden olur. Bu sorunu çözmek için bu uygulamadaki bu durum için uygun davranışın ne olduğuna karar vermeniz gerekir. Yanıt, metin girişi boş olduğunda boş göstermek olabilir. Formülünüzü IfError işleviyle kaydırarak bu hedefi gerçekleştirebilirsiniz:
IfError( 1/Value( TextInput1.Text ), Blank() )
Şimdi hata geçerli bir değerle değiştirilir ve hata başlığı kaybolur. Ancak, hata yapmış olabilirsiniz; kullandığınız IfError girdiğiniz hatalı bir değer yazmak da dahil olmak üzere "hello" hataları kapsar.
IfError'ınızı yalnızca sıfıra bölme durumunu işlemek için ayarlayarak ve diğer tüm hataları yeniden oluşturarak bu sorunu çözebilirsiniz.
IfError( 1/Value( TextInput1.Text ),
If( FirstError.Kind = ErrorKind.Div0, Blank(), Error( FirstError ) ) )
Bu nedenle uygulamanızı çalıştırın ve farklı değerler deneyin.
Herhangi bir değer olmadan, uygulama başladığında olduğu gibi, varsayılan değer boş olduğu için görüntülenen bir yanıt yoktur, ancak IfError sıfıra bölme hatasının yerini aldığı için bir hata da görüntülenmez.
4 yazarsanız beklenen 0,25 sonucunu alırsınız:
Ve gibi hellogeçersiz bir şey yazarsanız bir hata başlığı alırsınız:
Bu, basit bir tanıtıcı örnektir. Uygulamanın gereksinimlerine bağlı olarak hataları birçok farklı şekilde işleyebilirsiniz:
- Hata başlığı yerine, formülle etiket denetiminde "#Error" gösterebilirsiniz. Değiştirme türlerini IfError'ın ilk bağımsız değişkeniyle uyumlu tutmak için, Text işlevini kullanarak sayısal sonucu açıkça bir metin dizesine dönüştürmeniz gerekir.
IfError( Text( 1/Value( TextInput1.Text ) ), If( FirstError.Kind = ErrorKind.Div0, Blank(), "#Error" )
- Bu belirli örneği IfError ile sarmalamak yerine merkezi bir App.OnError işleyicisi yazabilirsiniz. Hata zaten oluştuğundan ve App.OnError yalnızca raporlamayı denetlemek için sağlandığından gösterilen dizeyi "#Error" ile değiştiremezsiniz.
If( FirstError.Kind <> ErrorKind.Div0, Error( FirstError ) )
Hataların yayılması
Hatalar Excel'de olduğu gibi formüller üzerinden akar. Örneğin, Excel'de hücre A1 formülüne =1/0sahipse, A1 hata değerini #DIV0!görüntüler:
Hücre A2 gibi A1bir formüle =A1*2 başvuruyorsa, hata bu formüle de yayılır:
Hata, formülün hesaplayacağı değerin yerini alır.
A2 hücresindeki çarpma işleminin bir sonucu yoktur, yalnızca A1'deki bölme işleminden kaynaklanan hata vardır.
Power Fx aynı şekilde çalışır. Genel olarak, bir işlev veya işleç için bağımsız değişken olarak bir hata sağlarsanız, işlem gerçekleşmez. Giriş hatası, işlemin bir parçası olarak iletilir. Örneğin, Mid( Text( 1/0 ), 1, 1 ) en iç hata Text işlevinden ve Mid işlevinden geçtiğinden Sıfıra Bölme hatası döndürür:
Genel olarak hatalar Power Apps denetim özellikleri üzerinden akmaz. İlk etiketin Text özelliği hata durumu olduğunda görüntülenen başka bir denetim ekleyerek önceki örneği genişletelim.
Sistem tüm denetim özelliklerine girişte hatalar gözlemlediği için hataların bir denetim aracılığıyla yayılmamalarında bir sorun yoktur. Hata kaybolmaz.
Çoğu işlev ve işleçler "hata girişi, hata çıkışı" kuralını izler, ancak bazı istisnalar vardır. IsError, IsErrorOrBlank ve IfError işlevleri hatalarla çalışmak için tasarlanmıştır, bu nedenle bunlara geçirilse bile hata döndürmeyebilirler.
Hataları gözlemleme
Formül hata değerini kullanana kadar Power Fx hataları gözlemlemez.
Sonuç olarak, Eğer ve Seç işlevleri geçirilirse hata döndürmeyebilir.
If( false, 1/0, 3 ) formülünü dikkate alın. Bu formülde sıfıra bölme hatası var, ancak If işlevi, false koşulu nedeniyle bu dalı izlemediğinden Power Fx ve Power Apps hata bildirmiyor.
Set işlevinin hatayla kullanılması, hatanın değişkene yerleştirildiği noktada hata bildirmez. Örneğin Power Apps App.OnStart içinde x değişkenine sıfıra bölme hatası veren bir formül aşağıda verilmişti:
x'e başvurulmadığı için hata bildirilmez. Ancak, bir etiket denetimi ekleyip Text özelliğini xolarak ayarladığınız anda hata görüntülenir:
IfError, IsError ve IsErrorOrBlank işlevlerini kullanarak formül içindeki hataları gözlemleyebilirsiniz. Bu işlevleri kullanarak alternatif bir değer döndürebilir, alternatif eylemde bulunabilir veya hata gözlemlenmeden ve bildirilmeden önce hatayı değiştirebilirsiniz.
Hataları raporlama
Power Fx bir hata gözlemledikten sonra sonraki adım hatayı son kullanıcıya bildirmektir.
Excel'den farklı olarak, bir formülün sonucu, bir denetimin X ve Y koordinatları gibi bir özelliği yönlendirebileceğinden, hata sonucunu göstermek için her zaman uygun bir yer bulunmayabilir. Her Power Fx ana bilgisayarı, hataların son kullanıcıya nasıl gösterildiğini ve üreticinin bu işlem üzerinde ne kadar denetime sahibi olduğunu denetler. Power Apps'te, bir hata başlığı gösterilir ve App.OnError hatanın nasıl bildirildiğini denetlemek için kullanılır.
App.OnError'ın hatayı IfError ile aynı şekilde değiştiremeyeceği dikkate alınmalıdır. App.OnError yürütülürken hata zaten oluştu ve sonuç diğer formüller aracılığıyla yayılır. App.OnError yalnızca hatanın son kullanıcıya nasıl bildirildiğini denetler ve istenirse oluşturucunun hatayı günlüğe kaydetmesi için bir kanca sağlar.
Kapsam değişkenleri FirstError ve AllErrors hata veya hatalar hakkında kapsam bilgileri sağlar. Bu bağlam hatanın türü, hatanın nereden kaynaklandığı ve nerede gözlemlendiği hakkında bilgi sağlar.
Hata sonrası durdurma
Davranış formülleri harekete geçmeyi, veritabanlarını değiştirmeyi ve durum değiştirmeyi destekler. Bu formüller, zincirleme işleci kullanılarak ; (veya ;; yerel ayara bağlı olarak) bir dizide birden fazla eylem yapılmasını sağlar.
Örneğin, bu durumda kılavuz denetimi, T tablosunda ne olduğunu gösterir. Her düğme seçimi iki Yama çağrısı ile bu tablodaki durumu değiştirir:
Zincirleme davranış formülünde, eylemler ilk hatadan sonra durmaz. Örneğimizi, ilk Patch çağrısında geçersiz bir dizin numarası iletecek şekilde değiştirelim. İkinci Yama bu önceki hataya rağmen devam ediyor. İlk hata son kullanıcıya bildirilir ve denetim üzerinde Studio'da bir hata olarak gösterilir:
Bir hatadan sonra yürütmeyi durdurmak için IfError kullanın. If işlevine benzer olarak, bu işlevin üçüncü bağımsız değişkeni yalnızca hata yoksa yürütülmesi gereken eylemleri koymak için bir yer sağlar:
ForAll yinelemelerinden biri sırasında bir hatayla karşılaşırsanız, yinelemelerin geri kalanı durmaz. ForAll , her yinelemeyi bağımsız olarak yürütmek ve paralel yürütmeye izin vermek üzere tasarlanmıştır. ForAll tamamlandığında, karşılaşılan tüm hataları içeren bir hata döndürülür (IfError veya App.OnError'daAllError incelenerek).
Örneğin, aşağıdaki formül, ForAll'un iki hata döndürmesine (Value'in sıfıra bölünmesi yüzünden iki kez) ve Collection üç kayda (Value 0 değilse) ulaşmasına neden olur: [1, 2, 3].
Clear( Collection );
ForAll( [1,0,2,0,3], If( 1/Value > 0, Collect( Collection, Value ) ) );
Birden çok hata ile çalışma
Bir davranış formülü birden çok eylem yürütebileceğinden, birden çok hatayla de karşılaşabilir.
Varsayılan olarak, uygulama ilk hatayı son kullanıcıya bildirir. Bu örnekte her iki Patch çağrısı da başarısız olur, ancak ikinci çağrı sıfıra bölme hatasıyla başarısız olur. Kullanıcı yalnızca dizinle ilgili ilk hatayı görür:
IfError işlevi ve App.OnError, AllErrors kapsam değişkenini kullanarak karşılaşılan tüm hatalara erişebilir. Bu durumda, bu değişkeni genel değişken olarak ayarlayabilir ve karşılaşılan her iki hataya da bakabilirsiniz. Bunlar, tabloda karşılaşıldıkları sıraya göre yer alır.
Davranışsız formüller de birden çok hata döndürebilir. Örneğin Patch işlevinin güncellenecek bir yığın kayıtla kullanılması, başarısız olan her kayıt için bir tane olmak üzere birden fazla hata döndürebilir.
Tablolarda hatalar var
Daha önce gördüğünüz gibi, hataları değişkenlerde depolayabilirsiniz. Tablolar gibi veri yapılarına da hatalar ekleyebilirsiniz. Bu yaklaşım, herhangi bir kayıtta hatanın tablonun tamamını geçersiz kılmamasını sağladığından önemlidir.
Örneğin, Power Apps'teki bu veri tablosu denetimini göz önünde bulundurun:
AddColumns'daki hesaplama, değerlerden biri için sıfıra bölme hatasıyla karşılaştı. Bu tek kayıt için Karşılıklı sütununda bir hata değeri (sıfıra bölme) var ancak diğer kayıtlarda mevcut değil ve sorun yok.
IsError( Index( output, 2 ) ) Yanlış döndürür ve IsError( Index( output, 2 ).Value ) doğru döndürür.
Tablo filtrelendiğinde bir hata oluşursa, kaydın tamamı bir hatadır. İşlem yine de sonuçtaki kaydı döndürerek son kullanıcının orada bir şey olduğunu ve bir sorun olduğunu bilmesine neden olur.
Bu örneği alın. Burada orijinal tabloda hiç hata yoktur, ancak Değer 0'a eşit olduğunda filtreleme işlemi bir hata oluşturur:
-5 ve -3 değerleri doğru şekilde filtrelenir. 0 değerleri, filtrenin işlenmesinde hata oluşmasına neden olur ve bu nedenle kaydın sonuca dahil edilip edilmeyeceği belirsizdir. Son kullanıcılar için saydamlığı en üst düzeye çıkarmak ve oluşturucuların hata ayıklamasına yardımcı olmak için, işleyiş orijinalin yerine bir hata kaydı içerir. Bu durumda, IsError( Index( output, 2 ) ) true değerini döndürür.
Veri kaynağı hataları
Patch, Collect, Remove, RemoveIf, Update, UpdateIf ve SubmitForm gibi veri kaynaklarındaki verileri değiştirebilen işlevler iki şekilde hata verir:
- Bu işlevlerin her biri işlemin sonucu olarak bir hata değeri döndürür. IsError kullanarak hataları algılayabilir ve her zamanki gibi IfError ve App.OnError kullanarak hataları değiştirebilir veya gizleyebilirsiniz.
- İşlemden sonra Errors işlevi, önceki işlemler için hataları da döndürür. Bu davranış, bir durum değişkenindeki hatayı yakalamaya gerek kalmadan bir form ekranında hata iletisini görüntülemek için yararlı olabilir.
Örneğin, bu formül Topla'dan gelen bir hatayı denetler ve özel bir hata iletisi görüntüler:
IfError( Collect( Names, { Name: "duplicate" } ),
Notify( $"OOPS: { FirstError.Message }", NotificationType.Warning ) )
Errors işlevi çalışma zamanı işlemleri sırasında geçmişteki hatalar hakkında bilgi de döndürür. Bu, hatayı bir durum değişkeninde yakalamak zorunda kalmadan, bir hatayı bir form ekranında görüntülemeye yarayabilir.
Hataları yeniden atma
Bazen olası hataları bekler ve güvenle gözardı edebilirsiniz.
IfError ve App.OnError içinde, bir sonraki üst işleyiciye iletilmesi gereken bir hata algılanırsa, Error( AllErrors ) kullanarak yeniden fırlatın.
Kendi hatalarınızı oluşturma
Error işlevini kullanarak kendi hatalarınızı da oluşturabilirsiniz.
Kendi hatalarınızı oluşturursanız, gelecekteki sistem hata değerleriyle olası çakışmaları önlemek için 1.000'den büyük değerleri kullanın.
ErrorKind numaralandırma değerleri
| ErrorKind sabit listesi | Değer | Description |
|---|---|---|
| Analiz Hatası | 18 | Sistem hatası. Derleyici analiziyle ilgili bir sorun var. |
| Geçersiz Dil Kodu | 14 | Geçersiz veya tanınmayan bir dil kodu kullanıldı. |
| BadRegex | 15 | Geçersiz düzenli ifade. IsMatch, Match veya MatchAll işlevleri ile kullanılan sözdizimini kontrol edin. |
| Conflict | 6 | Güncelleştirdiğiniz kayıt kaynakta zaten değiştirildi ve çakışmayı çözmeniz gerekiyor. Yerel değişiklikleri kaydetmek, kaydı yenilemek ve değişiklikleri yeniden uygulamak genel bir çözümdür. |
| Kısıtlama İhlali | 8 | Kayıt, sunucuda bir kısıtlama denetiminden geçmedi. |
| İzinOluştur | 3 | Veri kaynağı için kayıt oluşturma izniniz yok. Örneğin Collect işlevi çağrıldı. |
| İzinleriSil | 5 | Veri kaynağı için bir kaydı silme izniniz yok. Örneğin Remove işlevi çağrıldı. |
| Div0 | 13 (on üç) | Sıfıra bölme. |
| Düzenleme İzinleri | 4 | Veri kaynağı için kayıt oluşturma izniniz yok. Örneğin Patch işlevi çağrıldı. |
| GeneratedValue | 9 | Sunucunun otomatik olarak hesaplandığı bir alan için sunucuya hatalı bir şekilde bir değer geçirildi. |
| GeçersizFonksiyonKullanımı | 16 | Geçersiz işlev kullanımı. Çoğu zaman fonksiyonun bir veya daha fazla bağımsız değişkeni yanlıştır veya geçersiz bir şekilde kullanılmaktadır. |
| DosyaBulunamadı | 17 | SaveData depolama alanı bulunamadı. |
| Yetersiz Bellek | 21 | Cihazda işlem için yeterli bellek veya depolama alanı yok. |
| GeçersizArgüman | Yirmi beş | Geçersiz bağımsız değişken işleve geçirildi. |
| İç | 26 | Sistem hatası. İşlevlerden biriyle ilgili bir iç sorun var. |
| GerekliEksik | 2 | Kaydın gerekli bir alanı eksik. |
| Ağ | 23 | Ağ iletişimleriyle ilgili bir sorun var. |
| Hiçbiri | 0 | Sistem hatası. Hata yoktur. |
| Uygulanamaz | 27 | Kullanılabilir değer yok. Bu hata, sayısal hesaplamalarda sıfır olarak ele alınabilecek boş bir değeri, değer kullanılırsa olası bir sorun olarak işaretlenmesi gereken boş değerlerden ayırmak için yararlıdır. |
| Bulunamadı | 7 | Kayıt bulunamadı. Örneğin Patch işlevinde değiştirilecek kayıt. |
| Desteklenmiyor | 20 | İşlem bu oyuncu veya cihaz tarafından desteklenmiyor. |
| Sayısal | yirmi dört | Sayısal bir işlev uygunsuz bir şekilde kullanıldı. Örneğin, -1 ile Sqrt. |
| Kota Aşıldı | 22 | Depolama kotası aşıldı. |
| ReadOnlyValue | 10 | Sütun salt okunurdur ve değiştirilemez. |
| Okuma İzni | 19 | Veri kaynağı için kayıtları okuma izniniz yok. |
| Zaman Uyumlu | 1 | Veri kaynağı bir hata bildirdi. Daha fazla bilgi için İleti sütununu kontrol edin. |
| Bilinmiyor | 12 | Bilinmeyen türde bir hata oluşmuştur. |
| Validation | 11 | Kayıt bir doğrulama denetiminden geçmedi. |