Ş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));
}
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));
}
}
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));
}
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));
}
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.
Güzel bir çalışma olmuş Güven, eline sağlık.