3

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 の形式を知っている人はいますか?

4

1 に答える 1

2

一連の 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 など、別の形式にする必要があると思います。

于 2013-03-01T22:57:05.303 に答える