Volver al Blog
engineering||11 min de lectura

SAP Hybris Impex cuando nadie del equipo sabemos leerlo

AR
Aral Roca

Creador de Kitmul

Puesto de trabajo con código en pantalla y un desarrollador revisando un script Impex de SAP Hybris
Puesto de trabajo con código en pantalla y un desarrollador revisando un script Impex de SAP Hybris

Estoy como externo en un equipo que usa la Hybris Management Console, HMC para abreviar, para administrar un entorno de SAP Commerce. Cada pocos días el entorno compartido se refresca desde producción, que es exactamente lo que quieres para la mayor parte de los datos y exactamente lo que no quieres para las configuraciones a medio hacer que aún no han llegado a prod. Un tipo de contenido que registraste el martes, un ajuste de workflow del miércoles, un usuario de prueba para una demo: desaparecidos el viernes por la mañana. Todo el equipo ha pasado por este bucle las veces suficientes como para que ya no sorprenda a nadie.

Impex es la respuesta natural. Si describes un cambio de configuración como un fichero Impex, puedes reaplicarlo tras cada refresh, commitearlo en el repo, hacerle code review y tratarlo como el resto de la plataforma. Es el manual oficial y es la estrategia correcta.

El problema es más humano que técnico. Nadie del equipo lee Impex con fluidez. El formato es anterior a la mayoría de lenguajes que escribimos hoy, el tooling a su alrededor es escaso, y una pull request con sesenta líneas de texto separado por punto y coma no invita precisamente a una revisión cuidadosa. Así que la gente prefiere hacer los cambios desde HMC, asume que desaparecerán en unos días, y sigue adelante. Sabiendo que esto se arregla con herramientas, no con una sesión de formación, pasé una semana construyendo las ocho herramientas en el navegador de las que trata este post.

Qué es Impex, en un párrafo

Impex es un formato de scripting en texto plano que SAP Commerce usa para insertar, actualizar o eliminar filas en el sistema de tipos de la plataforma. Cada objeto Hybris — Product, Catalog, Category, PriceRow, User, Customer, Order — es un tipo definido en Java, e Impex es como se envían datos contra esos tipos sin escribir Java. Un fichero es una secuencia de "bloques", cada uno con una cabecera que declara modo y tipo (INSERT_UPDATE Product;code[unique=true];name) seguida de filas separadas por punto y coma (;P-0001;Mi Producto). Los comentarios empiezan con #. Las macros con $. Las rutas calificadoras van entre paréntesis: catalogVersion(catalog(id),version). La referencia oficial del intérprete Impex es la especificación autoritativa.

Ese es todo el lenguaje. Es realmente pequeño. Lo que lo hace difícil de leer no es la gramática: es que es un formato tabular mostrado en un editor de texto, sin columnas alineadas, sin resaltado de sintaxis, sin ninguna de las ayudas que querrías para revisar una hoja de cálculo.

Por qué HMC más un refresh periódico fuerza esta conversación

Hay un patrón recurrente en proyectos SAP Commerce: tienes un entorno tipo producción compartido entre producto, QA e ingeniería. Para mantenerlo cerca de la realidad, alguien programa un refresh desde producción — semanal, bisemanal, nocturno. Ese refresh no es negociable; es como se reproducen bugs. Pero significa que cada cambio de configuración que vive solo en HMC tiene vida media.

Hay tres salidas y solo una escala.

Opción uno: dejar de hacer el refresh. Divergencias inmediatas con producción, QA deja de encontrar bugs reales, el refresh vuelve, y has perdido un mes.

Opción dos: pedir a la gente que no toque HMC. Es un contrato social que dura un sprint. La herramienta está ahí, funciona, y hay deadlines.

Opción tres: cada cambio va a control de versiones como un fichero Impex y se reaplica tras cada refresh. Es la respuesta que la plataforma siempre quiso que eligieras. También es la que requiere que tu equipo esté cómodo leyendo y escribiendo Impex, que nos devuelve al principio del post.

Las ocho herramientas

Estantes de catálogo retail; Impex es la fontanería detrás de cada producto que ves en un storefront SAP Commerce
Estantes de catálogo retail; Impex es la fontanería detrás de cada producto que ves en un storefront SAP Commerce

Todo lo de abajo se ejecuta local en tu navegador. Nada se sube. El parser es un módulo TypeScript de ~550 líneas que maneja campos con comillas, puntos y coma escapados, continuaciones de línea, macros, bloques de modificadores y ficheros multi-bloque.

Editor de tablas Impex

Es la que hace el trabajo pesado en mi equipo. Pegas un bloque, obtienes una rejilla tipo hoja de cálculo, editas celdas in situ, añades o eliminas filas, copias el Impex regenerado. Cuando la persona que escribe el cambio no lee Impex pero sí lee Excel, esto es el puente. Es también la herramienta a la que recurro primero cuando tengo que hacer un cambio de diez filas sin scrollear entre punto y comas.

Si sólo recuerdas una cosa de este post, que sea el editor de tablas.

Convertidor Impex a CSV

Convierte cualquier bloque Impex en CSV, una cabecera por columna. Útil cuando alguien de contenido quiere ver el estado actual de una sección del catálogo en una hoja sin esperar a ingeniería.

Convertidor CSV a Impex

El reverso: un CSV (a menudo pegado desde Google Sheets) se convierte en script Impex, con el nombre de tipo y la columna única explícitos. La gente de producto puede redactar el cambio en Sheets, el ingeniero lo convierte y lo committea. El diff de revisión sigue siendo revisable.

Impex a JSON y JSON a Impex

JSON es la lingua franca de todo lo que no es Impex. Si scripteas una migración, generas Impex desde una fuente de verdad o diffeas dos versiones, una representación estructurada es más fácil que regexear punto y comas. Cada bloque se convierte en {mode, type, headers, rows}, las macros son ciudadanos de primera, y las dos herramientas hacen round-trip. Un botón de swap arriba permite alternar la dirección.

Validador / Linter Impex

Reporta nombres de tipo faltantes, modificadores desconocidos, claves únicas duplicadas, macros indefinidas y desajustes de conteo de columnas. Ninguno es exótico: son todos errores que el intérprete SAP aceptará y silenciosamente producirá un import malo. Añadirlo como check de CI sobre .impex es el cambio de mayor palanca que un equipo con Impex en version control puede hacer.

Expansor de macros Impex

Dado un fichero Impex con $macros, produce el mismo fichero con cada referencia inlineada. Expansión a punto fijo, así que macros que referencian macros se resuelven limpiamente. Esto es lo que commiteas como artefacto de auditoría. Los auditores no van a perseguir $macros por tu repo.

Impex a SQL (aproximado)

Hybris abstrae sobre la base de datos. A veces esa abstracción se rompe — un DBA pregunta qué se está escribiendo realmente, o estás razonando sobre rendimiento. Esta herramienta aplana Impex a INSERT / UPDATE / DELETE aproximados en Postgres, MySQL o ANSI estándar, con INSERT_UPDATE renderizado como ON CONFLICT / ON DUPLICATE KEY / MERGE según dialecto. Es explícitamente aproximado; rutas calificadoras como catalogVersion(catalog(id),version) no se pueden renderizar fielmente sin tu items.xml.

Laptop de un desarrollador con salida de terminal; la mayor parte del trabajo Impex ocurre en la frontera entre código y consola de plataforma
Laptop de un desarrollador con salida de terminal; la mayor parte del trabajo Impex ocurre en la frontera entre código y consola de plataforma

El workflow que estoy empujando en mi equipo

Versión corta, ordenada por ROI.

Impex va en los dos sentidos: guardas lo que hiciste en HMC como .impex, o editas .impex y lo importas para saltarte HMC. HMC es lento para configurar cosas; un formulario con veinte campos se vuelve tedioso a la tercera vez que lo tocas. Para configuraciones repetitivas o en lote, escribir el Impex directamente y lanzar el import es varias veces más rápido que clicar. Y lo que sí hayas tenido que hacer desde HMC, lo exportas a .impex para que sobreviva al próximo refresh.

Ediciones no triviales pasan por el Editor de tablas. Editor plano es aceptable para añadir una columna o flipear un flag. Para cualquier cosa con más de unas pocas filas, el editor de tablas es lo correcto y el editor plano no.

Pasar el Validador Impex antes de importar. Es el 90% del valor del tooling de este post. Detecta claves únicas duplicadas, modificadores desconocidos y macros sin definir antes de que el intérprete de SAP los acepte y produzca silenciosamente un import malo. Ahora mismo lo pasamos a mano sobre cada .impex antes de lanzar el import; no es perfecto, pero evita la mayoría de los sustos.

Diffs sobre JSON. Convierte ambas versiones a JSON con Impex a JSON y diffea eso. Los diffs fila a fila con punto y coma son ilegibles; los estructurados no.

Macros expandidas en artefactos de auditoría. Commitea la forma compacta. Cuando compliance pregunte qué hizo realmente el despliegue, entrega la versión expandida.

Qué sigue doliendo

No todo problema Impex tiene respuesta en el navegador.

La evolución del sistema de tipos es la grande. Cuando alguien renombra un campo en items.xml, cada fichero Impex que lo referenciaba empieza silenciosamente a escribir a la columna equivocada o a fallar de forma confusa. Ningún linter del navegador puede cazar esto sin acceso a tus definiciones de tipo. Un script local que recorra tus .impex y cruce atributos con el sistema de tipos actual merece un finde.

El rendimiento es la otra. Los imports Impex grandes se comportan distinto a cargas SQL masivas — el intérprete valida cada fila, dispara eventos de plataforma e invalida cachés. Si un import de un millón de filas tarda seis horas, la respuesta casi nunca es "afina la base de datos". Es "divide el fichero e importa en paralelo" o "desactiva el eviction de caché durante la carga". La documentación de rendimiento de SAP Commerce lo cubre bien.

Por qué construí esto y no otra cosa

La respuesta honesta: mi equipo (yo incluido) no iba a aprender a leer Impex leyendo más Impex. La documentación no lo arregló. Pair programming no lo arregló. La apuesta era que darle a alguien una UI de hoja de cálculo sobre un bloque Impex y decirle "edita esto como editarías cualquier otra cosa, la herramienta escribe el Impex por ti" bajara la barrera lo suficiente para que Impex pasara a ser un formato que el equipo trate como CSV: una representación de transporte que resulta ser lo que SAP Commerce quiere, no un lenguaje que tengan que dominar.

¿Va a funcionar? Aún no lo sé.

Quiero ser claro sobre dónde estoy con esto. Estas herramientas existen porque mi equipo está intentando responder una pregunta más grande: ¿puede configuración-como-código vía Impex sustituir al clicar por HMC, a largo plazo, para un equipo que no es fluido en Impex? Las herramientas son una apuesta por el "sí". No son una prueba.

Hay varias formas de que el experimento se caiga. Quizá el editor de tablas cubra el 80% de las ediciones pero el 20% restante —las que involucran rutas calificadoras anidadas, macros que referencian otros catálogos, sutilezas de modificadores— siga empujando a la gente de vuelta a HMC y la disciplina se erosione. Quizá escribir Impex sea la parte fácil y la difícil sea el pipeline de CI que realmente reaplica los scripts tras el refresh, que no es el tema de este post. Quizá el sistema de tipos evolucione más rápido de lo que el tooling pueda seguir y el validador empiece a producir ruido que la gente aprenda a ignorar. Cualquiera de estas cosas significaría que "infrastructure-as-code en HMC vía Impex" no es el marco adecuado y hace falta otra abstracción.

Escribiré un follow-up en unos meses cuando haya datos reales. O estas herramientas se vuelven el camino por defecto y configuración-como-código funciona como SAP siempre quiso, o aprendemos algo interesante de por qué no, y eso también es su propio post. No tengo una intuición fuerte hacia ningún lado.

Si corres SAP Commerce con el mismo setup de HMC + refresh y quieres probar algo parecido, las herramientas son gratis, locales, y seguirán funcionando independientemente de a qué conclusión llegue yo. Guárdate las que encajen con tu flujo. Si acabas con datos propios —positivos o negativos— me gustaría escucharlos.

Para contexto del ecosistema: la documentación de SAP Help sobre ImpEx es la referencia canónica, los foros de comunidad de SAP Commerce son mejor sitio que Stack Overflow para cosas específicas de versión, y el Magic Quadrant de Gartner para Digital Commerce cubre dónde encaja SAP Commerce en el panorama de ecommerce empresarial.

Más en unos meses.

Comparte este artículo

Boletín

Recibe Consejos de Productividad y Nuevas Herramientas Primero

Únete a creadores y desarrolladores que valoran la privacidad. En cada edición: nuevas herramientas, trucos de productividad y novedades — sin spam.

Acceso prioritario a nuevas herramientas
Cancela en cualquier momento, sin preguntas