Daniel López Azaña

Tema

Social Media

Blog

GNU/Linux, Open Source, Cloud Computing, DevOps y más...

Error de SugarCRM en búsquedas de tareas relacionadas con módulos personalizados con guiones bajos en su nombre

sugarcrm-logo-100068038-large

Cuando creamos un módulo personalizado en SugarCRM (por ejemplo «grt_Contratos_Proveedores») y creamos una relación entre dicho módulo y uno que emplee el tipo de campo «Relacionado con» o «Related to» , como por ejemplo el módulo «Tareas» o «Tasks», querremos probablemente poder buscar todas las tareas relacionadas con nuestro nuevo módulo «grt_Contratos_Proveedores» desde el formulario de búsqueda simple o avanzada de «Tareas».

Bien, pues existe un bug en SugarCRM que impide que se muestren tareas relacionadas con un módulo personalizado si en el nombre de dicho módulo hay guiones bajos (_) , mostrándose el siguiente error fatal:

mod_fcgid: stderr: PHP Fatal error: require_once(): Failed opening required '' (include_path='/var/www/vhosts/daniloaz.com/subdomains/sugarcrm64/include/..:.:') in /var/www/vhosts/daniloaz.com/subdomains/sugarcrm64/data/SugarBean.php on line 3185, referer: https://sugarcrm64.daniloaz.com/index.php?module=Tasks&action=index

Origen del problema

Esto es así porque para construir la cláusula WHERE de la sentencia SQL que genera el formulario de búsqueda, en el caso de los tipos de campo «Related to» nativos de SugarCRM se obtienen las dos entidades o módulos relacionados entre sí mediante una expresión regular defectuosa que aparece unas pocas líneas antes de la línea 3185 del fichero data/SugarBean.php y que no tiene en consideración los guiones bajos que puedan aparecer en el nombre de dichas entidades relacionadas:

$match = preg_match('/(^|[\s(])parent_(\w+)_(\w+)\.name/', $where, $matches);

Así, en el caso de nuestro módulo «grt_Contratos_Proveedores», jamás se podrá obtener un resultado de búsqueda satisfactorio porque el nombre de módulo que toma SugarCRM a partir de la expresión regular es «grt_Contratos_Proveedores_grt» en lugar de «grt_Contratos_Proveedores». Esto provoca que cuando se procede a ejecutar la línea de código 3185, «require_once($beanFiles[$beanList[$joinModule]])», el script falle mostrando un error fatal porque la variable $joinModule no tiene el valor correcto y jamás encuentra el módulo «grt_Contratos_Proveedores_grt» en la lista de módulos presentes en la instancia de SugarCRM, y que es recogida por la variable $beanList.

Como nota aclaratoria, el prefijo grt_ es una clave que siempre añado al nombre de un nuevo módulo personalizado que indica el cliente para el cual estoy desarrollando dicho módulo, de forma que sea único y no se creen interferencias con otros posibles módulos personalizados de terceros.

Solución

La solución a este defecto es sencilla una vez se conoce el origen del problema, y consiste en modificar la expresión regular errónea así:

if (!strstr($where, 'grt_'))
    $match = preg_match('/(^|[\s(])parent_(\w+)_(\w+)\.name/', $where, $matches);
else
    $match = preg_match('/(^|[\s(])parent_(grt_\w+)_(grt_\w+)\.name/', $where, $matches);

Un vez hecho esto habrá quedado solucionado el problema, y podremos realizar búsquedas de tareas relacionadas con nuestro nuevo módulo sin problemas.

SugarCRM
Daniel López Azaña

Sobre el autor

Daniel López Azaña

Emprendedor tecnológico y arquitecto cloud con más de 20 años de experiencia transformando infraestructuras y automatizando procesos.

Especialista en integración de IA/LLM, desarrollo con Rust y Python, y arquitectura AWS & GCP. Mente inquieta, generador de ideas y apasionado por la innovación tecnológica y la IA.

Artículos relacionados

plesk_8_3

ERROR: PleskFatalException – Unable to connect to database: saved admin password is incorrect.

Tras contratar un nuevo servidor VPS a mi proveedor de alojamiento, he comprobado que mi acceso al panel de control Plesk funcionaba correctamente, pero no podía acceder a MySQL con el usuario admin y la misma contraseña de Plesk, por lo que no podía hacer nada con la base de datos desde la línea de comandos. Así, me he decidido a cambiar manualmente la contraseña del usuario admin a través del intérprete de comandos mysql. Tras hacer el cambio podía acceder perfectamente a MySQL, pero sin embargo el panel de control de Plesk ha dejado de funcionar, lanzando la siguiente excepción:

1 de julio de 2012
PHP logo

Busco programadores/as PHP freelance

Busco programadores/as PHP freelance con iniciativa y espíritu emprendedor que me ayuden, por un lado, a absorber el excedente de proyectos que me solicitan mis clientes y que no puedo asumir por falta de tiempo. Pero por otro lado, y no menos importante, me gustaría encontrar gente de confianza con la que formar un equipo sólido para emprender y desarrollar distintos proyectos que tengo en mente y también otros que me puedan proponer.

1 de agosto de 2012
JAMstack Architecture - JavaScript APIs Markup

¿Qué es JAMstack? Arquitectura moderna para sitios web ultra-rápidos

Descubre cómo JAMstack revoluciona el desarrollo web con sitios estáticos pre-generados servidos desde CDN global. Velocidad excepcional, seguridad mejorada, escalabilidad ilimitada y costes mínimos de hosting comparados con CMS tradicionales.

3 de noviembre de 2025

Comentarios

Sé el primero en comentar

Enviar comentario