如何设置AX查询服务中日期时间比较值的格式

本文关键字:时间 日期 比较 格式 查询服务 何设置 设置 AX | 更新日期: 2023-09-27 18:01:43

我正在使用Dynamics AX 2012 R2查询服务,需要在CustTable的modifiedDateTime字段上过滤(设置范围)。我正在创建一个QueryDataRangeMetadata对象并设置其属性。我可以正确地过滤整数值,但不能过滤日期时间。

我能够弄清楚比较运算符实际上嵌入了值。我已经用整数字段测试了这个,它确实工作,但我还不能弄清楚如何格式化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的格式应该是什么在这种情况下?

如何设置AX查询服务中日期时间比较值的格式

在迭代了一堆DateTime格式变化之后,我只是从UI复制并粘贴了一个值,你猜怎么着?它工作。这是代码片段:

        var range = new QueryDataRangeMetadata
        {
            TableName = "CustTable",
            FieldName = "modifiedDateTime",
            Value = ">2/5/2013 9:17:33 PM",
            Enabled = true
        };

所以格式似乎是:comparison_operatorMM/DD/YYYY hh:mm:ss AM

我在美国,格式是月首。我想其他区域必须采用不同的格式,例如:day-first.