簡體   English   中英

查詢 MSAX7 時,更改 OData 查詢中 $top 子句的位置會更改結果

[英]Changing location of $top clause in OData query changes results when Querying MSAX7

我有一個 ODATA 查詢,它從 Dynamics AX 表中提取第一條記錄,並在 $top 參數是第一個參數時忽略 $filter 子句。 但是,當 $top 參數位於查詢末尾時,它會為 $filter 子句提取正確的記錄。

問題:無論 $top 參數放在哪里,如何讓 OData 服務器遵守完整查詢?

以下兩種情況返回相同的結果:

案例 1: https://url/data/Users ? $top=1

{
     "@odata.context":"https://url/data/$metadata#Users","value":[
     {
        "@odata.etag":"W/\"J5zEx4NDg33OD2YyM4TEs5NTY6zNz7E0ND7U3Nic=\"",
        "Id":"first_user_in_the_table",
        "Alias":"first_user_in_the_table@domain.com",
        "Name":"first_user_in_the_table"
     }
   ]
 }

案例 2: https://url/data/Users $top=1 &$filter=Alias%20eq%20%27 specific_user@domain.com %27

{
    "@odata.context":"https://url/data/$metadata#Users","value":[
    {
        "@odata.etag":"W/\"J5zEx4NDg33OD2YyM4TEs5NTY6zNz7E0ND7U3Nic=\"",
        "Id":"first_user_in_the_table",
        "Alias":"first_user_in_the_table@domain.com",
        "Name":"first_user_in_the_table"
    }
  ]
}

但是,當我將 $top 參數移動到查詢字符串的末尾時,我得到了正確的結果。

案例 3: https://url/data/Users ?$filter=Alias%20eq%20%27 specific_user@domain.com %27& $top=1

{
    "@odata.context":"https://url/data/$metadata#Users","value":[
    {
        "@odata.etag":"W/\"Jz3kz4Nj5g2N6zcz7MCw81Nj9M3M2TU3w4NT4c54Jw==\"",
        "Id":"specific_user",
        "Alias":"specific_user@domain.com",
        "Name":"The Specific User I Actually Want"
    }
  ]
}

據我了解OData 規范,這是不正確的行為。 我基於11.2 請求數據,它指出$top查詢選項應該在$filter查詢選項的最后和之后進行評估。 此外, OData ABNF 構造規則的第 2 節查詢選項似乎表明查詢選項可能以任何順序出現在 URL 中。

這表明此特定行為可能未正確實施。 您可能無法解決這個問題,因為它實現了一個自定義服務,該服務包裝現有服務以根據需要重新排序查詢選項。 我還假設這會影響所有 Odata 服務的行為。

我建議你向 Microsoft 創建一個支持請求,以便他們解決這個問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM