Merhaba
addQueryFilter ax 2012 ile gelen bir yenilik.
addQueryFilter ile addRange arasındaki farkı anlamak için öncelikle SQL’de bir kaç örnek yapalım.
Sql’de basit bir join .
SELECT * FROM CUSTTABLE
OUTER JOIN CUSTTRANS ON CUSTTRANS.CUSTACCOUNT = CUSTTABLE.ACCOUNTNUM
Bu join’e hareketlerin para birimi EUR olanlar diye bir kriter vermek istersen 2 seçeneğimiz var.
SELECT * FROM CUSTTABLE
OUTER JOIN CUSTTRANS ON CUSTTRANS.CUSTACCOUNT = CUSTTABLE.ACCOUNTNUM
AND CUSTTRANS.CURRENCYCODE = 'EUR'
veya
SELECT * FROM CUSTTABLE
OUTER JOIN CUSTTRANS ON CUSTTRANS.CUSTACCOUNT = CUSTTABLE.ACCOUNTNUM
WHERE CUSTTRANS.CURRENCYCODE = 'EUR'
Birinci sql ifadesi öncelikle CustTable da bulunan bütün kayıtları getirir. Hareketlerden de sadece EUR olanları alır.
İkinci ifade ise aslında inner joinin yaptığı işi yapar ve sadece EUR tipinde hareketi olan müşterileri ve hareketlerini getirir.
İşte addQueryFilter ile addRange arasındaki fark bu iki sql ifadesi arasındaki farkla birebir aynıdır.
addQueryFilter where ifadesini , addRange ise and ifadesine karşılık gelir.
Ax ta bir örnekle inceleyelim,
static void Query_addQueryFilter (Args _args)
{
Query query;
QueryBuildDataSource qbdsCustTable , qbdsCustTrans;
QueryBuildRange range;
QueryFilter filter;
QueryRun qRun;
custTable CustTable;
custTrans custTrans;
;
query = new Query();
qbdsCustTable = query.addDataSource(tableNum(CustTable));
qbdsCustTrans = qbdsCustTable.addDataSource(tableNum(CustTrans));
qbdsCustTrans.joinMode(JoinMode::OuterJoin);
qbdsCustTrans.relations(true);
query.addQueryFilter(qbdsCustTrans, fieldStr(CustTrans, CurrencyCode)).value(SysQuery::value('EUR'));
// qbdsCustTrans.addRange(fieldNum(CustTrans, CurrencyCode)).value(SysQuery::value('EUR'));
qRun = new QueryRun(query);
while (qRun.next())
{
CustTable = qRun.get(TableNum(CustTable));
custTrans = qRun.get(TableNum(custTrans));
info(strfmt("%1 : %2: %3: %4", CustTable.AccountNum ,
CustTable.name(),
custTrans.AmountMST,
custTrans.CurrencyCode
));
}
}
addQueryFilter koddan çok formalarda kullanılmak üzere geliştirilmiş bir özellik. Formlardaki veri süzme işleminde artık varsayılan olarak addQueryFilter kullanılıyor.
Selamlar.