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

Master-Detail özelliğini kullanmak için aşağıdaki adımları sırasıyla takip edebilirsiniz:

  1. İlk olarak uygulamanıza sol kenardaki Elements panelinin Data kategorisinde bulunan bir elementini sürükleyip bırakın.
  • Elementin izin verilen alanlarından birine, ikinci bir Data Repeater kategorisi elementi sürükleyin.
  1. Örneğimizde Table elementi üzerinden ilerleyeceğiz.
    • Table içerisine, Datasource üzerinden dönen veriler doğrultusunda uygun elementleri yerleştirin.
  2. Veri döndüren bir Action oluşturun ve bunu Page Init olayına ekleyin.
  3. Master olarak kullanacağınız Table elementini seçin.
  1. Datasource olarak, oluşturduğunuz Action Result'ı seçin.
  2. Detail için kullanacağınız Table elementini seçin.
  1. Datasource olarak, Master tabloda bulunan verilerin içerisindeki ikinci listeyi belirleyin.
  1. Uygulamanızda bulunan diğer elementlerin verilerini ihtiyaçlarınıza göre doldurun.

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; }
}
}