Table Elementinde Master-Detail Özelliği Kullanımı

Master-Detail özelliğini kullanmak için aşağıdaki adımları izleyin:

  1. Sol kenardaki Elements panelinden Data kategorisinde bir Table elementi ekleyin.
  2. İlgili alana ikinci bir Data Repeater kategorisi elementi sürükleyin.
  3. Table içerisine, Datasource üzerinden dönen verilere uygun elementleri ekleyin.
  4. Veri döndüren bir Action oluşturun ve bunu Page Init olayına bağlayın.
  5. Master olarak kullanacağınız Table elementini seçin.
  1. Datasource olarak oluşturduğunuz Action Result  seçin.
  1. Detail için kullanacağınız Table elementini belirleyin.
  1. Datasource olarak, Master tabloda bulunan verilerin içerisindeki ikinci listeyi belirleyin.
  1. Diğer elementleri ihtiyacınıza göre düzenleyin.
  2. Tüm adımları tamamladıktan sonra Master-Detail tablonuz kullanıma hazır olacaktır.
Kuika platformu doğrudan SQL ile Master-Detail özelliğini desteklememektedir. Ancak SQL sorguları ile bu süreci yönetmek mümkündür.

Master Detail Özelliği ile SQL Desteği

Kuika platformu doğrudan SQL ile Master-Detail özelliğini desteklememektedir. Ancak SQL sorgularını kullanarak Master-Detail ilişkisini yönetebilirsiniz. Aşağıda örnek bir C# kodu bulunmaktadır:

using Newtonsoft.Json;using RestSharp;
using System;
using System.Collections.Generic;
using System.Data;
using Microsoft.Data.SqlClient;
using System.Linq;
using Kuika.Common.Helpers;
using Kuika.Common.Settings; //Usingleri eklemeyi unutmayın.
using Kuika.Common.Classes;
using Kuika.Common.Accessors;
namespace Kuika.ThirdPartyApisCollection
{
public class myClass
{
public static List<myList> returnSQLList(string connectionString /*
Kuika string parametre olarak verilmiş olan connectionString parametresini
otomatik olarak algılar ve doldurur */) //Root classımızı data seti olarak
tanımlayabilmek için List olarak döndürüyoruz.
{
List<myList> myListObj = new List<myList>(); //Aşağıda bulunan Class
tanımlarına göre obje yapısını oluşturuyoruz.
string getMasterCommand = @"SELECT * FROM MasterTable"; //Master
datamızı çekeceğimiz SQL sorgumuzu oluşturuyoruz.
var masterResult = KPersister.Fetch(connectionString,
getMasterCommand, null); //Kuika'nın kendi SQL Sorgusu çalıştırma fonksiyonunu
kullanıyoruz. null olarak gönderilen değer sorgu içerisindeki parametrelerdir.
foreach (var masterObject in masterResult.ResultList) //Master
sorgumuzun sonucunu döngü içine alıyoruz.
{
myList newObj = new myList();
newObj.objectName =
masterObject.GetValueByFieldName("ObjectName").ToString();
//GetValueByFieldName fonksiyonuyla action resultın içerisinden kolonları
okuyoruz. Çift tırnak içerisinde kolon ismi belirtilmektedir.
//Detay tablosunu çekerken Master tablosundaki objenin ID'sini
parametre olarak kullanmamız gerekiyor.
//Parametreyi kullanabilmek için yine Kuika'nın oluşturmuş
olduğu kSqlParameter Class'ından yardım alıyoruz.
var prms = new List<kSqlParameter>() {new kSqlParameter() {
Name = "masterId",
Value =
masterObject.GetValueByFieldName("Id").ToString()
}
};
string getDetailCommand = @"SELECT * FROM DetailTable WHERE
masterId = @masterId"; //Detay datamızı çekeceğimiz SQL sorgumuzu
oluşturuyoruz.
var detailResult = KPersister.Fetch(connectionString,
getDetailCommand, prms.ToArray()); //Kuika'nın kendi SQL Sorgusu çalıştırma
fonksiyonunu kullanıyoruz. Yukarıda tanımlamış olduğumuz prms değişkenini
ToArray() fonksiyonuyla birlikte kullanıyoruz.
newObj.nestedList = new List<myNestedList>(); //Nested objemizi
tanımlayabilmek için master objemizin içerisinde boş bir nested obje listesi
oluşturuyoruz.
foreach (var detailObject in detailResult.ResultList) //Sorgu
sonucunda dönen datayı işleyebilmek için yeni bir döngü oluşturuyoruz.
{
myNestedList nestedListObj = new myNestedList(); //Döngü
içerisindeki datayı toplayabilmek için uygun Class'ı kullanarak bir obje
oluşturuyoruz.
nestedListObj.test1 =
detailObject.GetValueByFieldName("Data1").ToString(); //Objenin parametrelerini
sorgu sonucunda dönen kolonlar ve datalarla eşleştiriyoruz.
nestedListObj.test2 =
detailObject.GetValueByFieldName("Data2").ToString();
nestedListObj.test3 =
detailObject.GetValueByFieldName("Data3").ToString();
newObj.nestedList.Add(nestedListObj); //Oluşturduğumuz
nested objeyi master objenin parametre listesine ekliyoruz.
}
myListObj.Add(newObj); //Oluşturduğumuz master objeyi root
listemize ekliyoruz.
}
return myListObj; //Oluşturmuş oluğumuz Class Objesini döndürüyoruz.}
}
public class myList //Root Class
{
public string objectName { get; set; }
public List<myNestedList> nestedList { get; set; } //Nested objeleri
tutmak için Nested Class list olarak belirtildi.
}
public class myNestedList //Nested Objects Class
{
public string test1 { get; set; }
public string test2 { get; set; }
public string test3 { get; set; }
}
}

Custom C# Kullanımıyla Master-Detail Örneği

Master-Detail tablolarını Custom C# kodlarıyla da yönetebilirsiniz. Aşağıdaki örnek, bir nesne listesi oluşturarak detay verileri nasıl gruplayabileceğinizi gösterir:

using Newtonsoft.Json;
using RestSharp;
using System;
using System.Collections.Generic;
using System.Data;
using Microsoft.Data.SqlClient;
using System.Linq;
using Kuika.Common.Helpers;
using Kuika.Common.Settings;
namespace Kuika.ThirdPartyApisCollection
{
public class myClass
{
public static List<myList> returnMyList() //Root classımızı data seti
olarak tanımlayabilmek için List olarak döndürüyoruz.
{
List<myList> myListObj = new List<myList>(); //Aşağıda bulunan Class
tanımlarına göre obje yapısını oluşturuyoruz.
myList myListItem = new myList();myListItem.objectName = "testObj1";
List<myNestedList> nestedListObj = new List<myNestedList>();
myNestedList nestedListItem = new myNestedList();
nestedListItem.test1 = "a";
nestedListItem.test2 = "b";
nestedListItem.test3 = "c";
myNestedList nestedListItem2 = new myNestedList();
nestedListItem2.test1 = "d";
nestedListItem2.test2 = "e";
nestedListItem2.test3 = "f";
myNestedList nestedListItem3 = new myNestedList();
nestedListItem3.test1 = "g";
nestedListItem3.test2 = "h";
nestedListItem3.test3 = "i";
nestedListObj.Add(nestedListItem);
nestedListObj.Add(nestedListItem2);
nestedListObj.Add(nestedListItem3);
myListItem.nestedList = nestedListObj;
myListObj.Add(myListItem);
myList myListItem2 = new myList();
myListItem2.objectName = "testObj2";
List<myNestedList> nestedListObj2 = new List<myNestedList>();
nestedListObj2.Add(nestedListItem);
nestedListObj2.Add(nestedListItem2);
nestedListObj2.Add(nestedListItem3);
myListItem2.nestedList = nestedListObj2;
myListObj.Add(myListItem2);Unset
myList myListItem3 = new myList();
myListItem3.objectName = "testObj3";
List<myNestedList> nestedListObj3 = new List<myNestedList>();
nestedListObj3.Add(nestedListItem);
nestedListObj3.Add(nestedListItem2);
nestedListObj3.Add(nestedListItem3);
myListItem3.nestedList = nestedListObj3;
myListObj.Add(myListItem3); // Buraya kadar olan kısımda Class
üzerinden oluşturduğumuz objeyi, parametrelerini tanımlamış olduk.
return myListObj; //Oluşturmuş oluğumuz Class Objesini döndürüyoruz.
}
}
public class myList //Root Class
{
public string objectName { get; set; }
public List<myNestedList> nestedList { get; set; } //Nested objeleri
tutmak için Nested Class list olarak belirtildi.
}
public class myNestedList //Nested Objects Class
{
public string test1 { get; set; }
public string test2 { get; set; }
public string test3 { get; set; }
}
}