AEM: modifiche nella gestione GraphQL dei valori nulli
La prima modifica influisce sulle condizioni del filtro sfruttando CONTAINS_NOT
gli altri due riguardano nulle valori nelle condizioni del filtro in campi con più valori.
Descrizione description
Ambiente
Adobe Experience Manager (AEM) as a Cloud Service
Problema/Sintomi
Nella versione 2023.02.11382 di sono stati apportati alcuni miglioramenti all’implementazione di GraphQL (Open-Source Query Language) che potrebbero causare un comportamento imprevisto nel codice dell’applicazione, nel caso in cui si sia basato sul comportamento errato delle versioni precedenti. La risoluzione riportata di seguito consente di ottenere che Adobe Experience Manager (AEM) GraphQL ora restituisca contenuti con valori nulli in modo coerente in tutte le operazioni di filtro.
Risoluzione resolution
CONTAINS_NOT
e nulle valori
La prima modifica influisce sulle condizioni del filtro sfruttando CONTAINS_NOT
operatore. Nelle versioni precedenti, questo CONTAINS_NOT
non ha restituito frammenti di contenuto contenenti nulle valori nel campo a cui è stata applicata la condizione del filtro. Ciò non è coerente con operatori simili come EQUALS_NOT
o NOT_AT
.
Assicurati che l’applicazione client sia in grado di gestire nulle valori restituiti dall'AEM quando si utilizza CONTAINS_NOT
.
Esempio:
valore: "frag",
_op: CONTAINS_NOT
}
[
{
myField: null
},
{
myField: "Testo"
},
{
myField: "Frammento di testo"
}
]
[
{
myField: "Testo"
}
]
[
{
myField: null
},
{
myField: "Testo"
}
]
Applicare le modalità ALL_OR_EMPTY/ALL
e nulle valori
Un altro problema risolto in 2023.02.11382 è relativo a nulle valori nelle condizioni del filtro in campi con più valori. Modalità di applicazione ALL_OR_EMPTY
(su array/campi con più valori) non ha restituito frammenti con nulle per il campo in questione, quindi funzionava effettivamente come previsto per il ALL
metodo apply. Allo stesso tempo, filtrando un campo con più valori con la modalità di applicazione ALL
includerebbe frammenti con contenuto vuoto per quel campo, ma non dovrebbe. Si consiglia di verificare le query che utilizzano una di queste modalità di applicazione e di modificarle se non restituiscono più il set di risultati previsto nella versione 2023.02.11382.
Il problema esisteva solo per alcuni operatori (prima della versione 2023.02.11382).
Ad esempio: EQUALS_NOT
ha funzionato come previsto per il metodo di applicazione ALL_OR_EMPTY
, considerando che CONTAINS
non lo ha fatto.
Esempio:
_espressioni: {
valore: "1,3"
_operator: EQUALS_NOT
_applica: TUTTO
}
}
[
{
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" ]
}
]
_espressioni: {
valore: "2."
_operator: CONTAINS
_apply: ALL_OR_EMPTY
}
}
[
{
myArray
[
"2,1", "2,2", "2,3" ]
}
]
[
{
myArray: null
},
{
myArray
[
"2,1", "2,2", "2,3" ]
}
]
Modalità di applicazione: INSTANCES
, _instances: 0
e nulle valori
L’ultimo problema è relativo anche a nulle valori nelle condizioni del filtro in campi con più valori. Modalità di applicazione INSTANCES
con_instances: 0
non corrisponde ai frammenti di contenuto che contengono nulle valori nel rispettivo campo prima del 2023.02.11382, ma inizierà con 2023.02.11382. Si consiglia di testare le query che utilizzano questa costellazione e modificarle se non restituiscono più il set di risultati previsto in 2023.02.11382.
Esempio:
_espressioni: {
valore: "2."
_operator: CONTAINS
_applica: ISTANZE
_istanze: 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" ]
}
]
Miglioramenti che possono interessare i clienti con ft-sites-97
abilitato
Clienti che avevano ft-sites-97
(paginazione GraphQL e filtro ottimizzato) flag di funzione abilitato prima di 11382 dopo l’aggiornamento alla versione 2023.02.11382, potrebbe verificarsi una o più delle seguenti modifiche nel comportamento. I clienti per i quali non è abilitato questo flag di funzione non sono interessati da questa sezione.
gestione null con condizioni che verificano la non uguaglianza
Campi frammento con nulle i valori non corrispondevano in modo intermittente ai filtri che verificavano la non uguaglianza.
Se il codice si basa sul fatto che questi frammenti non vengono restituiti, dovrai regolare il codice per adattarlo al comportamento previsto.
valore: "Some text",
_op: EQUALS_NOT
}
[
{
myField: null
},
{
myField: "Testo"
},
{
myField: "Frammento di testo"
}
]
[
{
myField: "Testo"
}
]
[
{
myField: null
},
{
myField: "Testo"
}
]
Operatore filtro NOT_AT
con valori data/ora
Operatore filtro NOT_AT
non funzionava correttamente a intermittenza con i valori dati/ora. Invece, funzionava più come AFTER
condizione.
Se il codice si basa sul comportamento errato, è necessario impostare la condizione del filtro su AFTER
.
Array: INSTANCES
con _instances: 0
non funziona correttamente
Condizione filtro INSTANCES
su array/campi multivalore con _instances
impostato su 0 a intermittenza non ha funzionato come previsto, non ha restituito nulla dove dovrebbe essere in realtà.
I frammenti di filtro interessati da questo problema avranno un aspetto simile a: doubleArray: { _expressions: { value: 0, _operator: GREATER, _apply: INSTANCES, _instances: 0 } }
Se ci si affidava al comportamento errato, è necessario riscrivere la query per restituire gli stessi risultati di prima.
_espressioni: {
valore: 20
_operator: EQUAL
_applica: ISTANZE
_istanze: 0
}
}
[
{
myArray: null
},
{
myArray
[
10, 20, 30 ]
},
{
myArray
[
11, 12, 13 ]
}
]
[
]
[
{
myArray: null
},
{
myArray
[
11, 12, 13 ]
}
]