Ümit Kara | Dynamics 365, Power Platform ve SharePoint Üzerine Notlar paylaşımnoktası
Power Apps · 8 Ağustos 2026 · 7 dk okuma

Power Apps’te en ihtiyaç duyduğumuz 26 formül

Power Apps’te geliştirme yaparken bazı formülleri ezbere bilmek işimizi çok kolaylaştırıyor. Bu yazı, günlük işimde en ihtiyaç duyduğum 26 formülü kategorilere ayırıp gerçek Dataverse senaryolarıyla birlikte derlediğim kişisel referans notlarımdan oluşuyor.


Veri Sorgulama

1. LookUp(Tablo, Koşul)

Koşula uyan tek bir kaydı getirir.

LookUp(Contacts, 'Email' = TextInput1.Text)

Not: Birden fazla kayıt koşula uyuyorsa LookUp bunlardan yalnızca ilkini döner ve hangisinin geldiği garanti değildir. Kritik bir alanda tekil kayıt bekliyorsan önce veri kaynağında kesin benzersizliği yakalayacak filtreler vermelisin.

2. Filter(Tablo, Koşul)

Koşula uyan tüm kayıtları listeler.

Filter(Accounts, 'Account Name' in SearchBox1.Text)

3. Search(Tablo, Metin, Alan)

Belirtilen metin alanlarında arama yapar.

Search(Contacts, TextInput1.Text, "fullname", "emailaddress1")

4. Sort(Tablo, Alan, Sıra)

Kayıtları tek bir alana göre sıralar.

Sort(Opportunities, 'Est. Close Date', Ascending)

Not: Sort yalnızca tek alana göre sıralama yapar. Birden fazla alana göre sıralamak (örneğin önce durum, sonra tarih) gerekiyorsa SortByColumns kullanılmalı.

5. First(Tablo)

Tablodaki ilk kaydı döndürür.

First(Sort(Cases, 'Created On', Descending))

Not: Sıralama yapılmadan First çağrıldığında “ilk” kaydın hangisi olduğu veri kaynağına bağlı olarak değişebilir. Belirli bir kaydı hedefliyorsan mutlaka Sort ile birlikte kullan.


Veri Yazma

6. Patch(Tablo, Defaults(Tablo), {…})

Yeni kayıt oluşturur.

Patch(Contacts, Defaults(Contacts), {
    'First Name': txtFirstName.Text,
    'Last Name': txtLastName.Text
})

Not: Defaults(Contacts) tablonun varsayılan değerlerini getirir; bunu unutup boş bir kayıt şablonuyla Patch çağırırsan zorunlu alanlar (business required) boş kalır ve kayıt sunucu tarafında reddedilebilir.

7. Patch(Tablo, Kayıt, {…})

Var olan kaydı günceller.

Patch(Contacts, LookUp(Contacts, Contact = ThisItem.Contact), {
    'Email': txtEmail.Text
})

Not: İçteki LookUp kayıt bulamazsa blank döner ve Patch bunu güncellemeye çalışırken hata verir. Önlem olarak güncelleme öncesi IsBlank ile kontrol edebiliriz.

8. Collect(Koleksiyon, Kayıt)

Koleksiyona yeni kayıt ekler.

Collect(colSelectedContacts, ThisItem)

Not: Collect yalnızca uygulama içindeki geçici koleksiyona yazar, veri kaynağına (Dataverse) hiçbir şey göndermez. Kalıcı kayıt için mutlaka Patch gerekir.

9. ClearCollect(Koleksiyon, Kaynak)

Koleksiyonu temizleyip yeniden doldurur.

ClearCollect(colOpenCases, Filter(Cases, Status = "Açık"))

Not: Her çağrıldığında koleksiyonu sıfırdan doldurur. Bunu bir OnVisible veya Timer içinde sık sık tetiklemek gereksiz veri trafiği ve performans kaybına yol açar; genelde App.OnStart içinde bir kez çağırmak yeterli.

10. Remove(Koleksiyon, Kayıt)

Koleksiyondan belirtilen kaydı siler.

Remove(colSelectedContacts, ThisItem)

Not: Remove yalnızca koleksiyondan siler; veri kaynağındaki kaydı silmez.

11. UpdateIf(Tablo, Koşul, {…})

Koşula uyan tüm kayıtları toplu günceller.

UpdateIf(Cases,
    Status = "Açık" && 'Created On' < DateAdd(Today(), -30, Days),
    {Priority: "Yüksek"}
)

Kontrol ve Değişkenler

12. Set(Değişken, Değer)

Uygulama genelinde geçerli global değişken tanımlar.

Set(gblSelectedContact, ThisItem)

Not: Global değişkenler her ekrandan erişilebilir olduğu için kolay gibi görünür, ama aşırı kullanımı hangi ekranın hangi değişkeni ne zaman değiştirdiğini takip etmeyi zorlaştırır. Tek ekrana özel değişkenler için UpdateContext tercih edilmeli.

13. UpdateContext({…})

Yalnızca bulunulan ekrana özel değişken tanımlar.

UpdateContext({locIsLoading: true})

Not: Bu değişkenler ekran değiştiğinde kaybolur. Bir sonraki ekrana veri taşımak gerekiyorsa UpdateContext yerine Navigate‘in context parametresi kullanılmalı.

14. If(Koşul, Doğru, Yanlış)

Bildiğimiz If koşulu. E-mail adresi boş ise, uyarı çıkar aksiyonu için yazdığım kod;

If(
    IsBlank(txtEmail.Text),
    Notify("E-posta zorunlu", NotificationType.Error),
    SubmitForm(frmContact)
)

Not: Çok sayıda else if zincirlemesi (If içinde If) okunabilirliği bozar. Üç ve üzeri dallanma varsa Switch genelde daha temiz bir seçim.

15. Switch(Değer, Durum1, Sonuç1, …)

Çoklu koşul kontrolü yapar.

Switch(
    varRecordType,
    "Contact", Navigate(ContactDetailScreen),
    "Account", Navigate(AccountDetailScreen),
    Navigate(HomeScreen)
)

16. ForAll(Tablo, İşlem)

Her kayıt için belirtilen işlemi tekrarlar.

ForAll(
    colSelectedContacts,
    Patch(Contacts, ThisRecord, {Status: "İşlendi"})
)

Not: İçinde Patch veya SubmitForm gibi ağır işlemler varsa, koleksiyon büyüdükçe performans düşer. Toplu işlemler için mümkünse Power Automate flow‘ları kullan.


Form ve Navigasyon

17. Navigate(Ekran, Geçiş, Context)

Başka bir ekrana geçiş yapar.

Navigate(ContactDetailScreen, ScreenTransition.Fade, {SelectedContact: ThisItem})

Not: Üçüncü parametre ile context taşımak, global değişken kullanmaktan daha temizdir; hedef ekranın hangi veriye bağlı olduğu formülün kendisinden okunabilir hale gelir.

18. Back()

Bir önceki ekrana döner.

Back()

Not: Back() uygulamanın dahili ekran geçmişini takip eder; karmaşık navigasyon akışlarında beklenmeyen bir ekrana dönebilir. Kritik akışlarda (örneğin kayıt sonrası) Back() yerine hedefi belirten açık bir Navigate daha iyi olabilir.

19. SubmitForm(Form)

Form verisini veri kaynağına kaydeder.

SubmitForm(frmContact)

Not: SubmitForm‘da başarısız olduğunda; kullanıcı arayüzünde hiçbir şey görmeyebilir. Form.Error ve Form.ErrorMessage özelliklerini bir etikete bağlamak, sorunun görünür olmasını sağlar.

20. NewForm(Form) / EditForm(Form)

Formu sırasıyla yeni kayıt veya düzenleme moduna alır.

NewForm(frmContact);
Navigate(ContactFormScreen)

Not: Form modu değiştirilmeden Patch çağırmak, formun Item özelliğiyle çakışan beklenmedik davranışlara yol açabilir. Mod geçişini her zaman formu göstermeden hemen önce yap.

21. ResetForm(Form)

Formu son kaydedilmemiş haline getirir.

ResetForm(frmContact)

Not: ResetForm yalnızca form kontrollerini sıfırlar; forma bağlı koleksiyon veya değişkenleri sıfırlamaz.


Yardımcı Fonksiyonlar

22. Notify(Mesaj, Tür)

Son Kullanıcıya mesaj gösterir.

Notify("Kayıt güncellendi", NotificationType.Success)

Not: NotificationType parametresi atlanırsa varsayılan olarak nötr (bilgi) stilde gösterilir; hata mesajları bu şekilde fark edilmeyebilir. Hata durumlarında NotificationType.Error kullanmayı alışkanlık haline getir.

23. IsBlank(Değer)

Değerin boş olup olmadığını kontrol eder.

IsBlank(LookUp(Contacts, Email = txtEmail.Text))

24.CountRows(Tablo)

Tablodaki kayıt sayısını döndürür.

CountRows(Filter(Cases, Status = "Açık"))

Not: Delegasyon sınırına takılan bir Filter üzerinde CountRows çağrılırsa, gerçek sayı değil yalnızca yerel olarak yüklenen kayıtların sayısı döner. Sonuç, göründüğünden daha küçük çıkabilir.

25. Concat(Tablo, Alan, Ayraç)

Alan değerlerini birleştirip tek bir metin oluşturur.

Concat(colSelectedContacts, fullname, ", ")

Not: Büyük tablolarda Concat performansı düşürebilir ve sonuç metninin pratik bir uzunluk sınırı vardır. Yüzlerce kaydı tek bir metinde birleştirmek yerine, gerçekten gösterilecek kadarını sınırlamak daha sağlıklı.

26. Refresh(Kaynak)

Veri kaynağını sunucudan yeniden okur.

Refresh(Contacts)

Not: Refresh davranışı veri kaynağına göre değişir; bazı connector’larda önbelleği tam olarak temizlemeyebilir. Verinin gerçekten güncel geldiğinden emin olmak için Patch sonrası ilgili koleksiyonu ClearCollect ile yeniden doldurmak daha tutarlı sonuç verir.


Bu listeyi zamanla genişletmeyi belki bir gün cheat sheet halinde bir PDF’te sunmayı planlıyorum…

Bu yazı işine yaradıysa paylaş
LinkedIn'de paylaş
SONRAKİ YAZI Data Validation’lı Excel Dosyası Dynamics 365’e Import için Nasıl Hazırlanmalı?