Я работаю со службой запросов Dynamics AX 2012 R2, и мне нужно отфильтровать (установить диапазон) в поле ModifiedDateTime таблицы CustTable. Я создаю объект QueryDataRangeMetadata и устанавливаю его свойства. Я могу правильно фильтровать целочисленные значения, но не DateTimes.
Мне удалось выяснить, что оператор сравнения на самом деле встроен в значение. Я проверил это с целочисленными полями, и это работает, но я не смог понять, как отформатировать значение DateTime, чтобы оно правильно оценивалось. Код ниже не работает. Диапазон просто игнорируется и возвращаются все записи из таблицы CustTable.
public static void RangeTest()
{
var client = new QueryServiceClient();
var dataSource = new QueryDataSourceMetadata
{
Table = "CustTable",
Name = "CustTable",
HasRelations = false,
Enabled = true,
DynamicFieldList = true // get all fields
};
var range = new QueryDataRangeMetadata
{
TableName = "CustTable",
FieldName = "modifiedDateTime",
Value = ">2013-02-05T21:17:33Z", // <-- ISSUE: notice the operator with the value!
Enabled = true
};
dataSource.Ranges = new QueryRangeMetadata[] { range };
var sort = new QueryDataOrderByMetadata
{
DataSource = "CustTable",
FieldName = "modifiedDateTime",
SortOrder = SortOrder.Ascending
};
var query = new QueryMetadata
{
QueryType = QueryType.Join,
DataSources = new[] { dataSource },
OrderByFields = new QueryOrderByMetadata[] { sort }
};
Paging paging = null;
var dataSet = client.ExecuteQuery(query, ref paging);
Console.WriteLine(dataSet.Tables[0].Rows.Count);
}
Я также безуспешно пробовал эти варианты форматирования:
Value = ">2013-02-05 21:17:33"
Value = ">2013-02-05T9:17:33"
Value = ">'2013-02-05T9:17:33'"
Value = ">2013-02-05T21:17:33Z"
Кто-нибудь знает, какой формат DateTime должен быть в этом случае?