AEM: GraphQL處理Null值的變更

第一次變更會利用「 」影響篩選條件 CONTAINS_NOT 運運算元,其他兩個關注點  null  多值欄位篩選條件中的值。

說明 description

環境
Adobe Experience Manager (AEM) as a Cloud Service

問題/症狀
在2023.02.11382版中,GraphQL (開放原始碼查詢語言)實作已進行一些改善,可能會在應用程式程式碼中造成非預期行為,以防它依賴舊版版本的錯誤行為。 以下提及的解決方法可協助您實現Adobe Experience Manager (AEM) GraphQL現在會在所有篩選作業中一致地傳回含有空值的內容。

解決方法 resolution

CONTAINS_NOTnull

第一次變更會利用「 」影響篩選條件 CONTAINS_NOT 運運算元。 在舊版中,這會 CONTAINS_NOT 未傳回內容片段,包含 null 套用篩選條件的欄位中的值。 這和類似的運運算元(例如)不一致 EQUALS_NOTNOT_AT.
請確定您的使用者端應用程式能夠處理 null 使用時AEM傳回的值 CONTAINS_NOT.

範例:

篩選片段
資料
2023.02.11382之前的結果
以2023.02.11382開始的結果
myField: {
    值: "fragg",
    _op: CONTAINS_NOT
}
[
    {
        myField: null
    },
    {
        myField: "Some text"
    },
    {
        myField: "Text fragment"
    }
]
[
    {
        myField: "Some text"
    }
]
[
    {
        myField: null
    },
    {
        myField: "Some text"
    }
]

套用模式 ALL_OR_EMPTY/ALL 和  null  值
在2023.02.11382中修正的另一個問題與  null  多值欄位篩選條件中的值。 套用模式 ALL_OR_EMPTY (在陣列/多值欄位上)未傳回包含的片段  null  有問題的欄位值,因此實際上正如您預期的那樣, ALL 套用方法。 同時,使用套用模式篩選多值欄位 ALL 會包含該欄位具有空白內容的片段,但不應包含。建議測試使用其中一個套用模式的查詢,如果它們沒有再傳回2023.02.11382中的預期結果集,請變更它們。

請注意,問題僅存在於某些運運算元(2023.02.11382之前)。
例如: EQUALS_NOT 對套用方法如預期般運作 ALL_OR_EMPTY,而 CONTAINS 沒有。
範例:

篩選片段
資料
2023.02.11382之前的結果
以2023.02.11382開始的結果
myArray: {
  運算式(_E): {
    值: 「1.3」
    _operator: EQUALS_NOT
    套用(_A):全部
  }
}
[
  {
    myArray: null
  },
  {
    myArray: [ 「1.1」、「1.2」、「1.3」 ]
  },
  {
    myArray: [ 「2.1」、「2.2」、「2.3」 ]
  }
]
[
  {
    myArray: null
  },
  {
    myArray: [ 「2.1」、「2.2」、「2.3」 ]
  }
]
[
  {
    myArray: [ 「2.1」、「2.2」、「2.3」 ]
  }
]
myArray: {
  運算式(_E): {
    值: 「2」。
    _operator: CONTAINS
    _apply: ALL_OR_EMPTY
  }
}
[
  {
    myArray: [ 「2.1」、「2.2」、「2.3」 ]
  }
]
[
  {
    myArray: null
  },
  {
    myArray: [ 「2.1」、「2.2」、「2.3」 ]
  }
]

套用模式: INSTANCES_instances: 0 和  null  值
最後一個問題也與  null  多值欄位篩選條件中的值。 套用模式 INSTANCES 替換為_instances: 0 不匹配包含的內容片段  null  2023.02.11382之前相應欄位中的值,但將從2023.02.11382開始。建議測試使用此星座的查詢,如果它們沒有再傳回2023.02.11382中的預期結果集,請變更它們。
範例:

篩選片段
資料
2023.02.11382之前的結果
以2023.02.11382開始的結果
myArray: {
  運算式(_E): {
    值: 「2」。
    _operator: CONTAINS
    套用:執行個體(_A)
    執行個體(_I): 0
  }
}
[
  {
    myArray: null
  },
  {
    myArray: [ 「1.1」、「1.2」、「1.3」 ]
  },
  {
    myArray: [ 「2.1」、「2.2」、「2.3」 ]
  }
]
[
  {
    myArray: [ 「1.1」、「1.2」、「1.3」 ]
  }
]
[
  {
    myArray: null
  },
  {
    myArray: [ 「1.1」、「1.2」、「1.3」 ]
  }
]

可能影響客戶的改善專案,包括 ft-sites-97 已啟用
客戶擁有 ft-sites-97(GraphQL分頁與最佳化篩選)  功能標幟已啟用  早於 2023.02.11382版在升級至2023.02.11382版後,可能會遇到下列一或多項行為變更。未啟用此功能標幟的客戶不受此區段的影響。
空值處理搭配檢查不等式的條件
片段欄位  null  檢查不相等性的篩選器斷斷續續地不符合值。

如果您的程式碼依賴這些未傳回的片段,則必須調整程式碼以符合預期行為。

篩選片段
資料
中繼實作的結果
最終實作的結果
myField: {
  值: "Some text",
  _op: EQUALS_NOT
}
[
  {
    myField: null
  },
  {
    myField: "Some text"
  },
  {
    myField: "Text fragment"
  }
]
[
  {
    myField: "Some text"
  }
]
[
  {
    myField: null
  },
  {
    myField: "Some text"
  }
]

篩選器運運算元 NOT_AT 含日期/時間值
篩選器運運算元 NOT_AT 間歇性地無法正確處理資料/時間值。 相反地,它的工作方式更像 AFTER 條件。
如果您的程式碼依賴不正確的行為,則應將篩選條件切換為 AFTER.
陣列: INSTANCES 替換為 _instances: 0 無法正常運作
篩選條件 INSTANCES (在陣列/多值欄位上) _instances 設為0間歇性地無法如預期運作,它沒有傳回任何實際應傳回的位置。

受此問題影響的篩選器片段看起來會像這樣: doubleArray: { _expressions: { value: 0, _operator: GREATER, _apply: INSTANCES, _instances: 0 } }

如果您信賴錯誤行為,則需要重新寫入查詢,以傳回與之前相同的結果。

篩選片段
資料
中繼實作的結果
最終實作的結果
myArray: {
  運算式(_E): {
    值: 20
    _operator: EQUAL
    套用:執行個體(_A)
    執行個體(_I): 0
  }
}
[
  {
    myArray: null
  },
  {
    myArray: [ 10、20、30 ]
  },
  {
    myArray: [ 11、12、13 ]
  }
]
[ ]
[
  {
    myArray: null
  },
  {
    myArray: [ 11、12、13 ]
  }
]
recommendation-more-help
3d58f420-19b5-47a0-a122-5c9dab55ec7f