Posts Tagged ‘ Date effective framework

Dynamics Ax 2012 Valid Time State 2

Merhaba

Önceki yazımda  tarih kontrollü yapının nasıl kurulacağını anlatmıştım. Bu yazımda framework ile gelen sorgu özelliklerinden bahsedeceğim. Resimdeki gibi bir örnek verimiz olsun.

Birinci örneğimiz bu gün için geçerli olan sözleşme kaydını bize verir.

Select ile;

static void FD_ValidTimeState1(Args _args)
{
    FDcontractTable   FDcontractTable;
    TransDate         contractStartDate = systemDateGet() ;
    ;

    while select validTimeState(contractStartDate) FDcontractTable
        where FDcontractTable.ContractId == 'CNRT_004'
    {
        info(strFmt("%1: %2 - %3",
            FDcontractTable.ContractId,
            FDcontractTable.ValidFrom,
            FDcontractTable.ValidTo));
    }
}

Query ile;

static void FD_ValidTimeState3(Args _args)
{
    Query               query;
    QueryRun            queryRun;
    FDcontractTable     FDcontractTable;
    TransDate           contractStartDate = systemDateGet() ;
    ;
    query = new Query();
    query.addDataSource(tableNum(FDcontractTable)).addRange(fieldNum(FDcontractTable,
            ContractId)).value(queryValue('CNRT_004'));

    query.validTimeStateAsOfDate(contractStartDate);

    queryRun = new QueryRun(query);

    if(queryRun.prompt())
    {
        while(queryRun.next())
        {
            FDcontractTable = queryRun.getNo(1);
            info(strFmt("%1: %2 - %3",
                FDcontractTable.ContractId,
                FDcontractTable.ValidFrom,
                FDcontractTable.ValidTo));
        }
    }
}

İkinci örnekte ise 30 günlük aralıkta kalan bütün sözleşmeleri  verir.

Select ile;

static void FD_ValidTimeState2(Args _args)
{
    FDcontractTable   FDcontractTable;
    TransDate         contractStartDate = systemDateGet() ;
    TransDate         contractEndDate   = systemDateGet() + 30;
    ;

    while select validTimeState(contractStartDate ,  contractEndDate)
        FDcontractTable
        where FDcontractTable.ContractId == 'CNRT_004'
    {
        info(strFmt("%1: %2 - %3",
            FDcontractTable.ContractId,
            FDcontractTable.ValidFrom,
            FDcontractTable.ValidTo));
    }
}

Query ile;

static void FD_ValidTimeState4(Args _args)
{
    Query               query;
    QueryRun            queryRun;
    FDcontractTable     FDcontractTable;
    TransDate           contractStartDate = systemDateGet() ;
    TransDate           contractEndDate   = systemDateGet() + 30;

    query = new Query();
    query.addDataSource(tableNum(FDcontractTable)).addRange(fieldNum(FDcontractTable,
            ContractId)).value(queryValue('CNRT_004'));

    query.validTimeStateDateRange(contractStartDate, contractEndDate);

    queryRun = new QueryRun(query);

    if(queryRun.prompt())
    {
        while(queryRun.next())
        {
            FDcontractTable = queryRun.getNo(1);
            info(strFmt("%1: %2 - %3",
                FDcontractTable.ContractId,
                FDcontractTable.ValidFrom,
                FDcontractTable.ValidTo));
        }
    }
}

4. örneği çalıştırdığınızda Query ekranında yeni bir özellik olan Date options ile karşılaşacaksınız. Bu sekmeden 3 tip var. İsimlerinden de anlaşılacağı üzere birincisi şu andaki aktif kaydı verir. İkincisi girilen tarihteki aktif kaydı verir. Üçüncüsü ise aralıktaki aktif kayıtları verir.

Kodda kullanımı gayet güzel olmuş.

Selamlar.

Dynamics Ax 2012 Valid Time State 1

Merhaba

Bu yazımda ax 2012 ile gelen yeni Date effective framework , veya diğer adıyla Valid time state tables‘tan bahsedeceğim. Bu framework verinizde tarih veya saat aralığına göre bir işlem yapılıyorsa bu verinin girişini ve kontrollerini otomatik yapar. Örneğin sözleşmeleri tuttuğunuz bir tablo var ve sözleşmeler belli bir tarih aralığında geçerli. Siz sözleşme bittiğinde yeni bir tarih aralığı girip sözleşmenin bazı şartlarını değiştirip yeniden tanım yapabiliyorsunuz.  Adım adım ilerleyelim.

  1. FDContractTable isminde bir tablo yapalım. Bu tabloya ContractId adında string bir alan oluşturalım. Tablonun özelliklerinden ValidtimeStateFieldType özelliğini Date yapalım. Otomatik olarak ValidFrom ve Validto alanları açılmış oldu.
  2. VTSIdx adında bir indeks oluşturup ContractId , ValidFrom ve ValidTo alanlarını ekleyelim. Resimdeki özellikleri tanımlayalım. ValidTimeStateMode ta iki tanım var Gap ve NoGap . Bu özellik iki tarih arasında boşluk bırakılıp bırakılmayacağını belirleyen özelliktir.
  3. Bir form yapalım ve forma grid ekleyelim. Alanlarımız sürükleyip gride bırakalım. Oluşturduğumuz formun veri kaynağının özelliklerinde ValidTimeStateAutoQuery özelliğini DataRange yapalım.
  4. Formu açıp veri girişi yaptığınızda aynı sözleşme kodu için çakışan tarihlere giriş yaptırmadığını göreceksiniz. Yeni kayıt girerken devam eden sözleşmeyi bitirdiğini ve yeni sözleşmenin bitiş tarihine bir giriş yapmazsanız never yani sonsuz yazdığını göreceksiniz.

Daha önce bizim kodla yaptığımız bir çok kontrolü framework bizim için yapıyor. Kullanışlı bir sistem olmuş. Bir sonraki yazımda kodda bu yapının nasıl kullanılabileceğinden bahsedeceğim.

Bu framework ile alakalı çok ayrıntılı bir White Paper yayınlandı. Buradan indirebilirsiniz.

Örnek projeyi buradan indirebilirsiniz.

Selamlar.