AX 2012 QueryHavingFilter özelliği (Having)

Merhaba

“QueryHavingFilter” bizim SQL de kullandığımız “Having” ifadesinin axtaki karşılığıdır. AX 2012 ile gelen bu özellik malesef şimdilik sadece “Query” yapısında kullanılabiliyor.

Aşağıdaki SQL ifadesini inceleyelim.

SELECT CURRENCY, COUNT(RECID) FROM CUSTTABLE
	GROUP BY CURRENCY 	HAVING COUNT(RECID) < 3

Bu ifade de istediğimiz sonuç müşteriye bağlı adedi 3 ten az olan para birimlerinin listesi.

Bu ifadenin Ax’taki karşılığı yoktu. Döngüde kontrol yapıp bunu tespit ediyorduk. Bu da performans açısından yanlış bir kullanımdı.

AX 2012 ile gelen QueryHavingFilter bu özelliği axa taşımış oldu.

Bir Query örneğiyle AX 2012 ‘de nasıl kullanabileceğimize bakalım.

static void FD_QueryHavingFilter(Args _args)
{
    Query                   q;
    QueryBuildDataSource    qbds;
    QueryHavingFilter       filter;
    QueryRun                qRun;
    CustTable               custTable;

    q = new Query();
    qbds = q.addDataSource(tableNum(CustTable));
    qbds.addSelectionField(fieldNum(CustTable, RecId),
            SelectionField::Count);

    qbds.addGroupByField(fieldNum(CustTable, Currency));

    filter = q.addHavingFilter(qbds, fieldStr(custTable, RecId),
            AggregateFunction::Count);
    filter.value('<3');

    qRun = new QueryRun(q);
    while (qRun.next())
    {
        custTable = qRun.get(TableNum(CustTable));
        info(strFmt("Para Birimi %1: %2", custTable.Currency,
                                          custTable.RecId));
    }
}

Selamlar

 
Comment are closed.