Xrm.WebApi.retrieveMultipleRecords ile Kayıt Sorgulama: Temel Kalıplar ve Sık Yapılan Hatalar.
Kayra anlatıyorWeb resource’larda kayıt sorgulamak için en çok kullanılan yöntem Xrm.WebApi.retrieveMultipleRecords. Ancak filtreleme ($filter), alan seçimi ($select) ve ilişkili kayıt çekme ($expand) syntax’ı başta kafa karıştırabiliyor. Bu yazıda temel kalıplara ve sık yapılan hatalara göz atıyoruz.
Temel Sorgu Yapısı
Xrm.WebApi.retrieveMultipleRecords(
"contact",
"?$select=fullname,emailaddress1&$filter=statecode eq 0"
).then(function (result) {
result.entities.forEach(function (contact) {
console.log(contact.fullname);
});
});
İlk parametre, entity’nin logical name’idir (şema adı değil): Contact değil, contact.
Query string mutlaka ? ile başlar.
$select yazmazsan tüm alanlar döner. Bu, performans açısından gereksiz bir yüktür.
Filtreleme Örnekleri
Belirli bir account’a bağlı aktif contact’lar
"?$select=fullname&$filter=_parentcustomerid_value eq " + accountId + " and statecode eq 0"
Lookup alanlarını filtrelerken alan adının başına _, sonuna _value eklenir: parentcustomerid → _parentcustomerid_value.
GUID’ler tırnak içine alınmaz, doğrudan yazılır.
Tarih bazlı filtreleme
"?$filter=createdon ge 2026-01-01T00:00:00Z"
İlişkili Kayıt Çekme ($expand)
"?$select=fullname&$expand=parentcustomerid_account($select=name,accountnumber)"
Bu sorgu, her contact ile birlikte bağlı olduğu account’un adını ve numarasını tek istekte getirir. Ayrı bir retrieveRecord çağrısına gerek kalmaz.
Sık Yapılan Hatalar
Schema name ile logical name’i karıştırmak. Entity adı her zaman küçük harfli logical name olmalıdır (Account değil, account).
$filter içinde metin değerlerini tırnağa almamak. Metin alanlarında eq 'Aktif' gibi tek tırnak şarttır; sayısal ve GUID alanlarda tırnak kullanılmaz.
Büyük veri setlerinde $top kullanmamak. Varsayılan olarak sayfa başına en fazla 5000 kayıt döner. Sayfa boyutunu retrieveMultipleRecords‘un üçüncü parametresi olan maxPageSize ile değiştirebilirsin; toplam kayıt sayısını sınırlamak için ise $top kullan. Aksi halde gereksiz veri çekilir.
_value son ekini unutmak. Lookup filtrelemede en sık yapılan syntax hatası budur. Bu durumda sorgu, ilgili property’nin bulunamadığını belirten bir hata döndürür.
Esenlikler.