AEM: Cambios en la administración de valores nulos en GraphQL

El primer cambio afecta a las condiciones de filtro que aprovechan el CONTAINS_NOT operador, los otros dos se refieren a  null  valores en condiciones de filtro en campos de varios valores.

Descripción description

Entorno
Adobe Experience Manager AEM () as a Cloud Service

Problema/Síntomas
En la versión 2023.02.11382 de, se han realizado algunas mejoras en la implementación de GraphQL (Open-Source Query Language) que podrían provocar un comportamiento inesperado en el código de la aplicación, en caso de que se basara en el comportamiento erróneo de las versiones anteriores. La siguiente resolución ayuda a lograr que Adobe Experience Manager AEM () GraphQL ahora devuelva contenido con valores nulos de forma coherente en todas las operaciones de filtrado.

Resolución resolution

CONTAINS_NOT y null values

El primer cambio afecta a las condiciones de filtro que aprovechan el CONTAINS_NOT operador. En versiones anteriores, esto CONTAINS_NOT no devolvieron fragmentos de contenido que contenían null valores en el campo al que se aplicó la condición de filtro. Esto no es coherente con operadores similares como EQUALS_NOT o NOT_AT.
Asegúrese de que la aplicación cliente pueda gestionar lo siguiente null AEM valores devueltos por los usuarios al utilizar el valor de tipo CONTAINS_NOT.

Ejemplo:

Filtrar fragmento
Datos
Resultado antes del 2023.02.11382
Resultado a partir de 2023.02.11382
myField: {
    value: "frag",
    _op: CONTAINS_NOT
}
[
    {
        myField: null
    },
    {
        myField: "Some text"
    },
    {
        myField: "Text fragment"
    }
]
[
    {
        myField: "Some text"
    }
]
[
    {
        myField: null
    },
    {
        myField: "Some text"
    }
]

Aplicar modos ALL_OR_EMPTY/ALLnull  values
Otro problema corregido en 2023.02.11382 está relacionado con  null  valores en condiciones de filtro en campos de varios valores. Modo de aplicación ALL_OR_EMPTY (en matrices/campos de varios valores) no devolvía fragmentos con  null  para el campo en cuestión, por lo que funcionaba como cabría esperar para el ALL método apply. Al mismo tiempo, filtrar un campo de varios valores con el modo de aplicación ALL incluiría fragmentos con contenido vacío para ese campo, pero no debería. Se recomienda probar las consultas que utilizan uno de estos modos de aplicación y cambiarlas si ya no devuelven el conjunto de resultados esperado en 2023.02.11382.

Tenga en cuenta que el problema solo existía para algunos operadores (anterior a 2023.02.11382).
Por ejemplo: EQUALS_NOT funcionó según lo esperado para el método de aplicación ALL_OR_EMPTY, mientras que CONTAINS no lo hizo.
Ejemplo:

Filtrar fragmento
Datos
Resultado antes del 2023.02.11382
Resultado a partir de 2023.02.11382
myArray: {
  _expresiones: {
    valor: 1,3
    _operator: EQUALS_NOT
    _aplicar: TODO
  }
}
[
  {
    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: {
  _expresiones: {
    valor: 2.
    _operator: CONTIENE
    _apply: ALL_OR_EMPTY
  }
}
[
  {
    myArray: [ "2,1", "2,2", "2,3" ]
  }
]
[
  {
    myArray: null
  },
  {
    myArray: [ "2,1", "2,2", "2,3" ]
  }
]

Aplicar modos: INSTANCES, _instances: 0 y  null  values
El último problema también está relacionado con  null  valores en condiciones de filtro en campos de varios valores. Modo de aplicación INSTANCES con_instances: 0 no coinciden con los fragmentos de contenido que contienen  null  valores en el campo respectivo antes del 2023.02.11382, pero empezará con el 2023.02.11382. Se recomienda probar las consultas que utilizan esta constelación y cambiarlas si ya no devuelven el conjunto de resultados esperado en 2023.02.11382.
Ejemplo:

Filtrar fragmento
Datos
Resultado antes del 2023.02.11382
Resultado a partir de 2023.02.11382
myArray: {
  _expresiones: {
    valor: 2.
    _operator: CONTIENE
    _apply: INSTANCES
    _instancias: 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" ]
  }
]

Mejoras que pueden afectar a los clientes con ft-sites-97 activado
Clientes que tenían el ft-sites-97(paginación de GraphQL y filtrado optimizado)  indicador de funcionalidad habilitado  antes la versión 2023.02.11382 puede experimentar uno o más de los siguientes cambios en el comportamiento después de actualizar a 2023.02.11382. Los clientes que no tengan habilitado este indicador de funcionalidad no se ven afectados por esta sección.
tratamiento nulo con condiciones que comprueban la no igualdad
Campos de fragmento con  null  Los valores de no coincidían intermitentemente con los filtros que comprobaban la no igualdad.

Si el código depende de que no se devuelvan estos fragmentos, deberá ajustarlo para adaptarlo al comportamiento esperado.

Filtrar fragmento
Datos
Resultado de la implementación intermedia
Resultado de la implementación final
myField: {
  value: "Some text",
  _op: EQUALS_NOT
}
[
  {
    myField: null
  },
  {
    myField: "Some text"
  },
  {
    myField: "Text fragment"
  }
]
[
  {
    myField: "Some text"
  }
]
[
  {
    myField: null
  },
  {
    myField: "Some text"
  }
]

Operador de filtro NOT_AT con valores de fecha y hora
Operador de filtro NOT_AT no funcionaba correctamente de forma intermitente con valores de fecha y hora. En cambio, funcionaba más como el AFTER condición.
Si el código se basa en un comportamiento incorrecto, debe cambiar la condición de filtro a AFTER.
Matrices: INSTANCES con _instances: 0 no funciona correctamente
Condición de filtro INSTANCES (en matrices/campos multivalor) con _instances establecido en 0 intermitentemente no funcionó como se esperaba, no devolvió nada donde realmente debería haber.

Los fragmentos de filtro afectados por este problema tendrían el siguiente aspecto: doubleArray: { _expressions: { value: 0, _operator: GREATER, _apply: INSTANCES, _instances: 0 } }

Si confía en el comportamiento erróneo, debe reescribir la consulta para devolver los mismos resultados que antes.

Filtrar fragmento
Datos
Resultado de la implementación intermedia
Resultado de la implementación final
myArray: {
  _expresiones: {
    valor: 20
    _operator: EQUAL
    _apply: INSTANCES
    _instancias: 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