2016-10-19 39 views
1

我正在尋找編寫一個查詢來選擇所有比X ++中的特定日期更長的銷售訂單。這將成爲我正在撰寫的工作的一部分。在Axapta 2009中大於日期X ++

事情是這樣的:

SalesTable.createdDateTime > '2016-09-01' 

我相信,我需要使用DateTimeUtil::newDateTime做到這一點。我見過這樣的例子:

where salesLine.createdDateTime == DateTimeUtil::newDateTime(systemdateget(), 0) 

我該如何把實際日期放在那裏?或者我應該使用不同的方法?或許?

非常感謝,

安娜

+0

安娜你好,得到實際日期,你可以用'DateTimeUtil :: getSystemDateTime()'或'DateTimeUtil :: utcNow()'方法或'今天()'方法如果你只想日期。 –

+0

謝謝喬納森,但我該如何在代碼中使用該實際日期?我已經看到了有今天日期的各種示例--30(過去一個月的銷售訂單),但我想要做的是在9月15日之後選擇所有記錄(並且不會根據當前日期更改該日期)。 –

+0

嘗試使用mkdate(https://msdn.microsoft.com/en-us/library/aa871977.aspx) –

回答

1

使用AX的查詢語法或使用查詢對象都取決於您的使用。做一個日期/時間對兩者都有用。

下面是一個示例作業,顯示了更正確的方式來執行您想要的操作,並顯示了時區注意事項。

您可以構建date對象或utcDateTime,這更可能是您需要執行的操作。

static void DateTimeExample(Args _args) 
{ 
    utcDateTime   myDateTime; 
    date    myDate; 
    TimeOfDay   myTimeOfDay; 

    // Set your date 
    myDate   = mkDate(1,10, year(today())); // Ex. October 1, 2016 

    // Set time of day or just use 0 
    myTimeOfDay  = DateTimeUtil::time(DateTimeUtil::utcNow()); 

    // Build your utcObject 
    myDateTime = DateTimeUtil::newDateTime(myDate, myTimeOfDay); 

    // Apply timezone offset 
    myDateTime = DateTimeUtil::applyTimeZoneOffset(myDateTime, DateTimeUtil::getCompanyTimeZone()); 

    info(strFmt("utcDateTime: %1", myDateTime)); 
} 
1

通過您的評論(但我怎麼使用,在代碼的實際日期?),你可以在查詢中使用使用此代碼:

Query    q; 
QueryRun    qr; 
QueryBuildDataSource qbd; 
QueryBuildRange  qbr; 
utcDateTime   mutcDateTime; 
date     mDate; 

; 

mDate  = str2Date("15/09/2016", 123); //15h September 
mutcDateTime = DateTimeUtil::newDateTime(mDate,0); 

q = new Query(); 
qbd = q.addDataSource(TableNum(SalesTable)); 
qbr = qbd.addRange(FieldNum(SalesTable, CreatedDateTime)); 
qbr.value(strFmt('>%1', mutcDateTime)); 
qr = new QueryRun(q);  

被程序代碼運行此查詢,並得到SalesTable

while(qr.next()){ 
    salesTable = qr.get(tablenum(SalesTable)); 
}   
+2

感謝Pradeep,Alex和Jonathan的評論。我絕對有很多要學習! –

+0

最後一個newb問題,我可以在while循環內更​​新那些選定的記錄嗎? –

+0

當然可以。在qr = new QueryRun(q)之前; 'add this line'qbd.update(true);'和while while循環在開始時'ttsBegin;'結束'ttsCommit;'當然你需要'SalesTable.update()'如果你想要的話你可以標記這個回答正確:) –