Archive for Mayıs 27th, 2013

Dynamics Ax 2012 Table Inheritance 2

Merhaba

Bu yazımda tablo kalıtımın da verilerin nasıl oluştuğundan ve Insert() , Delete() ve Update() işlemlerinden bahsedeceğim. Bir metotla türettiğimiz 3 tabloya da kayıt ekleyelim.

static void FD_InsertTableInheritance(Args _args)
{
    FDCarTable          carTable;
    FDTruckTable        truckTable;
    FDMotorcycleTable   mtcTable;
    ;

    carTable.clear();
    carTable.carType            = "Taxi";
    carTable.numberOfDoors      = 2;
    carTable.Plaque             = "34 TK 4422";
    carTable.Brand              = "Ford";
    carTable.Model              = "Focus";
    carTable.insert();

    truckTable.clear();
    truckTable.truckType        = "Trayler";
    truckTable.numberOfAxles    = 5;
    truckTable.Plaque           = "34 sdr 54";
    truckTable.Brand            = "Merecedes";
    truckTable.Model            = "Truckes";
    truckTable.insert();

    mtcTable.clear();
    mtcTable.motorcycleType     = "Mobilet";
    mtcTable.hasSidecar         = false ;
    mtcTable.Plaque             = "34 df 22";
    mtcTable.Brand              = "Hundai";
    mtcTable.Model              = "i345";
    mtcTable.insert();

}

FDCarTable

FD TruckTable

FDMotorcycleTable

FDVehicleTable

Gördüğünüz gibi biz alt tablolara kayıt ekledik temel tabloda da otomatik veri oluştu. Oluşan verinin hangi tablodan geldiğini InstanceRelationType alanından görebiliyoruz. Ayrıca isteğe göre eklenebilen DisplayRelationType alanından da görebiliyoruz. Türetilmiş tablo ile temel tablonun RecId’leri aynı oluştu. Tablo tarayıcısından türetilmiş tabloyu açtığınızda temel tablodaki alanları da görebiliyorsunuz. Zaten yukarıda yazdığımız metotta da temel tablonun alanlarını kullandık.

Update işleminde de aynı mantık geçerli , istediğiniz tablo değişkeni üzerinden güncelleme yapabilirsiniz. Basit bir örnek yapalım.

static void FD_UpdateTableInheritance(Args _args)
{
    FDCarTable          carTable;
    FDVehicleTable      vehicleTable;
    ;

    ttsBegin;
    while select forupdate   carTable
    {
        carTable.LicanceCode    = "LisansFromCar";
        carTable.numberOfDoors  = 4;
        carTable.update();
 // Hem temel tablo hemde türetilmiş tablo için güncelleme yapılabilir.
    }

    while select forUpdate  vehicleTable
        where vehicleTable.InstanceRelationType == tableNum(FDCarTable)
    {
        vehicleTable.LicanceCode = "LisansFromVehicle";
        vehicleTable.update();
 // Sadece temel tablo için güncelleme yapılabilir.
    }
    ttsCommit;
}

Delete işlemi de update işlemiyle aynı. Dikkat edilmesi gereken nokta temel tablodan bir satır silindiğinde türetilmiş tablodan da o satırın silineceğidir. Tablonun diğer metotlarında da sınıflarda bildiğimiz kalıtım mantığının aynısı çalışıyor.

Selamlar.