El siguiente artículo se basa en la versión 2205.0 de SAP Commerce Cloud. Antes de aplicar esta solución a un proyecto, verifica si una versión o parche posterior de SAP Commerce soluciona el problema mencionado a continuación.

El problema

Por lo general, la Consola de Administración de Hybris (hAC de sus siglas en inglés) permite importar datos del proyecto (lo que generalmente significa cargar archivos ImpEx relevantes). Para hacer esto hay que ir a Plataform -> Update, luego seleccionar las casillas de verificación de las extensiones que se deseen importar y finalmente haciendo clic en el botón de Update.

hac Project Data settings

Sin embargo, en la versión 2205.0 de SAP Commerce, notarás que las casillas de verificación seleccionadas se ignoran y no se importan los datos del proyecto. Este artículo explica la razón por la que esto sucede y propone una solución.

El diagnóstico

Para entender por qué sucede esto, primero, necesitamos saber cómo se carga y se procesa la lista de extensiones cuando accede a la sección Update del hAC. Se carga un archivo JavaScript llamado init.js cuando se accede a la página de Update. El archivo se encuentra en el módulo web de la extensión hAC (hybris/bin/platform/ext/hac/web/webroot/static/js/platform/init.js).

Cuando el DOM está listo, se ejecuta una función llamada loadData, que realiza una llamada Ajax a la URL /hac/platform/init/data. Esta llamada es manejada por el controlador InitUpdateController (método initData), que devuelve JSON payload que contiene la lista de todas las extensiones instaladas. El problema surge cuando el archivo init.js procesa ese payload en el success handler de la llamada Ajax.

Cada uno de los elementos de project data recibidos se pasan a la siguiente función:

Copiar al portapapeles

El objetivo de esa función es crear un checkbox para cada una de las extensiones recibidas para que la interfaz de usuario se vea como la imagen al comienzo de este artículo.

Sin embargo, si inspeccionamos el código HTML generado, veremos que las entradas creadas no tienen un id:

Copiar al portapapeles

Mientras que la siguiente línea tiene la intención de agregar un id que se lea como extensionName_sample:

Copiar al portapapeles

El error se debe al mal uso de la API de jQuery para crear nuevos elementos. Según la documentación de jQuery, en la versión 1.4 se introduce una función para la creación de nuevos elementos HTML, que acepta como segundo argumento un objeto que contiene los diferentes atributos del elemento HTML a crear. Sin embargo, "si se pasa el segundo argumento, el HTML string en el primer argumento debe representar un elemento simple sin atributos". En este caso, el primer argumento contiene un atributo (tipo = "checkbox"), por lo que el segundo argumento se ignorará y la identificación no se agregará al checkbox creado.

Cuando se hace clic en el botón Update, se llama a la función prepareInitUpdateData para recopilar las checkboxes seleccionadas que indican la lista de extensiones para actualizar. Como vemos se recoge el atributo id de cada elemento, que en este caso estará vacío:

Copiar al portapapeles

Luego, los datos recopilados se envían a través de Ajax a la URL /hac/platform/init/execute y los recibe el controlador InitUpdateController (método initExecuteWrap), que no puede identificar las extensiones seleccionadas porque se recibe una cadena vacía en lugar de la identificación adecuada.

Corrección sugerida

El comando "ant customize" se puede ejecutar en la carpeta de la plataforma Hybris para anular los archivos de las extensiones OOTB (Out-Of-The-Box) de SAP Commerce con sus archivos personalizados. Este comando copia recursivamente todos los archivos de la carpeta config/customize a la carpeta bin. Por lo general, se usa para proporcionar parches sobre las extensiones estándar de SAP Commerce de una manera que se puede integrar fácilmente con su proceso de implementación.

Esto es un bug temporal en la extensión hybris Administration Console de SAP Commerce que se modificará en versiones futuras. Es por esta razón, que una solución de bajo esfuerzo consiste en copiar el archivo init.js en la carpeta customize para que pueda corregir el código y sobreescribir el archivo OOTB cuando se ejecute "ant customize".

Para eso, primero hay que ir a la carpeta de customize (hybris/config/customize) y crear la siguiente estructura de carpetas: plataforma/ext/hac/web/webroot/static/js/platform/

Luego hay que copiar el archivo init.js desde la ubicación OOTB (hybris/bin/platform/ext/hac/web/webroot/static/js/platform/init.js) a la carpeta recién creada.

Después de eso, editar el archivo init.js y cambiar la siguiente línea de la función renderProjectDataUI...

Copiar al portapapeles

... por la siguiente línea:

Copiar al portapapeles

Además, para tener un archivo totalmente correcto, cambia esta línea...

Copiar al portapapeles

... por la siguiente línea:

Copiar al portapapeles

Finalmente, ya podemos ejecutar el comando "ant customize", iniciar el servidor y verificar que los datos del proyecto se puedan importar como se espera. Es posible que haya que borrar la caché del navegador para forzar la descarga del nuevo archivo js.

Un detalle a tener en cuenta es que la solución sugerida anteriormente es válida para entornos de desarrollo e implementaciones on-premise o versiones previas del cloud en las que tiene control sobre el proceso de compilación, como CCV1. Estos entornos permiten ejecutar el comando "ant customize".

¿Aún necesitas ayuda?

Si tú o tu equipo necesitáis una mano con un proyecto de SAP Commerce, desde E-Turia siempre estamos encantados de ayudar. Puedes comunicarte con nosotros directamente o ver los servicios de SAP Commerce Cloud que ofrecemos:

View SAP Commerce Services
Contacto

Comparte este artículo