İki Query ile fatch örneği
Bir fatch örneği paylaşıyorum.
FDInventTransDim tablosu datasourcta group by yapılmış şekilde mevcut
Fatch metodumuza bakalım
public boolean fetch()
{
boolean ret;
Query q;
QueryRun qRun;
FDInventTransDim fDInventTransDim;
FDInventTransDim tmpFDInventTransDim;
QueryBuildDataSource qBd,qbdsTmp;
QueryBuildRange qBr,qbrTmp;
Query qTmp;
QueryRun qRunTmp;
;
ret = true; //super();
q = element.query();
qTmp = new Query(q);
qbdsTmp = qTmp.dataSourceTable(tablenum(FDInventTransDim));
qbdsTmp.addSelectionField(fieldnum(FDInventTransDim,Qty),SelectionField::Sum);
//ikinci bir qyery oluşturuyoruz çünki datasourctan gelen kriterleri ona atamak istiyoruz
qbd = q.dataSourceTable(tablenum(FDInventTransDim));
qBr = qBd.addRange(fieldnum(FDInventTransDim,DatePhysical));
qBr.value(queryRange(startDate,endDate));
// başlangıç ve bitiş tarihlerine göre kriter veriyoruz
qRun = new QueryRun(q);
while(qRun.next())
{
FDInventTransDim = qRun.get(tablenum(FDInventTransDim));
// findOrCreateRange ile birinci quetydeki 4 alanın değeri ikinci query e atıyoruz
SysQuery::findOrCreateRange(qbdsTmp,fieldnum(FDInventTransDim,ItemId)).value(SysQuery::value(FDInventTransDim.ItemId));
SysQuery::findOrCreateRange(qbdsTmp,fieldnum(FDInventTransDim,InventSiteId)).value(SysQuery::value(FDInventTransDim.InventSiteId));
SysQuery::findOrCreateRange(qbdsTmp,fieldnum(FDInventTransDim,InventBatchId)).value(SysQuery::value(FDInventTransDim.InventBatchId));
SysQuery::findOrCreateRange(qbdsTmp,fieldnum(FDInventTransDim,InventLocationId)).value(SysQuery::value(FDInventTransDim.InventLocationId));
qbrTmp = SysQuery::findOrCreateRange(qbdsTmp,fieldnum(FDInventTransDim,DatePhysical));
// tarihten önceki toplamı buluyoruz
qbrTmp.value(SysQuery::valueUnlimited());
qbrTmp.value(strfmt(‘(DatePhysical < %1)’ , Date2StrXpp(FDInventTransDim.DatePhysical)));
qRunTmp = new QueryRun(qTmp);
onhand = 0;
while(qRunTmp.next())
{
tmpFDInventTransDim = qruntmp.get(tablenum(FDInventTransDim));
onhand +=tmpFDInventTransDim.Qty;
}
/ tarihteki toplamı buluyoruz
qbrTmp.value(SysQuery::valueUnlimited());
qbrTmp.value(queryValue(FDInventTransDim.DatePhysical));
qRunTmp = new QueryRun(qTmp);
outputQty = 0;
inputQty = 0;
while(qRunTmp.next())
{
tmpFDInventTransDim = qruntmp.get(tablenum(FDInventTransDim));
if(tmpFDInventTransDim.Qty <0)
outputQty +=tmpFDInventTransDim.Qty;
else
inputqty = tmpFDInventTransDim.Qty;
}
// Genel toplamı buluyoruz
total = onhand + inputqty + outputQty;
//En son satırımızı yazdırıyoruz.
element.send(FDInventTransDim);
}
return ret;
}
biraz karışık ancak çok işe yarayabilecek bir örnek olduğunu düşünüyorum.
Selamlar.