Genişletilebilir Sorgu Tanımları

Mikromax ERP sisteminde bazı sorgulara müşterinin talebine göre özel tanımlı alanlar eklenebilir. Özel tanımlı alanların eklenmesi için bazı kurallara uyulması gerekmektedir. Bu dökümanda oluşturabilecek bir sorgu örnekleriyle anlatılacaktır.

Bu sistemin uygulanabileceği sorgular DxPaginatedQuery tipinden türemiş olması gerekmtedir. Örnek olarak PaginatedItemListQuery örnek alındı.

Özel alanlar tanımlamak için yapılması gerekenler şu şekilde özetlenebilr.

  1. Sorgu tanımı.
  2. Sorgunun kullanıcılara veya Kullancı gruplarına atanması.

Genişletilebilir Sorgunun tanımı

Sorgu tanımı yaparken dikkat edilmesi gereken hususlar.

  1. Query seçimi.
  2. SQL Select cümlesinde dikkat edilmesi gereken hususlar.
  3. Kullanıcı tanımlı alanların listeye eklenmesi.

    Query Seçimi

Sistemin kullanıcnın hangi sorguyu değiştirdiğini anlamak için değiştirilebilen query’ler listesinden bir tanesinin seçilmesi gerekmektedir.

SQL cümlesinin yazılması

Sistemin düzgün çalışabilmesi için sistemin ihtiyaç duyduğu alanların sorgu da seçenek olarak bulunması gerekemtedir.

SELECT
ı.Id
,ı.Code
,ı.Description
,ı.IsPassive
,ı.Status
,CASE WHEN ı.Status = 0 THEN 'Yeni'
      WHEN ı.Status = 1 THEN 'Aktif'
	  WHEN ı.Status = 2 THEN 'Pasif'
	  ELSE 'Tanımsız' 
 END AS StatusDescription
,ı.ItemType
,ı.isColorDetailed
,ı.isSizeDetailed
,ı.AlternativeName
,ı.TrackingDetail
FROM Items ı

Yukarıda görünen alanlara ilave olarak istenilen özel tanımlı alanlar da sorgunun içine eklenmelidir. Yukarıda alanlar sorgunun varsayılan olarak beklediği değerler olduğu için eklenmiş olması sistemin düzgün çalışması açısından önemli olduğu gibi eksik alan bulunması da henüz bir hata vermemektedir. Bu nedenle gerekli kontroller sisteme eklenene kadar bu alanların sorguyu hazırlayan kişi tarafından yapılması gerekmtekdir.

Bazı query’lerin düzgün bir şekilde çalışması için ekrandan gelen bazı filtrelerin bu alanlara uygulanması gerekmektedir. Bu filtrelerin kullanımı alan tipine göre değişiklik göstermektedir. Bu tür filtrelerin doğru ve kolay eklenmesi için bir UI geliştirmesi düşünüyoruz ancak şu anki versiyonumuzda bunlar yok.

Liste Tipindeki Parametreler

Örnek query ItemTypes isimli bir parametre alıyor. Bu nedenle oluşturulacak SQL cümlesinde bu alanın bir parametre olarak bulunması gerekiyor. Bu alan bir array tipinde olduğu için bir JSON array tipinde gönderileceği varsayımında bulunulmuştur. Bu nedenle query’e şöyle bir şart eklenmesi gerekmektedir. Sorgu tanımlama sırasında sistem bu alanların varlığını kontrol edip eksik alanları hata mesajı olarak kontrol edecektir. Ancak sistem henüz sorgunun doğru yazılıp yazılmadığını kontrol etmemektedir.

SELECT
ı.Id
,ı.Code
,ı.Description
,ı.IsPassive
,ı.Status
,CASE WHEN ı.Status = 0 THEN 'Yeni'
      WHEN ı.Status = 1 THEN 'Aktif'
	  WHEN ı.Status = 2 THEN 'Pasif'
	  ELSE 'Tanımsız' 
 END AS StatusDescription
,ı.ItemType
,ı.isColorDetailed
,ı.isSizeDetailed
,ı.AlternativeName
,ı.TrackingDetail
FROM Items ı
WHERE ı.ItemType in (select value from OPENJSON(@ItemTypes))

Yukarıdaki örnekte SQL OPENJSON fonksiyonu değeri istenilen (1,2,3,4) şekline çevirmektedir.

Basit Tipteki parametreler.

Basit tipteki alanlara ilişkin parametreleri direk olarak kullanabilirsiniz. Kullandığımız örnekte yok ancak birçok başka sorguda IncludePassive alanı mevcut. Onun için örnek kullanımda şu şekilde olabilir.

WHERE ı.Status in (0,1) or @IncludePassive = 1

Alanların Sisteme Tanıtılması

Sistemin çalışabilmesi için kullanıcının eklemek istediği alanların neler olduğu sorgunun haricinde de sisteme tanıtılması gerektemtekdir. Bir alan tanıtabilmek için 3 özelliğinin belirtilmesi gerekmtekteid.r

  • FieldName: SQL sorgusunda yer alan kolon ismi. Sistem bu alana göre veri tabanında kolonu arayıp sorgulayacağı için bu alanın sorguya eklenmesi gerekmektedir.
  • DisplayName: kullanıcıların sistemde görmesini istediğimiz kolon adı.
  • Index: Alanın kaçıncı sırada görüntüleneceği bilgisi. Özel tanımlı alanlar sistem tarafından var olması zorunlu alanlardan sonra gelecektir. Bu sıralama özel tanımlı alanlar içinde hangi sırada olduğunu belirtir. Eğer iki alana aynı sıralama atanmışsa sistemin rastgele bir sırayla getirecektir.

Sorguların Atanması

Yukarıda nasıl tanımlanacağı anlatılan sorguları bir kullanıcının kullanabilmesi için bu sorguların o kullanıcıya veya o kullanının üyesi olduğu bir gruba atanması gerekmektedir.

Bu sayede sistem o kullanıcı için bu sorgu çalıştırıldığında ekranı çizerken önce özel tanımlı sorguların var olup olmadığını tepsit edip daha sorna bu sorguları çalıştırarak, kullanıcılara tanımlı alanları ekranda gösterecektir.