【问题标题】:How to format DateTime comparison value in AX Query Service如何在 AX 查询服务中格式化日期时间比较值
【发布时间】:2013-04-04 21:16:33
【问题描述】:

我正在使用 Dynamics AX 2012 R2 查询服务,需要对 CustTable 的 modifiedDateTime 字段进行过滤(设置范围)。我正在创建一个 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 的格式应该是什么吗?

【问题讨论】:

    标签: c# web-services axapta dynamics-ax-2012


    【解决方案1】:

    在迭代了一堆 DateTime 格式变化后,我刚刚从 UI 复制并粘贴了一个值,你猜怎么着?有效。这是sn-p:

            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

    我在美国,格式是月优先。我想其他语言环境必须采用不同的格式,例如第一天。

    【讨论】:

    • 如果用户从设置中更改日期格式会怎样。您的代码将停止运行....您找到其他解决方案了吗?
    • @SaboorAwan:OP 中的代码 sn-ps 和答案是硬编码的,但为了简单起见。对于生产,您将使用用户的文化来格式化。更好的是,您应该使用 UTC 日期时间和文字:msdn.microsoft.com/en-us/library/cc597805.aspx
    猜你喜欢
    • 2017-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-14
    • 1970-01-01
    • 2020-10-10
    • 2012-04-24
    • 1970-01-01
    相关资源
    最近更新 更多