Merhaba
Önceki yazımda tarih kontrollü yapının nasıl kurulacağını anlatmıştım. Bu yazımda framework ile gelen sorgu özelliklerinden bahsedeceğim. Resimdeki gibi bir örnek verimiz olsun.
![TimeQuery3](http://www.fatihdemirci.net/wp-content/uploads/2013/04/TimeQuery3.jpg)
Birinci örneğimiz bu gün için geçerli olan sözleşme kaydını bize verir.
Select ile;
static void FD_ValidTimeState1(Args _args)
{
FDcontractTable FDcontractTable;
TransDate contractStartDate = systemDateGet() ;
;
while select validTimeState(contractStartDate) FDcontractTable
where FDcontractTable.ContractId == 'CNRT_004'
{
info(strFmt("%1: %2 - %3",
FDcontractTable.ContractId,
FDcontractTable.ValidFrom,
FDcontractTable.ValidTo));
}
}
Query ile;
static void FD_ValidTimeState3(Args _args)
{
Query query;
QueryRun queryRun;
FDcontractTable FDcontractTable;
TransDate contractStartDate = systemDateGet() ;
;
query = new Query();
query.addDataSource(tableNum(FDcontractTable)).addRange(fieldNum(FDcontractTable,
ContractId)).value(queryValue('CNRT_004'));
query.validTimeStateAsOfDate(contractStartDate);
queryRun = new QueryRun(query);
if(queryRun.prompt())
{
while(queryRun.next())
{
FDcontractTable = queryRun.getNo(1);
info(strFmt("%1: %2 - %3",
FDcontractTable.ContractId,
FDcontractTable.ValidFrom,
FDcontractTable.ValidTo));
}
}
}
![TimeQuery4](http://www.fatihdemirci.net/wp-content/uploads/2013/04/TimeQuery4.jpg)
İkinci örnekte ise 30 günlük aralıkta kalan bütün sözleşmeleri verir.
Select ile;
static void FD_ValidTimeState2(Args _args)
{
FDcontractTable FDcontractTable;
TransDate contractStartDate = systemDateGet() ;
TransDate contractEndDate = systemDateGet() + 30;
;
while select validTimeState(contractStartDate , contractEndDate)
FDcontractTable
where FDcontractTable.ContractId == 'CNRT_004'
{
info(strFmt("%1: %2 - %3",
FDcontractTable.ContractId,
FDcontractTable.ValidFrom,
FDcontractTable.ValidTo));
}
}
Query ile;
static void FD_ValidTimeState4(Args _args)
{
Query query;
QueryRun queryRun;
FDcontractTable FDcontractTable;
TransDate contractStartDate = systemDateGet() ;
TransDate contractEndDate = systemDateGet() + 30;
query = new Query();
query.addDataSource(tableNum(FDcontractTable)).addRange(fieldNum(FDcontractTable,
ContractId)).value(queryValue('CNRT_004'));
query.validTimeStateDateRange(contractStartDate, contractEndDate);
queryRun = new QueryRun(query);
if(queryRun.prompt())
{
while(queryRun.next())
{
FDcontractTable = queryRun.getNo(1);
info(strFmt("%1: %2 - %3",
FDcontractTable.ContractId,
FDcontractTable.ValidFrom,
FDcontractTable.ValidTo));
}
}
}
![TimeQuery2](http://www.fatihdemirci.net/wp-content/uploads/2013/04/TimeQuery2.jpg)
4. örneği çalıştırdığınızda Query ekranında yeni bir özellik olan Date options ile karşılaşacaksınız. Bu sekmeden 3 tip var. İsimlerinden de anlaşılacağı üzere birincisi şu andaki aktif kaydı verir. İkincisi girilen tarihteki aktif kaydı verir. Üçüncüsü ise aralıktaki aktif kayıtları verir.
![TimeQuery1](http://www.fatihdemirci.net/wp-content/uploads/2013/04/TimeQuery1.jpg)
Kodda kullanımı gayet güzel olmuş.
Selamlar.