Feeds RSS en Microsoft Dynamics CRM, Solución de Problemas

Hace ya unos meses que tenemos disponible un pequeño gran add-in para Microsoft Dynamics CRM que nos permite mostrar información del CRM a través de feeds RSS. Aunque en principio la tecnología RSS fue concebida para la sindicación de noticias, es una idea aplicable a otros tipos de información, como viene a demostrar este ejemplo.


La verdad es que el concepto, contrariamente a lo que se pueda pensar, es muy interesante para dinamizar una implementación de Microsoft Dynamics CRM. Podemos disponer de información del negocio de manera dinámica sin ni siquiera tener que abrir el CRM, recibiremos información sobre nuevas oportunidades, nuevas cuentas, productos, nuevas incidencias, etc… directamente en nuestro lector de feeds. Nos mantendremos actualizados de la nueva información importante que se introduzca en nuestro sistema CRM.


Por poner un ejemplo, que seguro que ya se os están ocurriendo un montón, imaginad un agente de servicio técnico que trabaja todo el día a través de Outlook con el cliente de CRM instalado, para ese agente sería genial tener un feed RSS que le avisase de las nuevas incidencias que se la han asignado, de nuevos artículos interesantes en la base de conocimiento, y todo ello automáticamente sin tener que preocuparse. Y además sin salir de Outlook, por que aunque hay buenos clientes RSS externos a Outlook, también tenemos clientes como IntraVnews para Outlook 2003, y Outlook 12 (Office 2007) que ya trae incluido un lector de RSS; aunque todavía no se puede utilizar con Microsoft CRM.


Funcionamiento y Seguridad


La versatilidad de este add-in es increíble por su forma de crear los feeds RSS. Pone a nuestra disposición un hilo rss por cada vista que tengamos disponible en el sistema, por ejemplo: Mis Citas, Cuentas activas, Mis casos, etc. , lo que nos permite crear feeds RSS a placer ya que las vistas son personalizables. Pero eso no es todo, los usuarios también puede personalizar su experiencia con los feeds ya que ellos mismos los pueden crear guardando su consultas avanzadas.


¿Cómo consigue esto? Pues seguro que ya lo habéis adivinado, gracias a los Servicios Web y el al hecho de que todas las vistas y consultas pueden ser obtenidas de ellos. Estas consultas se guardan en formato Fetch XML (del que hablaremos otro día) lo que permite al add-in utilizarlas directamente en el método Fetch de los servicios web para obtener la información de los feeds.


 En cuanto a la seguridad podemos estar tranquilos, por que utiliza impersonación en las llamadas a los servicios web, con lo que los usuarios sólo podrán acceder en el RSS a la misma información que su rol en Microsoft Dynamics CRM le permita.


La instalación y el Problema


El addin CrmRssFeeds, lo podéis descargar siguiendo el enlace, es en realidad una pequeña aplicación web que incluye unas páginas aspx para la generación de los feeds. Incluye todo el código, lo que como veremos no solucionará un problema, y un sencillo pero muy descriptivo manual de instalación. Que básicamente nos guiará en la compilación y el despliegue de la aplicación.


El principal problema que podemos tener si seguimos al pie de la letra los pasos del manual es que vamos a encontrar una Excepción en la llamada a los servicios web ¿Por qué? Pues porque en ningún sitio hemos puesto la url de nuestros servicios web. La url se encuentra configurada en el propio código de los proxys de los servicios web (tal y como la deja Visual Studio por defecto), con lo que para cambiar la configuración debemos modificar la url en los ficheros crmservice.cs y metadataservice.cs.


Otro problema con el que me he encontrado, es que mucha gente ignora el aviso de que hay que compilar la aplicación con .Net Framework 1.1 y utiliza el prompt de Visual Studio 2005. Si compilamos con .Net 2.0 el rss funcionará correctamente, pero, Microsoft CRM no lo hará y encontraremos errores como que no se puede mostrar el calendario de servicios. Esto se debe a que al hacer esto el pool de aplicaciones de Microsoft CRM será reasignado a la versión 2.0 de ASP.NET. Si llegais a esta situación tendréis que cambiar manualmente la configuración del pool en el administrador de IIS. Para evitar este problema basta con asegurarse de utilizar la versión 1.1 de .Net con el compilador de C#, por ejemplo, modificando el make.bat para que utilice obligatoriamente la versión correcta indicando el path completo C:WINDOWSMicrosoft.NETFrameworkv1.1.4322csc /out:RSSServices.dll /target:library MetadataCache.cs MetadataService.cs CrmService.cs


Versión Modificada


Como el CRM Rss está publicado con código abierto bajo una licencia de código fuente, me he permitido el lujo de modificarlo. Espero no estar infringiendo ningún acuerdo de licencia, que por lo que he leído me parece que no.


La modificación que he hecho es una tontería para evitar los problemas que he descrito:




  • Añadir un web.config con dos entradas de configuración de la aplicación CRMServiceUrl y MetadataServiceUrl.


  • Modificar los proxys de los servicios web para que utilicen esas entradas de configuración.


  • Modificar el readme para avisar de estos cambios


  • Modificar el make.bat para incluir la ruta completa al compilador adecuado de C#.

Podeis descargarla desde geeks, CRM Rss Connector Modified by Marco.


Conclusiones


El soporte para Rss en Microsoft Dynamics CRM 3.0 es una herramienta increíble que nos proporciona un dinamismo inimaginable en nuestra implementación de Microsoft Dynamics CRM, y lo hace de la forma más sencilla posible. Además, es otro gran ejemplo de las cosas que podemos construir utilizando el SDK de Microsoft Dynamics CRM.


¿Qué os parece la disponibilidad de feeds rss en aplicaciones de negocio como CRMs? ¿Creis que con esto acercamos la tecnología al usuario? ¿Me meteré en un lío por modificar el CRM Rss Feed Connector?


Un Saludo,


Marco Amoedo Martínez


Fechas para el Update Rollup 1 de Dynamics CRM 3.0

Este pasado viernes aparecía un post en el Blog del equipo del Microsoft Dynamics CRM en el que se hablaba la disponibilidad de un artículo de la base de conocimiento de Microsoft, que muchos ya conocíamos, que contiene todos los updates & hotfixes disponibles de Microsoft Dynamics CRM 3.0.


Lo interesante de este artículo, además de las definiciones de lo que es un update y un hotfix, es la mención de la posible liberación del Update Rollup 1 for Microsoft CRM 3.0 a finales de Octubre. Sin duda, los que a menudo curioseamos los artículos sobre CRM 3.0 en la base de conocimiento ya nos preguntábamos cuando tenían previsto este rollup, y es que ya hay un montón de artículos de solución de problemas.


Además en ese artículo se hace mención a otro gran trabajo sobre Microsoft Dynamics CRM 3.0 que verá la luz dentro de pocos meses, se trata de Microsoft CRM 3.0 Performance Whitepaper. En este documento se explicarán muchos temas sobre como afinar el rendimiento de nuestro CRM 3.0, al igual que ya se había hecho con la versión anterior. Tendremos que permanecer atentos.


Personalmente creo que el equipo de soporte de Microsoft CRM 3.0 está haciendo un gran trabajo, no hay más que consultar la base de conocimiento y otros artículos para darse cuenta del gran esfuerzo que han hecho para resolver rápidamente todos los problemas que han ido apareciendo. Os recomiendo a todos que cuando tengáis algún problema probéis a buscar en la Base de Conocimiento de CRM 3.0, ya que es posible que encontréis la solución, y si no en las news hay mucha gente dispuesta a ayudar.


Saludos,


Marco Amoedo Martínez

Reorganización del equipo de Microsoft Dynamics

Hace unos días que se anunciaba oficialmente que el equipo de Microsoft Dynamics CRM se reorganizaba para incluirse dentro de grupo de Microsoft Office. Este movimiento según, según cuenta Philip Richardson en su blog, no supondrá ningún cambio para los planes existentes sobre Microsoft Dynamics CRM. Y como podemos leer en el blog del equipo del CRM tampoco lo desliga de Microsoft Business Services, a la que seguirá muy unido para armonizar en la familia de productos Dynamics. Además hay que recordar que Microsoft Office se encuentra dentro de Microsoft Business Division, con lo que seguirán teniendo a Jeff Rikes como presidente.


Aunque esto de las reorganizaciones y divisiones de Microsoft es un lío, que la verdad es que hay tantos equipos, grupos, divisiones y demás que nos perdemos. La idea que podemos sacar de esta noticia está muy clara: Hay que hacer que las aplicaciones de gestión empresarial se integren en el trabajo diario para poder sacarles partido. Y como Office es la base del trabajo diario en la mayoría de las empresas, es ahí donde hay que integrar la potencia de Dynamics. Ya teníamos el primer acercamiento con uno de los puntos fuertes de Dynamics CRM, los clientes para Outlook que permiten utilizar una herramienta CRM en el entorno de trabajo habitual del personal de Ventas, Marketing y Servicio. Y el CRM SnapIn que ya nos permiten una integración con Office. Pero la idea es ir más allá, y llegar a integrase mucho más con otros productos como Sharepoint o Microsoft Project.


Si recordáis la estrategia que Microsoft planteaba en el Proyect Green (Microsoft Dynamics) tenía uno de sus puntos fuertes en centrarse en los usuarios, y este es claramente un movimiento más dentro de esa estrategia. Si algo caracteriza a Microsoft Dynamics CRM, es la capacidad para superar el problema de no aceptación de los usuarios gracias a la facilidad de uso y a su integración con el trabajo diario, integración que no sería posible sin convivir con Office. Por lo tanto parece que este movimiento puede ser un gran acierto.


¿Qué os parece esta reorganización? ¿Alguno tiene claro las divisiones y grupos de Microsoft y se anima a hacer un esquema? Creo que ni en Microsoft lo deben tener muy claro.


Hasta la próxima,


Marco Amoedo Martínez

El CRM, the next Billion Dollar Baby

Hace unos días aparecía una noticia en CRN en la que se podía leer que varios ejecutivos de Microsoft consideran a Microsft Dynamics CRM el siguiente billion dollar bayby, es decir, que el CRM se convertirá en el nuevo superventas de la compañía, aunque sin alcanzar los niveles de Office.


La verdad, es que después de un comienzo suave con sus dos primeras versiones, las cifras de la versión de Dynamics CRM 3.0 asustan: 7.000 clientes, y 180.000 usuarios de los cuales 50.000 se han incorporado en el último cuarto. Un crecimiento impresionante, y más teniendo en cuenta que aún se está completando la liberación de versiones localizadas, creo que todavía faltaban el Japon e Israel y acaba de salir la China.


De esta noticia y los comentarios que hacen en Microsoft, podemos extraer la conclusión de que en la compañía tienen muchas expectativas puestas en Dynamics CRM y se está haciendo un gran esfuerzo por sacarlo adelante. Y la verdad es que de momento parece que los clientes les están dando la razón.


¿Qué os parece la noticia? ¿Llegará el CRM a convertirse en una aplicación presente en todas las empresas como el Office?

Novedades en Dynamics CRM, CRM Live y un Nuevo Cliente Móvil

La noticia que tratamos saltaba ayer mismo en la conferencia mundial de partners, Microsoft ha anunciado la disponibilidad de Microsoft CRM live para el próximo año 2007. Y diréis, ¿Qué es eso de CRM Live? Pues la verdad es que aún está por ver claramente, pero la idea es proporcionar una versión de CRM siguiendo el modelo de Software-as-a-Service (SaaS) en el que Microsoft alojaría el CRM en sus datacenters y los clientes podrían utilizarlo tanto con cliente Outlook como con navegador web. Esta idea no es nueva, de hecho a una edición de Microsoft Dynamics CRM 3.0 for Service Providers cuyo objetivo era soportar el modelo de SaaS, en el que el cliente utilizaría un despliegue de CRM alojado en las instalaciones de un Partner, y por el que se cobrarían cuotas mensuales.


La novedad de CRM Live es el hecho de que Microsoft proporcionará su propia infraestructura para dar hosting al CRM, y que según se puede entender en la noticia toda la base de código de esta versión será la misma que las existentes con lo que los ISV’s pueden estar tranquilos ya que sus desarrollos y personalizaciones para Microsoft Dynamics CRM serán compatibles en todas las versiones.


Bueno ¿Y entonces que opciones tendremos para desplegar Dynamics CRM? pues principalmente tres:




  • Que el cliente lo tenga en sus propias instalaciones (la tradicional), conocida como On-Premise (disponible).


  • CRM ejecutándose sobre los servidores de un partner, llamada Partner Hosted (disponible).


  • CRM Live, en la que Microsoft mantendría el CRM en sus datacenters (en 2007).

En principio según se comenta en el artículo todas las versiones podrán ser personalizadas y extendidas siguiendo los métodos soportados, aunque no veo claro como se harán en la plataforma live cierto tipo de personalizaciones como extensiones con .Net Framework. Pero seguro que ya tienen algo pensado, o están en ello.


Entonces, si las tres se pueden personalizar y extender, la pregunta es: Si Microsoft ofrece CRM live, es decir, CRM en hosting ¿Qué van a hacer los partners que ofrecen hosting de CRM? Pues la respuestas es que los partners seguirán ofreciendo hosting pero de soluciones CRM con algún valor añadido, como comercio electrónico integrado, o verticalizadas para algún sector en particular.


Cliente Móvil y otras novedades


Adicionalmente al anuncio de CRM Live, se han hecho públicas otras novedades sobre Microsoft Dynamics CRM en la Worldwide Partner Conference 2006. Las más llamativas un nuevo cliente para dispositivos móviles de Microsoft Dynamics CRM en código abierto, y nuevo conector para Bizztalk que permitirá al CRM comunicarse con otros ERPs y CRM’s de terceros.


Lo más llamativo para mí es el anuncio del nuevo cliente para dispositivos móviles en código abierto. ¿Qué pasa con la que ya existía? Y además anuncian el lanzamiento para agosto, o sea, que pronto lo veremos. Habrá que mantenerse atentos.


Comentarios del equipo del CRM


Por otra parte, en el bog del equipo del CRM, también comentan el anuncio de CRM Live y hablan de que no sólo se trata de proporcionar soporte de SaaS, que la siguiente versión incluirá más novedades como soporte multilingüe, más opciones de personalización, mayor integración con office… etc. Además en el post hablan de que a finales de este año saldrán las pre-releases de las nuevas versiones y de CRM Live.


¿Qué os parecen las novedades? ¿CRM Live intentará atacar el nicho de mercado de aplicaciones como salesforce.com? ¿Y no me diréis que no os sorprende un nuevo cliente móvil en código abierto? Estoy deseando verlo.


Un Saludo,


Marco Amoedo Martínez

Microsoft entra en la F1

Microsoft ha ganado la licitación internacional hecha por la FIA para elegir un proveedor en exclusiva de ECU’s (Electronic Control Units) para todos los equipos de F1 entre 2008 y 2010. Las ECU’s son las centralitas electrónicas que los equipos utilizan para telemetría y ajuste de algunos reglajes del coche. Hasta ahora la principal empresa proveedora de ECU’s era Magneti Marelli, con 5 equipos entre los que destacan Renault y Ferrari. La cual se quedará fuera del negocio con este nuevo contrato en exclusiva.


Esta decisión se enmarca dentro de un paquete de medidas para intentar abaratar radicalmente los costes en la F1, y afecta a otros componentes de los coches de F1 como las ruedas. De las que Bridgestone será el proveedor en exclusiva, dejando a su rival Michelin fuera de la F1, ya a partir de la siguiente temporada.


Microsoft entra en este negocio sin tener demasiada experiencia previa en el desarrollo de este tipo de sistemas de control. Esperemos que los de Redmond sepan lo que hacen y no veamos a Fernando Alonso cambiando la célebre frase “trata de arrancarlo”, popularizada por Carlos Sainz, por la de “trata de reiniciarlo”. Os imagináis: “Su coche ha detectado una operación no valida y se apagará. ¿Desea enviarle un informe de errores a Microsoft?”.


Y ahora viene lo divertido, buscarle la relación a esta noticia con Microsoft Dynamics. Pues aunque es una tontería hay una. Marcas como SAP, rival directo de Microsoft Dynamics, llevan años con presencia en la F1 como sponsors de equipos mientras que Microsoft fiel a sus orígenes americanos ha ignorado en gran medida este escaparate. Sin embargo con este nuevo contrato Microsoft entra a lo grande en la F1.


Bueno, ¿Qué os parece? ¿Acabará Alonso corriendo en Microsoft F1 Team?


Marco Amoedo


Fuente


 

Microsoft Dynamics CRM 3.0 y las Instancias Nombradas de SQL Server

Hasta ahora Microsoft Dynamics CRM 3.0 tenía la limitación de tener que instalarse en la instancia por defecto de SQL Server, es decir, que no podíamos tener las bases de datos del CRM en una instancia nombrada. Pero afortunadamente el Grupo de Producto de Microsoft Dynamics CRM ha completado las pruebas de certificación para utilizar instancias nombradas, y el equipo de soporte del CRM ha aceptado soportar oficialmente este tipo de instalaciones.


Esta novedad entra en conflicto con la información que teníamos disponible hasta ahora en la guía de implementación, en la que se informaba de la imposibilidad de realizar el despliegue utilizando instancias nombradas. Está previsto que esta documentación sea actualizada pronto para reflejar este cambio, y otros que han ido apareciendo y están disponibles como artículos en la Knowledge Base de Microsoft Dynamics CRM.


De momento, para poder realizar una instalación en una instancia nombrada del CRM no es necesario ningún hotfix ni nada por el estilo, lo que hay que hacer es un bypass del Asistente de Diagnóstico de Entorno que se ejecuta al comienzo de la instalación. Este asistente es una herramienta bastante útil que detecta problemas potenciales para el despliegue y proporciona “algo” de información sobre sus posibles soluciones, por lo que no es conveniente saltárselo por otra razón que no sea la instalación sobre una instancia nombrada. Sin embargo no se ha publicado el procedimiento para realizar este proceso, por lo que aquellos que queráis realizar una instalación sobre una instancia nombrada deberéis poneros en contacto con el equipo de soporte.


¿Qué os parece? ¿Os habéis encontrado con algún caso donde fuese necesario esto? ¿Algún experto de SQL Server que nos de su opinión?


Saludos,


Marco Amoedo Martínez

Ejemplos de estrategias CRM

Tantas veces oímos hablar de CRM que a veces perdemos un poco la noción de lo que realmente significa, uno de los primeros post que hice en este blog versaba precisamente sobre eso. Hoy voy a intentar mostraros dos casos reales de estrategias CRM, una buena y otra mala. Ambos son situaciones que he vivido recientemente y con las que seguro muchos os sentiréis identificados, porque hoy en día nuestros datos pululan por tantos sistemas CRM de tantas empresas que es difícil que nunca os haya pasado algo parecido.


El caso malo


Este primer caso está relacionado con las operadoras de telecomunicaciones. Antes de nada, aclarar que a pesar de que esta vez me han defraudado, mi operador siempre ha cumplido y me ha proporcionado un buen servicio. Pero como todo el mundo, de vez en cuando necesitan un tironcito de orejas para no dormirse en los laureles.


Todo empieza con un problema de facturación, vamos que descubrí que “por error” me estaban cobrando de más en la factura. Lo primero que hice, como todo cliente haría, es ponerme en contacto con el callcenter de atención al cliente para informarles de este problema. Después de un ratito explicando mi problema, la amable operadora me comunica que sí, que parece que puede estar mal la factura, y que van a comprobarlo y me llamarán en un par de días. En ese momento es donde empieza a fallar su estrategia CRM. Como os podéis imaginar no me llamaron en un par de días, es más, van dos semanas y todavía no se sabe nada de la llamada.


Seguro que a la mayoría ya se os está ocurriendo como corregir este comportamiento, es el ejemplo típico de las reglas de workflow en Microsoft Dynamics CRM. Ponemos una regla que al crear el caso, cree una actividad de llamada a los dos días, tres días, etc. Y añadimos una regla de escalada de casos, que avise a un responsable en caso de que esta incidencia no haya sido tratada pasados dos o tres días. Con dos sencillas reglas conseguirían haber atendido el caso en menos de una semana seguro, aunque no lo hubieran resuelto, simplemente con haber realizado una llamada al cliente a los dos o tres día informándole del estado de su incidencia bastaría.


Aunque parezca una tontería, un pequeño error como este en el diseño de un CRM puede suponer una perdida de efectividad enorme. Imaginad que en dos días o menos me hubiesen llamado, aunque no se solucionase el problema, sólo con haberse puesto en contacto conmigo habrían cumplido su promesa y tendrían a un cliente que seguiría confiando en la empresa. Y esto es lo más importante, la confianza, si tu confías en una empresa la recomendarás a otros, le serás fiel, y lo más importante, no te plantearás fácilmente probar la competencia. Pero por una tontería como una llamada, han perdido gran parte de la confianza de un cliente.


Como veis el problema no está en dar un servicio perfecto, todo el mundo comete errores, el problema está en dar un trato ágil, personalizado y eficiente al cliente. Si en el momento en el que un cliente nos plantea un problema nos comprometemos a revisarlo en un tiempo razonable y hacemos un correcto seguimiento personalizado (emails, llamadas, etc.), tendremos a un cliente contento a pesar de haber tenido un problema con nuestros servicios. Y los clientes contentos son una de las cosas más importantes para una empresa.


El caso bueno


Ahora toca ver otra estrategia CRM buena. En este caso se trata un banco on-line. Hace un tiempo que decidí hacerme cliente de este banco porque precisamente un amigo me habló muy bien de él. Veis la importancia de los clientes contentos, y ahora no me digáis que nunca habéis adquirido un producto o servicio por lo que os han contado. Bueno, el caso es que fui a su página web y me registré. Evidentemente con esto no llega para abrir una cuenta bancaria, por lo menos en España, puede que en algún paraíso fiscal sí. Así que en el momento de registrarme me llegó un email, indicándome que pasados unos días recibiría por correo la documentación que debería firmar y remitirles para poder tener mi nueva cuenta operativa.


A la semana, más o menos, me llegó la documentación, pero como soy un poco despistado se me pasó devolverla cumplimentada y firmada. Y como no, poco a poco fue cayendo en el olvido. Sin embargo, en este caso la estrategia CRM ha sido planificada teniendo en cuenta esto, y a los pocos días me llegó un primer mail informándome que si necesitaba cualquier ayuda para cumplimentar la documentación me pusiese en contacto con ellos. Como este email tampoco consiguió hacerme enviar la documentación (si es que menudo soy…), a las tres semanas sin noticias mías me llamaron desde un callcenter para saber si tenía algún problema o había cambiado de idea. Como veis, en este caso la estrategia crm funciona. No es difícil imaginar unas reglas de workflow que soporten esto verdad. Y con una tontería como un email y una llamadita, han conseguido remontar un cliente potencial que estaba prácticamente perdido, y todo gracias a que su herramienta CRM (que no se cual utilizan) ha sido correctamente diseñada.


A modo de disculpa, he de decir que siempre será más fácil encontrar una estrategia CRM para captar clientes, que para atender sus quejas. Aunque, y espero que estéis de acuerdo, realmente esto no debería ser así. Un cliente contento es mucho más eficaz para captar nuevos clientes, que casi cualquier cosa que podamos hacer.


Espero que estos casos prácticos sirvan para ilustrar un poquito más el objetivo de una herramienta CRM, y como Microsoft Dynamics CRM 3.0 puede ayudar a cualquier compañía a tener una estrategia crm que marque la diferencia con su competencia.


Marco Amoedo Martínez


PD: Se admiten apuestas sobre cuanto tardarán en hacer la llamada. De momento va ganando el mucho tiempo. ¿Qué apostáis vosotros? ¿Algún caso similar?

Servicios Web y Client Side Scripting de Microsoft Dynamics CRM

Hoy en día, está más que claro que los Servicios Web han llegado para quedarse, por lo menos, para quedarse lo que se suelen quedar las tecnologías; unos cuantos añitos hasta que algo mejor revolucione el mundillo. Pero el caso es que la utilización de servicios web puede ser de grandísima utilidad en la personalización de Microsoft Dynamics CRM, y no sólo desde código .Net como se tiende a pensar. Hoy intentaremos ver un ejemplillo de cómo esto es posible, y así reforzar la idea de la capacidad que tiene JavaScript junto con opciones ISV para personalizar el CRM como veíamos en el post anterior.


Supongo que la mayoría ya habéis oído hablar de AJAX (Asynchronous JavaScript and XML), una gran herramienta que nos permite utilizar Servicios Web desde JavaScript, y de las enormes posibilidades de interactividad que proporciona a los interfaces web. Y como los clientes de Microsoft Dynamics CRM son en sí interfaces web, aún que utilicemos el cliente Outlook los formularios son webs, AJAX también es aplicable a la personalización del CRM.


Vale, ya sabemos que podemos utilizar AJAX, que por lo tanto podemos llamar a Servicios Web desde código JavaScript personalizado en Microsoft CRM. Pero… ¿Y para qué lo utilizamos? Pues vamos a ver un sencillo ejemplo en el que nos podría ayudar, y así seguro que ya se nos empiezan a ocurrir más.


Si recordáis, en el último post vimos como incluir botones personalizados en las barras de herramientas de Microsoft Dynamics CRM. Bueno, pues imaginad que queremos insertar un botón que nos permita consultar datos bursátiles online de una cuenta directamente desde la ficha. Insertar el botón ya sabemos cómo se puede hacer porque ya lo vimos, pero cómo usamos AJAX para llamar a servicios web no está tan claro.


Para utilizar AJAX no tenemos más que instanciar el objeto ActiveX Microsoft.XMLHTTP, y llamar al servicio web que deseamos utilizando el método GET. En nuestro ejemplo vamos a llamar a un servicio web de WebServicex, un sitio que proporciona servicios web de utilidad y gratuitos, para consultar la cotización de la cuenta. Una vez instanciado, hacemos la llamada al servicio web componiendo la url del servicio y concatenándole el símbolo de cotización que tenemos en el campo tickersymbol de la entidad account.


//Server


var serverUrl = «http://www.webservicex.net»;


// Get stock quote.


symbol = crmForm.all.tickersymbol.DataValue;


// Instantiate at connection to the Web service and call the get method.


var xmlhttp = new ActiveXObject(«Microsoft.XMLHTTP»);


xmlhttp.open(«get», serverUrl + «/stockquote.asmx/GetQuote?symbol=»+escape(symbol), false);


xmlhttp.send();


 


Una vez realizada la consulta recibiremos una respuesta XML con un montón de información bursátil sobre el símbolo. Ahora tenemos que parsear el XML y quedarnos con lo que nos interesa. Para ello, y aunque hay métodos mejores, tomamos los substring que nos interesan de la respuesta y listo.


//Tags for XML response


var startNameTag = «Name»;


var endNameTag = «/Name»;


var startLastTag =»Last»;


var endLastTag = «/Last»;


var startMarketTag =»MktCap»;


var endMarketTag = «/MktCap»;


 


// Get Name


var valueStart = 0;


var valueEnd = 0;


valueStart = xmlhttp.responseXML.xml.indexOf(startNameTag, valueEnd) + startNameTag.length+4;


valueEnd = xmlhttp.responseXml.xml.indexOf(endNameTag, valueEnd+1)-4;


 


name= xmlhttp.responseXML.xml.substring(valueStart, valueEnd);


//Get Last Value


var valueStart = 0;


var valueEnd = 0;


valueStart = xmlhttp.responseXML.xml.indexOf(startLastTag, valueEnd) + startLastTag.length+4;


valueEnd = xmlhttp.responseXml.xml.indexOf(endLastTag, valueEnd+1)-4;


last= xmlhttp.responseXML.xml.substring(valueStart, valueEnd);


// Get Market Capitalization


var valueStart = 0;


var valueEnd = 0;


valueStart = xmlhttp.responseXML.xml.indexOf(startMarketTag, valueEnd) + startMarketTag.length+4;


valueEnd = xmlhttp.responseXml.xml.indexOf(endMarketTag, valueEnd+1)-4;


marketCap= xmlhttp.responseXML.xml.substring(valueStart, valueEnd);


 


Y mostramos los resultados en cuadro de diálogo para simplificar. Aunque bien podríamos haber insertado los valores en campos del formulario para que quedasen almacenados, por ejemplo, guardar un dato interesante como es la capitalización de mercado de nuestro cliente.


// Show results


alert(«Valor de las acciones de «+ name +»: n»+last+»n Capitalización: «+marketCap);


 


Bueno como veis no es excesivamente complicado llamar a servicios web desde código de lado cliente en Microsoft Dynamics CRM. Y lo mejor es que esto nos abre multitud de posibilidades, no sólo para llamar a servicios web externos, sino para contactar con nuestras propias aplicaciones o incluso utilizar los propios servicios web de Microsoft CRM. No me diréis que no se os ocurren muchas posibilidades ¿no? En el SDK hay más ejemplos e información así que ya sabéis.


Bueno, espero que este post y el anterior os hayan servido para ver que siempre hay que tener en cuenta las personalizaciones de script de lado cliente antes de lanzarnos a cosas más complejas. A partir de hoy morirán menos moscas a cañonazos.


Saludos,


Marco Amoedo Martínez

Client Side Scripting en Microsoft Dynamics CRM

Son muchas las veces que me encuentro con las mismas preguntas sobre personalización de Microsoft Dynamics CRM 3.0 ¿Se puede hacer esto? ¿Con qué método es mejor hacerlo? ¿Se puede hacer esto con JavaScript/Workflows/Callouts?


Bueno, pues vamos a aclarar un poquito que podemos conseguir con cada cosa, hoy voy a intentar mostrar la utilidad del Client Side Scripting con JavaScript y el fichero ISV.config, para que veáis qué se puede conseguir con esto, y cómo nos permite añadir funcionalidad de forma sencilla a nuestro despliegue de Microsoft Dynamics CRM.


“Las moscas y los cañonazos”


Antes de nada, me gustaría mencionar una frase que solía repetir un profesor mío en la carrera y que creo que debería ser unos de los principios de todos los diseños de sistemas informáticos y la ingeniería en general: “No mates moscas a cañonazos”. Detrás de una frase tan simple, hay una gran filosofía de trabajo. Una filosofía que nos dice que hay que ajustar la solución al problema, y tratar de resolver los problemas con soluciones que no solo sean eficaces, sino que sean eficientes y no añadan complejidades innecesarias. ¿Por qué os cuento esto? Pues, porque muchas veces JavaScript es el matamoscas adecuado, aunque la gente tiende a utilizar los cañones de personalizaciones más complejas en .Net. Hay que destacar que JavaScript se ejecutará en el lado cliente sin afectar al servidor, mientras que las extensiones con .Net se ejecutan en el servidor añadiendo más carga de trabajo al mismo.


Personalmente, cuando me enfrento a personalizaciones de CRM intento investigar primero si las posibilidades de las personalizaciones más sencillas (formularios, vistas, workflows, JavaScript, ISV, Iframes…) son capaces de solucionar el problema. Y digo investigar, porque muchas veces es difícil saber a priori sin un método nos puede solucionar nuestras necesidades. Pero lo bueno, es que aunque utilicemos mucho tiempo en esta investigación, este tiempo nunca será un tiempo perdido ya que nos ayudará a saber un poco más sobre las posibilidades de personalización de Microsoft Dynamics CRM.


JavaScript e ISV en funcionamiento


Vamos a pensar un escenario en el que JavaScript será el matamoscas adecuado, y así ver algo más de su utilidad. Imaginad que en nuestra empresa resulta de vital importancia controlar de una manera más menos fiel la duración de las llamadas, por ejemplo, para saber lo que se tarda en atender de media a un cliente en el callcenter o poder conseguir estadísticas sobre nuestros empleados de atención al cliente. Sabemos que existe un campo en la entidad Llamada Telefónica que se utiliza para almacenar la duración, pero este campo se cubre de forma manual introduciendo demasiada desviación del tiempo real de atención. Así que necesitamos un método que permita a nuestros empleados determinar la duración de la llamada de una forma más fiel a la realidad.


¿Qué os parece utilizar unos botones en el formulario de la llamada para tener disponible una especie de contador de duración? Pues es una sencilla personalización que se puede conseguir mediante JavaScript y personalizaciones ISV, que podría servir para nuestro objetivo.


Si nos fijamos en los campos disponibles en la entidad “phonecall” encontraremos dos que serán la base de nuestro desarrollo. Se trata de actualstart y actualend, dos campos tipo DateTime que mostraremos deshabilitados en el formulario y con formato de fecha y hora. El objetivo de incluirlos en el formulario es que nuestro código JavaScript pueda acceder a ellos utilizando el DOM (Document Object Model, más información en el SDK) del CRM, y deshabilitados para que el usuario no pueda modificarlos manualmente. El formulario quedaría más o menos como en la figura del final donde aparecen los campos añadidos y los botones.


Ahora tenemos que usar estos campos para calcular la duración. El primer paso, podría ser incluir un botón en el formulario que almacenase el instante de comienzo de la llamada en el campo actualstart. El segundo paso, sería poner otro botón para parar el contador, este botón almacenaría el instante actual en el campo actualend y obtendría la duración de la llamada mediante la diferencia de actualend y actualstart. Y finalmente podemos poner un tercer botón para resetear el contador.


Vale, ¿Y cómo añadimos los botones y la funcionalidad de los botones? Pues como ya dije con ISV.config y Javascript. Lo primero es pensar que código JavaScript tienen que ejecutar los botones. Como por ejemplo:




  • Botón Start Timer


 


Sólo debemos almacenar la fecha y hora actuales en el campo actualstart


 


crmForm.all.actualstart.DataValue=new Date();


 




  • Botón Stop Timer

 


Tomamos la fecha y hora actuales, la almacenamos en actualend, y calculamos la duración.


 


var inicio = crmForm.all.actualstart.DataValue;


var fin = new Date();


var duration =(fin-inicio)/1000/60; crmForm.all.actualdurationminutes.DataValue=Math.round(duration); crmForm.all.actualend.DataValue=fin;


 




  • Botón Reset Timer

 


Ponemos el valor null en los tres campos


 


crmForm.all.actualstart.DataValue=null;


crmForm.all.actualend.DataValue=null;


crmForm.all.actualdurationminutes.DataValue=null;


Una vez que hemos pensado el código, tenemos que añadir los botones a la barra de herramientas de la entidad llamada de teléfono para que lo ejecuten. Esto lo conseguimos añadiendo nuevos elementos Button dentro del elemento ToolBar de la entidad phonecall (llamada de teléfono), cada uno con el código correspondiente en la propiedad JavaScript. A continuación tenéis el xml que he añadido al fichero ISV.config.xml para obtener el resultado de la imagen,


     <Entity name=«phonecall«>


<!– The Timer Tool Bar –>


<ToolBar ValidForCreate=«1« ValidForUpdate=«1«>


<ToolBarSpacer />


<Button Title=«Start« ToolTip=«Start Timer« Icon=«/_imgs/ico_18_history.gif«


JavaScript=«crmForm.all.actualstart.DataValue=new Date();«


AvailableOffline=«true«/>


<Button Title=«Stop« ToolTip=«Stop Timer« Icon=«/_imgs/ico_16_142.gif«


JavaScript=«var inicio = crmForm.all.actualstart.DataValue;


var fin = new Date(); var duration =(fin-inicio)/1000/60;


crmForm.all.actualdurationminutes.DataValue=Math.round(duration);


crmForm.all.actualend.DataValue=fin;«


AvailableOffline=«true«/>


<Button Title=«Reset« ToolTip=«Reset Timer« Icon=«/_imgs/ico_16_5005.gif«


JavaScript=«crmForm.all.actualstart.DataValue=null;


crmForm.all.actualend.DataValue=null;«


AvailableOffline=«true«/>


<ToolBarSpacer />            


</ToolBar>


</Entity>


 


 


 


Como veis el xml tiene algunas propiedades más como la imagen del botón, si está disponible offline, etiqueta y demás. Todas ellas vienen explicadas en el SDK del CRM, os recomiendo que os bajéis la nueva versión 3.0.5 del SDK y le echéis un vistazo.


Ahora sólo tenéis que modificar el fichero web.config para activar las personalizaciones ISV. Buscad la opción que os muestro a continuación y poned el valor dependiendo de en qué cliente queráis verlo.


<add key=«ISVIntegration« value=«All|Outlook|OutlookLaptopClient|OutlookWorkstation|Web«/>


Espero que este pequeño ejemplo os ayude a ver más claramente las posibilidades de la personalización de Microsoft Dynamics CRM con scripts del lado cliente. De todas formas, intentaré hacer algún ejemplo más y mostrar más capacidades del JavaScript, como por ejemplo llamadas a servicios web con AJAX.


Hasta la próxima, espero vuestros comentarios.


Marco Amoedo Martínez


Mis agradecimientos a Félix Durán por su aportación a este post en el grupo de noticias.