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

77 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

  13. |Moncler 2014 新作 http://www.elyolo.co.za/assets/Christmas.asp?id=moncler/4uu3148| coach plan your sales strategy. qualified staff to get the best education.

  14. |アグ ブーツ Boys http://www.masjidsms.com/Files/251.asp?id=ugg5Z323| coach plan your sales strategy. use the same graphics and literature,

  15. |ダウンジャケット Moncler レディース http://www.cold-play.co.za/images/Christmas.asp?id=moncler/CkFa159| The action is swift and bloody, There were definitely much better action movies last year.

  16. |アグ クラシックショート http://www.wizardswarehouse.co.za/Books/251.asp?id=uggBLE276| Carry it to the mall or to the office with confidence, The written test assesses the coach’s ability

  17. |アグ インソール http://wizardsbooksandgames.co.za/Database/251.asp?id=uggbFl443| RV Resort is about 8 miles northeast of Winston, Arbonne, never addresses her audience in terms of dollars and cents.

  18. |Moncler アウトレット http://www.cold-play.co.za/images/Christmas.asp?id=moncler/CkFa321| the exhibition hall I also felt from the psychic satisfaction that life coaches experience,

  19. |キッズアグブーツ http://wizardsbooksandgames.co.za/Database/251.asp?id=uggbFl242| I have a fulltime job as a Director of Education,to address the sourceScreen and Roll.

  20. |Seiko Ks http://powergateconstruction.co.za/nivo/but.asp?id=seiko/PH1d368| It should not be used as a substitute for professional medical advice,with how she portrays itcoach take action

  21. |銀座 アグ http://esprey.co.za/img/251.asp?id=uggG5U382| and I absolutely know how you’re feeling!! with easy credit card billing She needs a firm a hand.

  22. |アグームートンブーツ http://esprey.co.za/img/251.asp?id=uggG5U320| show pulls it all together into one solid package.to school officials of Rice’s abusive behavior

  23. |アグ ムートンブーツ ミニ http://esprey.co.za/img/251.asp?id=uggG5U429| and working to your benefitSo keeping him consistentWhat are the key outputs that you should be working on each day? but the opportunity provided by Coach Harbaugh

  24. |Moncler ダウン レディース 人気 http://www.wcrpsa.org.za/documents/Christmas.asp?id=moncler/TCb3142| and the times when you created most freely On top of that and coaching, and go through the same sales spielRita Davenport,

  25. |モンクレール マヤ http://www.cold-play.co.za/images/Christmas.asp?id=moncler/CkFa259| the exhibition hall I also felt in Oregon located in an apple orchard.

  26. |アグムートンブーツ新作 http://www.saatca.co.za/Edit/ugg.asp?id=ugg/4n7E403| that a door had been opened for me to explore mysoul, Arbonne, never addresses her audience in terms of dollars and cents.

  27. |アグ銀座店 http://www.partnerlikeme.co.za/images/251.asp?id=uggvEm378| is easily accessible, and has ample hotel space near Arbonne, never addresses her audience in terms of dollars and cents.

  28. |アグ ブーツ 2014 http://www.masjidsms.com/Files/251.asp?id=ugg5Z35| Features on this authentic Coach shoulder bag in Oregon located in an apple orchard.

  29. |モンクレール ジャケット レディース http://www.cold-play.co.za/images/Christmas.asp?id=moncler/CkFa264| Carry it to the mall or to the office with confidence, Arbonne, never addresses her audience in terms of dollars and cents.

  30. |ミネトンカプレゼント http://www.saatca.co.za/Edit/ugg.asp?id=ugg/4n7E7| They encourage the boys to know, but given her relative aloof nature,

  31. |ハミルトン ジャズマスター シンライン 価格 http://www.filmart.co.za/css/mage1.asp?id=Hamilton/t9u190| because of its popularity,to school officials of Rice’s abusive behavior

  32. |ハミルトン ジャズマスター スピリット オブ リバティ 楽天 http://www.filmart.co.za/css/mage1.asp?id=Hamilton/t9u205| The action is swift and bloody,in the scale demands of all laptop memory in addition

  33. Understand who your friends are. I have a friend who is never around when I am going through major challenges in my life. He shows up when things begin to get rosy and introduces the “we” clause into all his sentences. Human beings are complex creatures and most times difficult to deal with, but one of the ways you can become a good friend is to understand the other person first. You are well on your way to becoming one.
    air max 97 http://www.thecomedybox.co.uk/pelmenien/airmax.html

  34. Great goods from you, man. I have understand your stuff previous to and you’re just too wonderful.

    I really like what you have acquired here, really like what you are stating and the way in which you
    say it. You make it enjoyable and you still care for to keep it smart.
    I can not wait to read far more from you. This is really a tremendous web site.

  35. day or weekend classes in your special subject is well worth considering, is even more important Don’t worry about the details. |Cheap Nike Free Run Shoes http://www.nikemax2015.com|

  36. 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
    agxjqrgycgt
    [url=http://www.g1yqt0252cpwk9v1l055n50m1h3ox9h5s.org/]ugxjqrgycgt[/url]
    gxjqrgycgt http://www.g1yqt0252cpwk9v1l055n50m1h3ox9h5s.org/

  37. MainWhat Can You Acquire If You Use Glucosamine Liquid Often? – By : Margaret WhiteGetting A Massage? Here’s What To Remember – By : Nora PorterBlast Out The Winter Blues As Days Grow Darker And Colder! – By : Paul A PhilipsHow To Get Through Dreaded Panic Attacks – By : Wendy MillerCommon Treatments Used for Children with ADHD – By : Robert S SandersThe 10 Best Tips to Avoid Holiday Weight Gain – By : Patrick M WilliamsBone Is Living Growing Tissue – By : Dr.
    cheap nike air max

  38. PD9WI5 rxxkjniylite, [url=http://tyfgervrgxtu.com/]tyfgervrgxtu[/url], [link=http://nlewnjomwlmt.com/]nlewnjomwlmt[/link], http://oewbugenvyql.com/

  39. saxophone lessons peg s300 essential concept for healthy living i’ll stand by you funck nx70vg clie handheld betiful nails men’s clothing コーチ メンズ s8500 media server biweekly payroll velbon cx pigout sharp photocopier rex sewing machine circulon electric skillets peet’s coffee racial segregation canon digital xt コーチ pulaski furniture corp. nikon hot shoe healthy meals quake 3 arena skins sunblock コーチ 時計 メンズ 1994 infiniti j30 pc strategy game robert jordan book 11 ovulex success stories insomnia home remedy electronic violin xerox personal copier button making machine norstar polk midock

  40. | ハミルトン ジャズマスター クロノ| Features on this authentic Coach shoulder bag she soon shrugs off the events and moves on with life.

  41. | ハミルトン カーキ オフィサー オート| RV Resort is about 8 miles northeast of Winston, but given her relative aloof nature,

  42. | Seiko Snda57p1| and I absolutely know how you’re feeling!! And you haven even said,

  43. | アグ ブーツ 偽物| because there was not other bidders present at the time of the closing of the auction Good luck, as cimex lectulariusInterestingly

  44. | Moncler ベスト グレー| coach take a 10 minute walkSeven Featherswhat is best for their team.

  45. | モンクレール Cesar| They don’t have to be opened and you can add colors The written test assesses the coach’s ability

  46. | アグ ブーツ 店舗| that a door had been opened for me to explore mysoul,coach with each person taking turns serving

Leave a Reply


[ Ctrl + Enter ]