POWER APPS VERİ DOĞRULAMA
Form tasarımında en zor iş alanları doğru sıraya koymak değildir; alanların doğru değerlerle doldurulduğundan emin olmaktır. Doğrulama yoksa veri kaynağına yanlış telefon numaraları, geleceğe ait doğum tarihleri, negatif fiyatlar, eksik zorunlu alanlar düşer. Bu kirli veriler aylar sonra raporlamada sorun olarak ortaya çıkar ve geri dönüp temizlemek başlangıçta önlemekten çok daha pahalıdır.
Doğrulama Ne Zaman Yapılır
Doğrulamanın yanlış zamanda yapılması iyi tasarımı kötü deneyime çevirir. Üç farklı zamanlama mümkündür:
- Yazarken (OnChange): Şekil bazlı kontroller — telefon numarasına harf girilemesin gibi; girişin kendisini engeller.
- Alandan çıkarken (OnBlur): Değer bazlı kontroller — tarih geleceğe sarkmasın gibi; kullanıcıya hata mesajı gösterir.
- Form gönderilirken (OnSelect of Submit): Alanlar arası mantık — bitiş başlangıçtan büyük olmalı gibi.
Doğru yaklaşım üçünü birden katmanlı kullanmaktır.
En yaygın yanlış uygulama bu kontrollerin tamamını sadece Submit anına bırakmaktır. Kullanıcı bütün formu doldurur, gönder düğmesine basar, on satırlık hata listesiyle karşılaşır. Bu deneyim kullanıcıyı form doldurmaktan soğutur. Alan başı doğrulamayla anlık geri bildirim vermek formu hem daha hızlı hem daha az hatayla doldurulabilir kılar.
Power Fx ile Alan Kontrolü
Power Apps'te doğrulama mantığı Power Fx formülleriyle yazılır. En sık kullanılan fonksiyonlardan biri IsMatch'tir; bir metnin belirli bir desene uyup uymadığını kontrol eder. IsMatch(txtTelefon.Text, "[0-9]{10}") on haneli sayı kontrolü yapar. Daha karmaşık desenler için Match fonksiyonu ile düzenli ifadeler kullanılır. Bu fonksiyonlar genellikle alanın hemen altındaki bir Label'ın Visible özelliğinde kullanılır ve kontrol başarısız olduğunda hata mesajı görünür.
Sayısal alanlar için aralık kontrolü tipiktir. Value(txtTutar.Text) > 0 And Value(txtTutar.Text) < 1000000 gibi. Tarih alanları için DateValue ile karşılaştırma yapılır; dtBaslangic.SelectedDate > Today() gibi. Bu kontroller alanın OnChange olayında tetiklenebilir veya bağlı bir Label'ın Visible özelliğinde sürekli izlenebilir.
Telefon ve e-posta doğrulama örneği (hata Label'ının Visible özelliği):
// Telefon: 10 haneli sayı
!IsMatch(txtTelefon.Text, "[0-9]{10}") And !IsBlank(txtTelefon.Text)
// E-posta: standart format
!IsMatch(txtEposta.Text, Match.Email) And !IsBlank(txtEposta.Text)
// Tutar: 0 ile 1.000.000 arası
Value(txtTutar.Text) <= 0 Or Value(txtTutar.Text) >= 1000000
// Tarih: geleceğe sarkmasın
dtDogum.SelectedDate > Today()
Zorunlu Alanlar
Zorunlu alan kontrolü forma özgü görünmez gibi ama gerçek hayatta birçok ince noktası vardır. Boş bir metin alanı !IsBlank(txtAlan.Text) ile kontrol edilir. Ama IsBlank metnin literal olarak boş olduğunu kontrol eder; sadece boşluk içeriyorsa boş saymaz. Bu yüzden Trim ile birlikte kullanmak doğrudur: !IsBlank(Trim(txtAlan.Text)).
Dropdown'larda zorunlu kontrol farklıdır. Seçim yapılmamışsa SelectedItems boş bir tablo döner; IsEmpty(ddSecim.SelectedItems) ile kontrol edilir. Tarih alanlarında SelectedDate IsBlank olabilir ama bazı tarih kontrollerinde varsayılan bugün tarihi gelir ve "boş" anlamı kaybolur. Bu durumda zorunlu alanın boş olmasını sağlamak için ayrı bir "tarih seçildi mi" bayrağı tutmak gerekebilir.
Koşullu Zorunluluk
Bazı alanlar her zaman zorunlu değildir; bağlama göre zorunlu olur. Adım adım uygulanışı Power Apps resmi belgelerinde açıklanır. Talep tipi "İade" seçildiyse iade nedeni zorunlu olur, diğer tiplerde boş kalabilir. Bu koşullu zorunluluk Power Fx'te zincirleme If ifadeleriyle yazılır: If(ddTip.Selected.Value = "İade", !IsBlank(txtNeden.Text), true). Mantık şudur: koşul gerçekleşmişse alanın dolu olmasını iste; koşul gerçekleşmediyse zaten bu alanın doluluğu önemli değil, doğrula geçti say.
Koşullu zorunluluğun görsel karşılığı da olmalıdır; alan koşula bağlı olarak görünür hale geldiğinde yanına kırmızı yıldız da görünür. Kullanıcı bu alanın artık zorunlu olduğunu anlar. Sadece arka planda doğrulama yapıp görselde sinyal vermemek kullanıcıyı şaşırtır.
Form Seviyesinde Doğrulama
Alanlar tek başına doğru olsa da birbirleri arasındaki ilişki sorunlu olabilir. Başlangıç tarihi bitiş tarihinden büyük yazılmış, toplam tutar bireysel kalemlerin toplamından farklı, indirim tutarı orijinal tutardan büyük. Bu kontroller form gönderilmeden önce yapılır ve genellikle bir özet alanında hata gösterilir.
Bu mantık genellikle Submit düğmesinin DisplayMode özelliğinde toplanır. Düğme yalnızca tüm kontroller geçtiğinde aktif olur. If(formValid, DisplayMode.Edit, DisplayMode.Disabled). FormValid değişkeni tüm doğrulama kurallarını birleştirir. Düğme pasifken kullanıcı neyin eksik olduğunu görmek isteyebilir; yanındaki bilgi alanı en üst eksiklik kuralını gösterir.
Patch ve Hata Yönetimi
Form doğrulaması geçtikten sonra veri Patch fonksiyonu ile kaynağa yazılır. Burada da hata olabilir; bağlantı kopmuş, anahtar çakışması olmuş, izin yetersiz olmuş olabilir. Patch sonucu IfError ile sarılır ve hata varsa kullanıcıya uygun mesaj gösterilir. Bu mantık olmadan Patch hatasız tamamlandı sanılır ama veri aslında kayıt edilmemiştir.
Errors fonksiyonu son hatayı detaylarıyla döner. Loglama amaçlı bu detayları bir hata tablosuna yazmak iyi pratiktir; canlıda hatanın hangi senaryoda yaşandığı sonradan analiz edilebilir hale gelir.

Hata Mesajları
Hata mesajlarının metni kullanıcı deneyimini büyük ölçüde belirler. Teknik mesajlar ("IsMatch returned false", "Format error") kullanıcıya hiçbir şey söylemez. Açık ve eylem odaklı mesajlar gerekir: "Telefon numarası on haneli olmalı ve sadece sayılardan oluşmalı" gibi. Mesajlar olabildiğince hangi alanın sorunlu olduğunu söylemeli ve nasıl düzeltileceğini önermelidir.
Tüm hata mesajları forma yakın konumlanır. Alanın hemen altında küçük kırmızı yazı klasik ve etkilidir. Üst kısımda bir özet kutusu da olabilir ama ayrıntılı mesajlar alanın yanında durur. Kullanıcı bir hata gördüğünde gözünü ekrana taraması gerekmesin; bakacağı yerde mesaj zaten vardır.
Doğrulama Performansı
Karmaşık doğrulama kuralları her tuş vuruşunda çalışırsa uygulama yavaşlar. Özellikle düzenli ifade içeren IsMatch kontrolleri her OnChange'de tetiklenmemelidir; alandan çıkışta (OnBlur olmadığı için OnSelect veya Form'un OnReset gibi başka olayda) çalıştırmak daha iyidir. Doğrulama mantığı uygulamanın hızını fark edilebilir ölçüde etkilediğinde bu yeniden gözden geçirilir.
Veri doğrulama küçük ayrıntılarda yaşar ama sonuç olarak veri kalitesini yöneten en kritik mekanizmadır. Power Apps eğitimi bu mekanizmayı gerçek form senaryolarında uygulamalı olarak ele alır.
Sıkça Sorulan Sorular
Power Apps formunda doğrulama varsayılan olarak gelir mi?
Veri kaynağı seviyesinde tanımlı zorunlu alanlar otomatik gelir ama özel doğrulamalar (telefon formatı, tarih aralığı) elle yazılır. Veri kaynağı kuralları tek başına yeterli değildir.
Düzenli ifade (regex) nereye kadar kullanılır?
Basit desen kontrolleri (telefon, TC kimlik, e-posta) için verimlidir. Çok karmaşık desenler okunaksızdır ve bakım zorlaşır; karmaşık kurallar için ayrı bir fonksiyon yazmak daha iyidir.
Veri kaynağında zaten doğrulama varsa Power Apps'te tekrar gerekli mi?
Evet. Veri kaynağı doğrulaması hata fırlatır ama kullanıcı için iyi bir deneyim sunmaz. Power Apps tarafında erken doğrulama UX'i iyileştirir.
Hata mesajlarını tek yerde tanımlayabilir miyim?
Evet, bir Hata Mesajları tablosu veya koleksiyonu kurarak mesajları merkezi olarak yönetmek iyi pratiktir. Dil değişikliği veya metin güncellemesi tek yerden yapılır.
Kullanıcı doğrulamayı bypass edebilir mi?
UI seviyesinde Power Fx kontrolü yetkin kullanıcı tarafından atlanabilir. Bu yüzden kritik kontroller veri kaynağı veya Power Automate akışı seviyesinde tekrar edilir.
Doğrulama mantığı çok karmaşıklaşırsa ne yapmalı?
Karmaşık mantık Power Apps formülünde değil, Power Automate akışında veya Dataverse iş kurallarında yapılır. Power Apps tarafı görsel kontrol için tutulur.



