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:

Frammento filtro
Dati
Risultato prima del 2023.02.11382
Risultato a partire dal 2023.02.11382
myField: {
    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/ALLnulle  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:

Frammento filtro
Dati
Risultato prima del 2023.02.11382
Risultato a partire dal 2023.02.11382
myArray: {
  _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" ]
  }
]
myArray: {
  _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:

Frammento filtro
Dati
Risultato prima del 2023.02.11382
Risultato a partire dal 2023.02.11382
myArray: {
  _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.

Frammento filtro
Dati
Risultato dell'attuazione intermedia
Risultato dell'attuazione finale
myField: {
  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.

Frammento filtro
Dati
Risultato dell'attuazione intermedia
Risultato dell'attuazione finale
myArray: {
  _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 ]
  }
]
recommendation-more-help
3d58f420-19b5-47a0-a122-5c9dab55ec7f