Miljö
Experience Manager as a Cloud Service
Problem/symtom
I version 2023.02.11382 har vissa förbättringar gjorts i implementeringen av GraphQL (Open-Source Query Language) som kan orsaka oväntade beteenden i programkoden, om den förlitade sig på det felaktiga beteendet i de äldre versionerna. Upplösningen nedan gör att Adobe Experience Manager (AEM) GraphQL nu returnerar innehåll med null-värden på ett konsekvent sätt för alla filteråtgärder.
CONTAINS_NOT
och null values
Den första ändringen påverkar filtervillkoren som använder CONTAINS_NOT
-operator. I tidigare versioner CONTAINS_NOT
returnerade inte innehållsfragment som innehåller null värden i fältet som filtervillkoret tillämpades på. Detta är inkonsekvent med liknande operatorer som EQUALS_NOT
eller NOT_AT
.
Kontrollera att klientprogrammet kan hantera null värden som returneras av AEM när de använder CONTAINS_NOT
.
Exempel:
Filterfragment | Data | Resultat före 2023.02.11382 | Resultat från och med 2023.02.11382 |
---|---|---|---|
myField: { värde: "frag", _op: CONTAINS_NOT } |
[ { myField: null }, { myField: "Viss text" }, { myField: "Textfragment" } ] |
[ { myField: "Viss text" } ] |
[ { myField: null }, { myField: "Viss text" } ] |
Använd lägen ALL_OR_EMPTY/ALL
och null values
Ett annat problem som korrigerades 2023.02.11382 har att göra med null värden i filtervillkor i flervärdesfält. Läget Använd ALL_OR_EMPTY
(på matriser/fält med flera värden) returnerade inte fragment med null värden för fältet i fråga, därför fungerade det som du förväntade dig för ALL
använd metod. Filtrera samtidigt ett flervärdesfält med tillämpningsläge ALL
skulle innehålla fragment med tomt innehåll för det fältet, men det borde inte det. Vi rekommenderar att du testar frågor som använder något av dessa tillämpningslägen och ändrar dem om de inte längre returnerar det förväntade resultatet som angavs i 2023.02.11382.
Observera att problemet bara fanns för vissa operatorer (före 2023.02.11382).
Till exempel: EQUALS_NOT
fungerade som förväntat för tillämpningsmetoden ALL_OR_EMPTY
, medan CONTAINS
inte.
Exempel:
Filterfragment | Data | Resultat före 2023.02.11382 | Resultat från och med 2023.02.11382 |
---|---|---|---|
myArray: { _uttryck: { värde: "1.3" _operator: EQUALS_NOT _använd: ALLA } } |
[ { 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: { _uttryck: { värde: "2." _operator: INNEHÅLLER _använd: ALL_OR_EMPTY } } |
[ { myArray: [ "2.1", "2.2", "2.3" ] } ] |
[ { myArray: null }, { myArray: [ "2.1", "2.2", "2.3" ] } ] |
Använd lägen: INSTANCES
, _instances: 0
och null values
Den sista utgåvan är också relaterad till null värden i filtervillkor i flervärdesfält. Läget Använd INSTANCES
med_instances: 0
matchar inte innehållsfragmenten som innehåller null värden i respektive fält före 2023.02.11382, men börjar med 2023.02.11382. Vi rekommenderar att du testar frågor som använder den här konstellationen och ändrar dem om de inte returnerar det förväntade resultatet som angavs i 2023.02.11382 längre.
Exempel:
Filterfragment | Data | Resultat före 2023.02.11382 | Resultat från och med 2023.02.11382 |
---|---|---|---|
myArray: { _uttryck: { värde: "2." _operator: INNEHÅLLER _använd: INSTANSER _instanser: 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" ] } ] |
Förbättringar som kan påverka kunder med ft-sites-97
aktiverad
Kunder som hade ft-sites-97
(GraphQL paginering och optimerad filtrering) funktionsflagga aktiverad föreversion 2023.02.11382 kan uppleva en eller flera av följande beteendeförändringar efter uppgradering till 2023.02.11382. Kunder som inte har den här funktionsflaggan aktiverad påverkas inte av det här avsnittet.
null-hantering med villkor som söker efter icke-likhet
Fragmentfält med null värden matchades inte ibland av de filter som kontrollerar om de inte är lika.
Om koden är beroende av att dessa fragment inte returneras måste du justera koden så att den passar det förväntade beteendet.
Filterfragment | Data | Resultat från mellanliggande implementering | Resultat från slutlig implementering |
---|---|---|---|
myField: { värde: "Some text", _op: EQUALS_NOT } |
[ { myField: null }, { myField: "Viss text" }, { myField: "Textfragment" } ] |
[ { myField: "Viss text" } ] |
[ { myField: null }, { myField: "Viss text" } ] |
Filteroperator NOT_AT
med datum/tid-värden
Filteroperator NOT_AT
ibland inte fungerade korrekt med data/tidpunkter-värden. Istället fungerade det mer som AFTER
villkor.
Om koden använder fel beteende bör du växla filtervillkoret till AFTER
.
Arrayer: INSTANCES
med _instances: 0
fungerar inte korrekt
Filtervillkor INSTANCES
(på arrayer/flervärdesfält) med _instances
med värdet 0 ibland fungerade inte som förväntat, det returnerade ingenting där det faktiskt borde ha varit.
Filterfragment som påverkas av det här problemet ser ut så här: doubleArray: { _expressions: { value: 0, _operator: GREATER, _apply: INSTANCES, _instances: 0 } }
Om du förlitar dig på det felaktiga beteendet måste du skriva om frågan för att returnera samma resultat som tidigare.
Filterfragment | Data | Resultat från mellanliggande implementering | Resultat från slutlig implementering |
---|---|---|---|
myArray: { _uttryck: { värde: 20 _operator: LIKA _använd: INSTANSER _instanser: 0 } } |
[ { myArray: null }, { myArray: [ 10, 20, 30 ] }, { myArray: [ 11, 12, 13 ] } ] |
[ ] |
[ { myArray: null }, { myArray: [ 11, 12, 13 ] } ] |