Registrado: ene. 2011
Mensajes: 17
Estado: Desconectado Ultima visita: 26.01.11
Saludos.
Tengo un campo “Lista Desplegable” con dos estados, Activo e Inactivo, en el modulo de “Proyectos”, y el modulo de proyectos lo he relacionado con el modulo el modulo de “Cuentas” Una relación de uno a muchos, una Cuenta puede tener muchos Poryectos.
Ahora requiero realizar una actualizacion de un campo en el modulo “Cuentas”, dependiendo de si existen proyectos relacionados con estado Activo o Inactivo, o sea si existe por lo menos un proyecto relacionado en estado activo pues el campo en “cuentas” se debe actualizar a “activo” caso contrario “Inactivo”. Entiendo que esto se puede realizr por medo de Logics Hooks, por lo cual el dia de hoy he iniciado con este tema, por el momento solo quiero ver que me actualice un campo en X modulo, asignándole Y valor, la lógica de si existen Proyectos en tal o cual estado no la he abordado aun. Pero aun realizando lo que seria de menor complejidad no me funciona.
Esta es la especificación d elo que he realizado para el Logics Hooks:
-primero he creado dos campos en cada modulo, en “Proyecto” el campo “estados_c” una lista desplegable con valores (activo,inactivo,terminado). En “Cuenta” he creado el campo “estado_cuenta_c” a falta de un tipo de campo etiqueta, es un campo de texto, que despues desabhilitaria, para que solo tome el estado del Logics Hooks.
En el directorio de “proyecto”
Carpeta de publicacion\SugarCRM\custom\modules\Project
He creado el archivo logic_hooks.php el cual no existía, y tiene lo siguiente.
if(!defined('sugarEntry') || !sugarEntry) die('Not A Valid Entry Point');
class Project_Hook {
function cambiar_estado(&$bean, $event, $arguments)
{
$bean->estado_cuenta_c = $bean->estados_c;
}
}
?>
Tengo dos preguntas, la primera es en relación a un error que muestra el siguiente error:
Warning: require_once(../../../data/SugarBean.php) [function.require-once]: failed to open stream: No such file or directory in C:\AppServ\www\SugarCRM\custom\modules\Project\Project_Hook.php on line 3
Fatal error: require_once() [function.require]: Failed opening required '../../../data/SugarBean.php' (include_path='C:\AppServ\www\SugarCRM\include/..;.;C:\php5\pear') in C:\AppServ\www\SugarCRM\custom\modules\Project\Project_Hook.php on line 3
Ahora no entiendo porque me muestra este error que no encuentra el SugarBeam.php si esta bien, si me encuentro en el directorio .
C:\AppServ\www\SugarCRM\custom\modules\Project
Y SugarBean.php se encuentra en.
C:\AppServ\www\SugarCRM\data\SugarBean.php
Para alcanzarlo seria correcto. No entiendo ele error.
require_once("../../../data/SugarBean.php");
La segunda pregunta es si la implementación del logic_hooks es correcta. Gracias.
Registrado: ene. 2010
Mensajes: 162
Estado: Desconectado Ultima visita: 15.05.12
Hola andres22, la falla que estás teniendo es porque siempre trabajas en el index.php que se encuentra en la raíz de la instancia de SugarCRM, por ejemplo, para crear una Cuenta, fijate que la URL es la siguiente: http://SERIDOR/sugarcrm/index.php?module=Accounts&action=EditView, lo que va cambiando es el action y el module, por lo que si quieres hacer un require de tu archivo, debes hacer: require_once("data/SugarBean.php");
Por otro lado, no necesitas hacer un include de ese archivo para trabajar en logic_hooks, ya que el bean fue creado, instanciado y hasta completado sus valores.
La implementación es correcta del código, lo que te sugiero que puedes hacer, en la función cambiar_estado es hacer un die("Pasa por aqui"); Si ves el mensaje al guardar un registro, es porque funciona Ok, de lo contrario, consulta la developer guide de tu versión de SugarCRM.
Saludos,
Cualquier inquietud, no dejes de contactarme.
Saludos,
Registrado: ene. 2011
Mensajes: 17
Estado: Desconectado Ultima visita: 26.01.11
Amigo efectivamente eso era, ya no me muestra error.
Pero al crear un nuevo "proyecto" con un estado del campo desplegable y asociarlo a una "cuenta" existente, no se evidencia la actualización del campo en "cuentas", al revisar por debajo su valor es Null, o sea el logic_hook no esta haciendo nada.
Tampoco veo el mensaje. En que momento se supone que se ejecuta lo que se encuentra en la funcion, porque yo simplemente estoy creando un nuevo proyecto y le doy un estado, y al guardar el proyecto esperaria que se actualice el campo en "cuenta"... o no funciona de esa manera?
Al final he dejado el Project_Hook.php como va.
<?
require_once('data/SugarBean.php');
if(!defined('sugarEntry') || !sugarEntry) die('Pasa por aqui');
class Project_Hook {
function cambiar_estado(&$bean, $event, $arguments)
{
Registrado: ene. 2010
Mensajes: 162
Estado: Desconectado Ultima visita: 15.05.12
Andres, aclaremos un poco la situación:
En la definición del Logic Hook: $hook_array['before_save'][] estás declarando que se ejecute antes de guardar el registro, lo cual está bién.
Por otro lado, el mensaje que te sugería que pongas para ver si está funcionando bién el logic_hook lo pusiste mal, ponelo así:
class Project_Hook {
function cambiar_estado(&$bean, $event, $arguments)
{
//$bean->estado_cuenta_c = $bean->estados_c;
die("Entra en Logic_Hook");
}
}
?>
Ahora, con ese código, prueba si te funciona, en caso de que si, estás bien encaminado, de lo contrario, avisame.
Bién, supongamos que funciona el logic_hook y pasa por donde queremos que pase.
Tu objeto $bean contiene toda la información del registro que estás guardando, por lo que, navegando el objeto deberías encontrar el Id de la Cuenta que tiene relacionado.
Para ver cual es el campo que contiene dicho Id, puedes poner en tu función
Paso siguiente, una vez identificado el campo que contiene el Id de la Cuenta, es mostrarlo por pantalla, por lo que debes reemplazar:
print "
";
print_r($bean);
print "
";
die();
por
print "Cuenta Asociada al Proyecto: ".$bean->CAMPO_ACCOUNT_ID
Ahora bien, cuando llegues a este punto avisame y seguimos con el tutorial :D
Saludos,
Cualquier inquietud, no dejes de contactarme.
Saludos,
Registrado: ene. 2011
Mensajes: 17
Estado: Desconectado Ultima visita: 26.01.11
Gracias por tu ayuda en verdad. Efectivamente esta entrando, me muestra el mensaje. Estoy imprimiendo el objeto, pero bota toda la información. identifico el campo id de la cuenta como el siguiente.
Registrado: ene. 2011
Mensajes: 17
Estado: Desconectado Ultima visita: 26.01.11
Ok amigo, ya l cambie y funciona, me muestra el ID de la cuenta a la cual asocio el proyecto. Cual seria el paso siguiente. Muchas Gracias por tu ayuda.
Registrado: ene. 2010
Mensajes: 162
Estado: Desconectado Ultima visita: 15.05.12
Ok, paso siguiente es actualizar el campo de la Cuenta, que es el que indica que tiene proyectos o no.
Para eso vamos a utilizar la API que provee SugarCRM.
Registrado: ene. 2011
Mensajes: 17
Estado: Desconectado Ultima visita: 26.01.11
Muchas gracias, todo bien, ahora ya entiendo un poco mejor, y entonces voy a mirar el query para que me devuelva el valor a asignar dependiendo de si hay proyectos activos o no. Por cierto me podrias indicar como deshabilito el campo al cual le estoy asignando el valor, pues en ultimas es un campo d etexto y si se ingresa por el modulo de "Cuentas" se puede editar su valor. de nuevo Gracias.
Registrado: ene. 2010
Mensajes: 162
Estado: Desconectado Ultima visita: 15.05.12
Hola Andres, me alegro que hayas solucionado tu tema.
Para deshabilitar un campo, en Comunity, te sugiero que lo saques de la vista de Edición desde el Estudio, de esa manera, vas a restringir su edición.
Saludos,
Cualquier inquietud, no dejes de contactarme.
Saludos,
Registrado: ene. 2011
Mensajes: 17
Estado: Desconectado Ultima visita: 26.01.11
Saludos, espero no ser muy molesto, pero ahora se me ha presentado un problema para trabajar con el resultado de un query en logic hook.
Quiero ejecutar un query, que devuelve un resultado que pueden ser varios registros. Entonces requiero conocer cuantos registros me devuelve la consulta, asi como el msql_NumRows() ,cual es el funcion al cual paso como parámetro el query y la fila como mysql_Fetch_Object(), para poder construir el objeto y obtener y asignar la columna que desee.
En el momento he intentado obtener la colmna de esta manera.
Registrado: ene. 2011
Mensajes: 17
Estado: Desconectado Ultima visita: 26.01.11
Gracias amigo, una pregunta, depsues de que entro a la iteración estoy realizando una sentencia lógica para saber si X atributo se encuentra en Y estado, y efectivamente esta entrando cuando se cumple, pero luego quiero asignar un valor a una variable con el código que habías colgado anteriormente, pero ahora con el evento $hook_array['after_save'][], entonces se supone que primero se aplican los cambios y luego se ejecuta el logic hook verdad.
Bueno entonces estoy haciendo esto:
$estado=’Inactivo’
Pero no me asigna el valor, como podría yo asignar al código que me pasaste antes un valor dependiendo de la sentencia lógica en la iteración d elos resultados del select. Ademas se trabaja igual con el evento $hook_array['after_save'][]. Gracias
Registrado: ene. 2010
Mensajes: 162
Estado: Desconectado Ultima visita: 15.05.12
Fijate que la variable $i no está inicializada... En este caso no la necesitas.
La variable $row contiene indices según la columna de la query, es decir, si haces
select id, name en tu variable $row vas a tener $row['name'] y $row['id']
Te recomiendo que antes de mandarte a ejecutar codigo, pruebes primero si los resultados esta bien, es decir, puedes hacer lo siguiente:
Esta lista muestra los usuarios activos de los últimos 10 minutos
Todos los logos y marcas registradas en este sitio son propiedad de sus respectivos dueños. Los comentarios son propiedad de sus autores, el resto es de este sitio Web (c) 2004, que fue creado con PostNuke, un sistema portal Web escrito en PHP. PostNuke es Software Libre liberado bajo la licencia GNU/GPL.