Master-Detail özelliğini kullanmak için aşağıdaki adımları sırasıyla takip edebilirsiniz:
Tüm adımları eksiksiz tamamladığınızda Master-Detail tablonuz kullanıma hazır olacaktır.
Kuika Platform ve SQL Desteği
Kuika Platform, ne yazık ki SQL ile doğrudan Master-Detail özelliğini desteklememektedir. Ancak SQL sorguları ile bu süreci yönetmek için aşağıdaki örneği inceleyebilirsiniz.
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# tarafında Classlar aracılığıyla da yönetebilirsiniz. Bununla ilgili örnek bir görsel aşağıda sunulmuştur.
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; }
}
}