Dynamics AX 2012 ile JSON Oluşturma İşlemleri

Şu aralar üzerinde çalıştığım bir entegrasyon projesinde ax 2012 de yoğun şekilde json kullanmam gerekti. Ax içinde native şekilde json üretmeniz için “RetailCommonWebAPI” isminde bir sınıf bulunuyor. Ama bu sınıf çok ilkel kalıyor. Bende bunun üzerine kendi kütüphanemi hazırladım. Bu kütüphanede ax içinde çeşitli şekillerde çok kolay şekilde json oluşturabileceksiniz. İlgili kütüphaneyi ve örnekleri buradan indirebilirsiniz.

Gelin nasıl kullanıldığına bakalım.

1. Json Object

En temel kullanım. İstediğiniz alanlara sahip bir json objesi yaratır.

// Güven Şahin - guvensahin.com
static void AYXJsonSample_Object(Args _args)
{
    AYXJsonObject   obj;
    CustTable       custTable;

    select firstOnly custTable;
    if (custTable)
    {
        obj = AYXJsonObject::constructJsonObject();
        obj.insert("accountNum", custTable.AccountNum);
        obj.insert("custName", custTable.name());
        obj.insert("extraInfo", "json helper test");

        info(AYXJsonHelper::generateJsonObject(obj));
    }
}

 

Yukarıdaki kodu çalıştırdığınızda aşağıdaki gibi bir çıktı elde edeceksiniz.

2. Json List

İstediğiniz alanlara sahip bir json listesi yaratır.

// Güven Şahin - guvensahin.com
static void AYXJsonSample_List(Args _args)
{
    AYXJsonObject   obj;
    CustTable       custTable;
    container       conList;

    while select firstOnly10 custTable
    {
        obj = AYXJsonObject::constructJsonObject();
        obj.insert("accountNum", custTable.AccountNum);
        obj.insert("custName", custTable.name());
        obj.insert("extraInfo", "json helper test");

        conList += [obj.pack()];
    }

    info(AYXJsonHelper::generateJsonList(conList));
}

Çıktı:

3. Record to Json

Bir ax record’unun tüm alanlarını okuyup json objesi üretir. Bu işlemi yaparken tarih, enum vs tüm alan tiplerini uygun şekilde string’e çevirir. İsterseniz işlem sonrasında oluşan json’a çeşitli ekleme-çıkarmalarda yapabilirsiniz.

// Güven Şahin - guvensahin.com
static void AYXJsonSample_Record(Args _args)
{
    CustGroup custGroup;

    select firstOnly custGroup;
    if (custGroup)
    {
        info(AYXJsonHelper::generateJsonFromAxRecord(custGroup));
    }
}

Çıktı:

4. SQL Command to Json

Ax içinde ax db’sine direkt bir TSQL komutu gönderip sonucunu direkt json olarak alabilirsiniz.

// Güven Şahin - guvensahin.com
static void AYXJsonSample_SQL(Args _args)
{
    str sqlQuery;
    CompanyInfo companyInfo = CompanyInfo::findDataArea(curext());
    ;

    sqlQuery = strFmt("select top 3 accountNum, custGroup from custTable where dataAreaId = '%1' and partition = %2",
                    companyInfo.DataArea,
                    companyInfo.Partition);

    info(AYXJsonHelper::generateJsonFromSQLQuery(sqlQuery));
}

Çıktı:

5. Record List

Ax içinde yazdığınız bir query veya while select döngüsünü 2. ve 3. maddelerde belirttiğim kullanımları kombine ederek direkt json’a çevirebilirsiniz.

// Güven Şahin - guvensahin.com
static void AYXJsonSample_RecordList(Args _args)
{
    AYXJsonObject   obj;
    CustGroup       custGroup;
    container       conList;

    while select firstOnly10 custGroup
    {
        obj = AYXJsonHelper::axRecordToJsonObject(custGroup);

        conList += [obj.pack()];
    }

    info(AYXJsonHelper::generateJsonList(conList));
}

Çıktı:

6. Json Object & List

Bir ax record’unun başlık ve satırları beraber, tek bir veri kümesi halinde json’a dönüştürebilirsiniz.

// Güven Şahin - guvensahin.com
static void AYXJsonSample_ObjectAndList(Args _args)
{
    AYXJsonObject   objHeader, objLine;
    SalesTable      salesTable;
    SalesLine       salesLine;
    container       conList;

    select firstOnly salesTable;
    if (salesTable)
    {
        while select salesLine
        where salesLine.SalesId == salesTable.SalesId
        {
            objLine = AYXJsonHelper::axRecordToJsonObject(salesLine);
            conList += [objLine.pack()];
        }

        objHeader = AYXJsonHelper::axRecordToJsonObject(salesTable);
        objHeader.insert("Lines", conList, true);

        info(AYXJsonHelper::generateJsonObject(objHeader));
    }
}

Çıktı:

 

Son olarak bu sınıfı isterseniz çok kolay bir şekilde AX 2009 yada D365’e uyarlayıp kullanabilirsiniz.

Hoşçakalın.

Bir Cevap Yazın