Hi All,
I'm facing difficulty while fetching records between two utcdatetime fields by using X++ query on refereceFieldLookup.
I've querying a View which has the ValidFrom and ValidTo fields.
the data source for the view is HcmPositionWorkerAssignment table and the View has ValidtimeStateProperty set to NO.
I'm aware of the below solution, to fetch from ValidtimeStateTable , but in my scenario I've wanted it ValidtimeStateProperty as NO.
query.validTimeStateDateTimeRange(rangeStart, rangeEnd);
Below expression I've tried but its not filtering based on the query value .I can see the ranges has been added to the query using query.Tostring() method, but it not shows any records in the refereceFieldLookup , not between the given date range
utcDateTime rangeStart, rangeEnd; date startDate, endDate; TimeOfDay startTime, endTime; QueryBuildDataSource qbdsHcmPositionWorkerAssignment; QueryBuildRange qbrWorker,qbrPosition; // set range variables startDate = 07\01\2018; // day\month\year endDate =30\06\2019; // day\month\year startTime = str2time('12:00:00 am'); //GMT, NOT user time zone - this is how stored in the table endTime = str2time('12:00:00 am'); //GMT, NOT user time zone - this is how stored in the table rangeStart = DateTimeUtil::newDateTime(startDate,startTime); rangeEnd = DateTimeUtil::newDateTime(endDate,endTime); qbdsHcmPositionWorkerAssignment = query.addDataSource(tableNum(HcmPositionWorkerAssignmentView)); qbrPosition = qbdsHcmPositionWorkerAssignment.addRange(fieldNum(HcmPositionWorkerAssignmentView, DataAreaId)); qbrPosition.value(strFmt('(( %1.%2 >= "%3") && (%1.%4 <= "%5"))',
qbdsHcmPositionWorkerAssignment.name(),
fieldStr(HcmPositionWorkerAssignmentView, ValidFrom),datetime2Str(rangeStart),
fieldStr(HcmPositionWorkerAssignmentView, ValidTo),datetime2Str(rangeEnd)));
//below is the sql querystring generated
SELECT * FROM HcmPositionWorkerAssignmentView(HcmPositionWorkerAssignmentView_1)
WHERE (((( HcmPositionWorkerAssignmentView_1.ValidFrom>= "7/1/2018 12:00:00 am") && (HcmPositionWorkerAssignmentView_1.ValidTo <= "6/30/2019 12:00:00 am"))))
AND ((Worker = 68719484600)) AND ((Position = 68719480329))