Archive for Aralık 20th, 2011

Prompt ekranından girilen kriterleri başka bir query’e aktarmak

Merhaba

Prompt ekranı bir query için kriter girme, sıralama ve gruplama gibi farklı işlemleri yapabileceğiniz çok esnek bir uygulamadır. Özellikle rapor ve formlarda çok kullanılan bu ekranı her ax kullanıcısının çok iyi bilmesi gerekir. Bizim bu yazıdaki konumuz Prompt ekranında herhangi bir veri kaynağı için dinamik olarak girilen kriterleri tespit edip başka bir query’e aktarmaktır.

Bunu şöyle bir jobta deneyebiliriz:


static void GetQueryPromtRangeValues(Args _args)
{
CustTable               CustTable;
CustTable               CustTable2;
int                     counter;

Query                   q;
QueryRun                qRun;
QueryBuildRange         qbr;
QueryBuildDataSource    qbds;

Query                   q2;
QueryRun                qRun2;
QueryBuildDataSource    qbds2;

QueryBuildRange         qbrGet;
QueryBuildDataSource    qbdsGet;

;
// Birinci Query
q       = new Query();
qbds    = q.addDataSource(TableNum(CustTable));
qRun    = new QueryRun(q);
// İkinci Query
q2       = new Query();
qbds2    = q2.addDataSource(TableNum(CustTable));

if(qRun.prompt())
{
// CustTable veri kaynağı için girilen kriterleri buluyoruz
qbdsGet = qRun.query().dataSourceTable(TableNum(CustTable));
counter = qbdsGet.rangeCount(); // Kaç adet kriter girilmiş tespit ettik
// Girilen kriterleri bir döngü kullanarak ikinci query ye ekliyoruz
while(counter >0)
{
qbrGet = qbdsGet.range(counter);
info(strfmt("%1 : %2 ",counter , qbrGet.value() ));
qbds2.addRange(qbrGet.field()).value(qbrGet.value());
counter--;
}

setPrefix("Asıl Query ile ");
while(qRun.next())
{
CustTable = qRun.get(TableNum(CustTable));
info(strfmt("%1 : %2 ", CustTable.AccountNum,CustTable.Name ));
}
}

// ikinci query için QueryRun oluşturuyoruz.
// Aynı kriterlerin eklendiğini promt ekranında görebiliyoruz
qRun2    = new QueryRun(q2);

setPrefix("İkinci Query ile ");
if(qRun2.prompt())
{
while(qRun2.next())
{
CustTable2 = qRun2.get(TableNum(CustTable));
info(strfmt("%1 : %2 ", CustTable2.AccountNum,CustTable2.Name ));
}
}
}

Selamlar.