Relacion entre dos módulos

Hola ¿cómo están?
Estoy teniendo problemas a la hora de relacionar dos módulos. Probé de distintas maneras:
Por un lado, estoy recibiendo el ID grabado de un módulo, llamémoslo módulo X.
Por el otro lado, tengo el módulo Y.

$idModuleX = $beanModuleX->save();
crearBeanModuleY($idModuleX);

Esta fue una forma:

function crearBeanModuleY($idModuleX){
$beanModuleY = BeanFactory::newBean('ModuleY');
$beanModuleY->name = 'Test';
$beanModuleY->moduleX_id_c = $idModuleX;
}

Siguiendo la documentación de SuiteCRM, también intenté de esta forma:

function crearBeanModuleY($idModuleX){
$beanModuleY = BeanFactory::newBean('ModuleY');
$beanModuleY->name = 'Test';
$IdModuleY = $beanModuleY->save();

$beanModuleY = BeanFactory::getBean('ModuleY', 'IdModuleY');
$beanModuleX = BeanFactory::getBean('ModuleX', 'IdModuleX');

$beanModuleY->load_relationship('module_x_relation_name');
$beanModuleY->module_x_relation_name->add($beanModuleX);

Ninguna de las dos tuvo efecto, el registro se crea pero no así la relación.

Edit:
También probé modificando desde la base de datos, el registro del módulo, sumandole a la columna ‘modulo_relacionado_id_c’ el numero de ID del bean a relacionar, y tampoco se ve en el CRM.

Espero sus comentarios, gracias!

La única forma es agregar los IDs a la tabla: moduloY_moduloX_1_c.

¿Por qué no se crea automáticamente cuando ingreso el ID a la tabla del móduloY?

Primero debes averiguar el nombre real de la relación. Esto lo puedes hacer desde estudio y al ver las relaciones, te da el nombre exacto.

Luego, para poder agregar la relación, debes asegurarte que tienes los IDs necesarios. También es necesario que te asegures que tengas abierto el record que origina la relación. Si, la relación es originada desde el modulo secundario, primero abrir el record con algo como esto:

			// Opening the record from external module
		require_once('modules/AOS_Products/AOS_Products.php'); // required because its a different module				
		$prod = new AOS_Products();
		$prod->retrieve($bean->aos_products_id_c); //Load a specific the related product

Ahora agregamos la relación:

usar un código como este:

		$rel = 'accounts_aos_products_1'; // name of relationship
		$newAccount->load_relationship($rel); // Loading the relationship
		$newAccount->$rel->add($bean->aos_products_id_c);		// Adding the record to the relationship

Algo más a tomar en cuenta es que si creas la relación dentro de una función, pueda ser que la función no tiene acceso a los datos requeridos. Para solucionar eso, ya sea que envies los datos en tu llamada de la funció, con algo como esto:

llamadaFunciónX(dato1, dato2, dato3......)

La otra opción es volver a abrir los records dentro de la función.

Hola Broz, gracias por la respuesta.
Tenía problemas de relaciones en mi instancia de testing, por lo que encontraba mas de 1 relacion con el mismo nombre y me tiraba error.

La solución fue crear un módulo nuevo con las relaciones correctas, y tal como decís, cargarlas con el load_relationship y luego agregarlas.

Gracias!

1 Like