Eki 8, 2014 - Query, X++    Yorum Yok

Query Nesneleri – Axapta

Dynamics Ax’ta veri tabanına erişimin en kolay yolu select cümlecikleridir. Ancak diğer bir yöntem olan Query nesneleride sıkça kullanılmaktadır. Queryler select cümleciklerine göre daha esnek bir yapıya sahiptir. Bu yüzden kullanıcıdan alınan verilere göre dinamik sorgular oluşturulabilmede daha kolaylık sağlarlar. Basit sorgular için select cümlecikleri tercih edilirken daha karmaşık sorgu yapılarında veya dinamik yapılarda query nesneleri daha uygun bir tercih olacaktır.

Queryler için en temel nesneler aşağıdaki gibidir.

Query : Select cümleciğini temsil eden sorgu nesnesidir.
QueryRun : Select cümlesinin çalışan halidir. Veriyi bu nesne sağlar. Query nesnesi oluşturulduktan sonra QueryRun nesnesine atarak çalışıtırılması sağlanır.
QueryBuildDataSource : Select cümlelerindeki tabloları temsil eder.
QueryBuildRange : Select cümlerindeki where de yazılan şartları temsil eder. Querye filirte vermek için kullanılır.

Querylerde işlem sırasından bahsedecek olursak Query nesnesi tanımlanır. İlgili tablolar QueryBuildDataSource yardımıyla query nesnesine eklenir. Range(filitre) uygulanacaksa QueryBuildRange nesnesiyle eklenir. QueryRun nesnesi oluşuturlarak queryinin çalıştırılması sağlanır.

QueryRun.prompt() ile kullanıcıya bir sorgu ekranı gösterilir ve kullanıcı tarafından sorgunun oluşuturulması sağlanır. Daha sonra QueryRun.next() methodu while döngüsüne şart olarak verilmesi ile dönen verilerin teker teker alınması sağlanır. QueryRun.get(tableId_tableId) ile eklenen datasourcelar istenilen tablo değişkenlerine atanarak istenilen verilerin elde edilmesi sağlanır.

static void Erkn_Query(Args _args)
{
    InventTable          inventTable;
    Query                q;
    QueryRun             qr;
    QueryBuildDataSource qbds;

    q = new Query();
    qbds = q.addDataSource(tableNum(InventTable)); //burada querye InventTable tablosu eklenir.
    qr = new QueryRun(q);
    if(qr.prompt())   //Bu kısımda kullanıcıya sorgu ekranı açılır.
    {
        while(qr.next())
        {
            inventTable = qr.get(tableNum(InventTable)); //tablo değişkenine sorgunun ilk satırı atanır.
            info(strFmt("%1 %2", inventTable.ItemId, inventTable.itemName())); //tablo değişkeni kullanılır.
        }
    }
}

axapta query

Prompt işlemi sonrasında çıkan ekran yukarıdaki gibidir. İstenilen alanlar seçilerek sorguya  filitre olarak eklenebilinir.

İkinci örnekte QueryBuildRange kısmı kullanmayı göreceğiz.

static void Erkn_QueryRange(Args _args)
{
    InventTable          inventTable;
    Query                q;
    QueryRun             qr;
    QueryBuildDataSource qbds;
    QueryBuildRange      qbr;

    q = new Query();
    qbds = q.addDataSource(tableNum(InventTable)); //burada querye InventTable tablosu eklenir.
    qbr = qbds.addRange(fieldNum(InventTable, ItemType)); //InventTable üzerinde ItemType için range verileceği belirtilir.
    qbr.value(sysQuery::value(ItemType::Item)); //ItemType değeri Madde olanlar için filitre oluşuturulur.
    qbr.status(RangeStatus::Locked);  //bir range lock edilirse kullanıcı tarafından değiştirilemez
    qr = new QueryRun(q);
    if(qr.prompt())   //Bu kısımda kullanıcıya sorgu ekranı açılır.
    {
        while(qr.next())
        {
            inventTable = qr.get(tableNum(InventTable)); //tablo değişkenine sorgunun ilk satırı atanır.
            info(strFmt("%1 %2", inventTable.ItemId, inventTable.itemName())); //tablo değişkeni kullanılır.
        }
    }
}

Aşağıdaki işlemin sonucunda ekrana madde tipi alanı “madde” filitreli olacaktır ve kullanıcı tarafından değiştirilemeyecektir. İstenirse başka alanlarda ekle butonundan eklenip kullanıcı tarafından filitreler yapılabilir.

axapta query

Yapılan örneklerin sonucunda kullanıcının verdiği filitrelere göre inventTable tablosundaki kayıtlar ekrana listelenecektir. Bu sayede her kullanıcı kendine göre bir sorgu çekebilmesi sağlanmış olacaktır.

Bir sonraki konuda Query ile gruplama, sıralama işlemlerinden bahsedeceğim.

Erkan OĞUZ

Önceki Konu->

<- Sonraki Konu

Benzer yazılar

Yorum Yazın...