Utilizamos cookies propias y de terceros para proporcionarte una buena experiencia de navegación. Si sigues navegando, entendemos que aceptas su uso. Acepto


Logic Hooks en SugarCRM: notificando por email eventos del CRM

Uno de los puntos comunes que aparecen en casi todas las implantaciones de SugarCRM que acometemos desde Irontec es la necesidad de realizar acciones cuando se crea, modifica o borra un registro de la herramienta. Para cubrir esta necesidad SugarCRM implementa un sistema llamado "Logic Hooks". Este tipo de lógicas nos permitirán implementar nuestras propias acciones que se "dispararán" cuando ocurra un evento en el CRM. En el caso que voy a explicar a continuación trabajaré con el módulo de oportunidades. La necesidad concreta era recibir un email en una lista de correo corporativa cuando se crea o modifica una oportunidad del CRM. Además, en el caso de la modificación, era importante saber que campos concretamente han cambiado.

Los "Logic Hooks" se ubican dentro de la carpeta custom de forma que serán llamados por SugarBean durante la ejecución del CRM. Por lo tanto lo primero que tendremos que hacer es crear un fichero logic_hooks.php en la siguiente ruta.

RUTA AL CRM/custom/modules/Opportunities

El contenido del fichero será el siguiente:

$hook_version = 1;
$hook_array['before_save'][] = Array(1,"enviar_email","custom/modules/Opportunities/Opportunities_Hook.php","Opportunities_Hook","enviar_email");

En primer indicamos la versión del sistema de hooks. De momento solo está soportada la versión 1 así que es fácil saber que poner :) . A continuación se define el hook_array. Se trata de un array bidimensional que contiene:

  • Nombre del evento que va a disparar el hook
  • Array que contiene los parámetros necesarios para lanzar el hook

En nuestro caso el evento que disparará el hook es "before_save" que se lanza justo antes de salvar. Utilizamos este evento por que nos permite que se ejecute justo antes de hacer la insert o update en la base de datos. De esta manera podré hacer operaciones con los datos que envío en el formulario y con los datos que tenía en la base de datos antes de salvar. El listado completo de eventos que pueden disparar un hook puede consultarse en la documentación del desarrollador de sugarCRM.

Los parámetros que pasaremos son:

  • 1 = Se trata de un índice. Lo pasamos a 1
  • "enviar_email" se trata del nombre del hook. Sirve solo para identificar el hook.
  • "custom/modules/Opportunities/Opportunities_Hook.php" es el fichero que contendrá nuestra acción personalizada
  • "Opportunities_Hook" el nombre de la clase dentro del fichero Opportunities_Hook.php.
  • "enviar_email" nombre del método a ejecutar dentro de la clase Opportunities_Hook.

En segundo fichero que necesitaremos será Opportunities_Hook.php cuyo contenido es el siguiente. Explico el contenido del fichero con comentarios dentro del propio código por simplificar el post:

class Opportunities_Hook{
//Defino la clase que voy a llamar por parámetro cuando lanze el hook
//Defino la función enviar_mail que recibirá por referencia el $bean que vamos a salvar, el evento que en nuestro caso recibira "before_save" y los argumentos especificos del evento que no vamos a usar en este ejemplo

	function enviar_email(&$bean, $event, $arguments){
		global $current_user;
		require_once("include/SugarPHPMailer.php");

		//Obtengo los datos de antes de salvar creando un Bean con los datos de la base de datos.
		$oldOpp = new Opportunity();
		//$bean contiene el nuevo bean, pero en caso de estar modificando la base de datos el ID viejo y el nuevo deben ser el mismo.
		$oldOpp->retrieve($bean->id);

               //Preparo el cuerpo del email de notificación
		$nuevo = false;
		if ($oldOpp->amount==NULL) {
		//el nombre de la oportunidad es obligatorio, por lo tanto si es NULL significa que es una oportunidad nueva y me preparo los textos en consecuencia
			$html = "Oportunidad nueva en iCRM. A continuación puedes ver los detalles:";
			$nuevo = true;
			$estado_msg = "new";
		} else {
			$html = "Oportunidad modificada en iCRM. A continuación puedes ver los detalles. Los campos marcados con * son los que han cambiado:";
			$estado_msg = "mod";
		}

		$html .= "Creado por: ".$current_user->full_name;

		//Todas estas IF son para saber si el campo está modificado o es nuevo. En caso de ser modificado lo marco con *
		$html .= "Nombre oportunidad";
		if ($bean->name!=$oldOpp->name and $nuevo==false) $html .= "*";
		$html .= ": ".$bean->name;

		$html .= "Nombre cuenta";
		if ($bean->account_name!=$oldOpp->account_name and $nuevo==false) $html .= "*";
		$html .= ": ".$bean->account_name;

		$html .= "Estado";
		if ($bean->sales_stage!=$oldOpp->sales_stage and $nuevo==false) $html .= "*";
		$html .= ": ".$bean->sales_stage;

		$html .= "Cantidad";
		if ($bean->amount!=$oldOpp->amount and $nuevo==false) $html .= "*";
		$html .= ": ".$bean->amount." euros";

		$html .= "Fecha de cierre";
		if ($bean->date_closed!=$oldOpp->date_closed and $nuevo==false) $html .= "*";
		$html .= ": ".$bean->date_closed;

		$html .= "/index.php?module=Opportunities&action=DetailView&record=".$bean->id."\">Haz click aquí para ver la oportunidad";
		$html .= "Descripcion";
		if ($bean->description!=$oldOpp->description and $nuevo==false) $html .= "*";
		$html .= ":".$bean->description;
		//Preparo el mail
		$notify_mail = new SugarPHPMailer();
		$notify_mail->isHTML(true);
		$notify_mail->CharSet = "UTF-8";

		$notify_mail->AddBCC("LISTACORPORATIVO@dominio.com","Nombre del destinatario del correo");
		$notify_mail->From = "no-reply@irontec.com";
		$notify_mail->FromName = "Sistema de notificación del SugarCRM";
		$notify_mail->Body = from_html($html);
		$notify_mail->Subject = "[iCRM]Oportunidad ".$estado_msg.": ".$bean->name." ";

		//Finalmente mando la notificación por email
		$notify_mail->Send();

	}
}

Documentación adicional:

Documentación de HOOKS en la documentación de SugarCRM

Comparte esta información:
  • Twitter
  • Facebook
  • del.icio.us
  • Meneame
  • BarraPunto
  • Google Bookmarks
  • PDF
  • email
Leave a comment

15 Comments.

  1. Buenas tardes soy Francisco Delgado de la empresa ENESOLUCIONES, primera
    empresa andaluza con certificación DCAP. Hemos desarrollado un plugin para
    la integración de SugarCRM CE con Asterisk y me gustaría saber si está
    interesado en nuestros servicios para su empresa o uso personal.

    Le adjunto el enlace a nuestro blog para que obtenga mas información:
    http://www.enesoluciones.com/wordpress/2010/04/integracion-de-asterisk-con-sugarcrm-550/

    También comentarte que hemos creado un módulo para poder ver las estadísticas de llamadas de cada usuario de sugar.

    Sin más, estoy a su disposición para lo que necesite. Un saludo

  2. Gorka Rodrigo del Solar

    Hola Francisco,

    Muchas gracias por la información. Irontec cuenta técnicos certificados dCAP y somos la empresa organizadora junto con Avanzada 7 de los cursos y examen en la zona norte. Así mismo somos desarrolladores de i::voz-NG (http://ivoz.irontec.com) una completa solución de telefonía orientada a Call Center y Empresas de todos los tamaños totalmente basada en Asterisk.

    De todas maneras está bien tener el contacto por si pudiera surgir alguna colaboración

    Un cordial saludo

  3. casi que no encuentro un espacio para opinar. La tecnología de la información comunicativa presta muchos servicios espectaculares hoy día, y por eso crece progresivamente a medida que nos capacitamos

  4. Tengo una duda que no resuelvo en el foro de Sugar y, a lo mejor, tu la respondes más rápido:
    En el hook se define una clase y una función pero me encuentro que necesito hookear en el before_save diferentes actividades, puede hacerse esto de alguna forma “separada”.
    Esta duda surge porqué modificando el hooking de Leads me encuentro que un upgrade de versión 6.0 1 6.0.1 resulta que crea el PHP de hooking con lo que necesito incluir lo propio del upgrade y lo mio. Cuando he ido a modificar el logic_hooks.php veo que ya existe uno y que algo en el SugarCRM debe haber creado con lo que no se cómo puedo entonces incluir mi hook. Lioso…

  5. Antes que nada muy buen artículo. Tratando estos temas, que piensan del nuevo Kinect? Apenas tuve la oportunidad de jugarlo y esta buenisimos

  6. btw .. looks like sugar 6.2 is going to have some great improvements :)

  7. Cool blog! Is your theme custom made or did you download it from somewhere? A theme like yours with a few simple adjustements would really make my blog jump out. Please let me know where you got your theme. Kudos

  8. What i don’t realize is actually how you’re not actually much more well-liked than you may be right now. You are so intelligent. You realize thus significantly relating to this subject, made me personally consider it from numerous varied angles. Its like men and women aren’t fascinated unless it’s one thing to accomplish with Lady gaga! Your own stuffs great. Always maintain it up!

  9. Buena opción esta, bien efectiva.

    Gracias nos sirvió mucho

  10. Hola amigo. Te molesto para consultarte como seria esto para enviar el mail pero en caso de la creacion o cambio en el modulo project.
    Gracias!

  11. ugg 銈儍銈?銉栥兗銉?婵€瀹?/a> ugg灞?瑭曞垽 Logic Hooks en SugarCRM: notificando por email eventos del CRM | code.irontec.com: el blog de recortes de código PHP y más de Irontec: Internet y Sistemas sobre GNU/Linux ugg 銉溿偪銉炽伄鑹?/a> 銈偘 姝h ugg 鏃?湰鏈叆鑽?/a>
    ugg 日本 値段
    http://www.4claws.co.za/category.asp?b=jpugg&tag=ugg-日本-値段

  12. Jersey #84 Cleveland Browns elite Philadelphia Eagles Jerseys Jersey Dolphins Jerseys Logic Hooks en SugarCRM: notificando por email eventos del CRM | code.irontec.com: el blog de recortes de código PHP y más de Irontec: Internet y Sistemas sobre GNU/Linux Raiders Men’s Jerseys Eagles Jerseys Just Orleans Saints Throwback Jerseys
    authentic nfl jerseys cheap http://www.malpensafiere.com/public/html/jerseys-online/authentic-nfl-jerseys-cheap.html

Leave a Reply


[ Ctrl + Enter ]