Unas cuantas descargas interesantes sobre Microsoft CRM

Últimamente ando un poquito liado, estamos llevando a cabo un proyecto de Implantación de Microsoft CRM muy interesante y que seguro que dará pie a muchos post en el blog, así que no he podido responder a algunos emails y comentarios que me han llegado pero prometo que lo haré J

Os dejo unos cuantos enlaces de descargas interesantes.

Solución al problema de los menús del CRM en Internet Explorer

Hace un mes que empezamos a sufrir un pequeño problema en IE6 que hacía que al abrir un menú del CRM y no seleccionar ninguna opción (hacer click fuera del menú), se produjese un error en Internet Explorer que le obligaba a cerrarse informando de un problema en el fichero Mshtml.dll. En este enlace tenéis más información y la solución al problema

Microsoft CRM Mobile Express Diff Disk

Ben Vollmer nos cuenta en su blog que se han publicado los diff disk para la imagen de demostración de Microsoft CRM, de la que habíamos hablado anteriormente. Esta descarga nos permitirá añadirle a la imagen de Virtual PC el nuevo Cliente Mobile Express sin necesidad de instalarlo manualmente.

Ejemplo: Cómo añadir botones para permitir convertir un e-mail en un caso o una oportunidad

Y finalmente os dejo un ejemplo interesantísimo, y completamente operativo, sobre como extender la funcionalidad de Microsoft CRM. En el ejemplo se añaden unos botones en el toolbar de la entidad e-mail, mediante la personalización del fichero isv.config, y al pulsarlos abren en un diálogo una aplicación web asp.net que se encarga de llevar a cabo los pasos necesarios para convertir un e-mail en un caso o una oportunidad.

Un saludo,

Marco Amoedo

Plantillas de Visio para Microsoft CRM 3.0

Leo en Microsoft CRM Sandbox, que la gente de Invoke Systems ha decido publicar unas plantillas para Microsoft Visio con elementos que nos permitirán crear demos en papel del Interfaz de Usuario. Estas plantillas serán de gran utilidad a la hora de recoger los requisitos de personalización del IU y dejar bien claro cómo va a quedar sin tener que liarnos a hacer personalizaciones en el CRM y capturas de pantalla.



Os dejo el enlace para la descarga desde Microsoft CRM Sandbox, de verdad que merece la pena, yo ya tengo más que claro que lo voy a utilizar en el proyecto en el que estamos trabajando ahora mismo.


Para instalarlas hay que copiar el fichero .vss en la carpeta de formas de Visio, normalmente está en Mis DocumentosMis Formas, y luego iniciar un nuevo documento en Visio y desde el menú archivo->formas abrir la librería de formas de Microsoft CRM.


Muchas gracias a la gente de Invoke Systems por decidirse a publicar las plantillas, y por su gran trabajo sobre Microsoft Dynamics CRM.


Un saludo,


Marco Amoedo


Formas incluidas (más información en Invoke Systems blog):




  • CRM Menu Bar



    • Top Menu Item


    • Menu Item


  • CRM Tool Bar



    • Toolbar Button (Icon & Label)


    • Toolbar Dropdown


    • Spacer


  • CRM Form Page



    • Tab Control Body


    • Tab Control Tab


    • Field Control (for Label)


    • Section Control


    • Textbox


    • Radio


    • Memo/Notes Control


    • Lookup


    • Date/Time


    • Checkbox


  • CRM Home Page



    • Left Navigation Bar (Wünderbar)


    • Left Navigation Bar Item


    • CRM Grid Control



      • Grid View Control


      • Grid Colum


  • All CRM Form Controls support the following features:



    • Label & Field Values


    • Required Levels: None, Recommended, Required


    • Enabled / Disabled


    • Hide / Show Label


  • Other controls support features that typically «make sense».  Be sure to «right-click» on shapes to see all the special properties that are available.



    • Tabs can be active or not


    • Toolbar Buttons can show Icon only, Label Only, Spacer only or any combination


    • Page Controls allow you to set the title

Email en Microsoft CRM y pistas para solucionar problemas

Leyendo los foros, y por consultas que recibo en el email, sé que hay muchas dudas acerca del funcionamiento del e-mail en Microsoft CRM, y también algunos problemas. Así que me he decido a escribir un post explicando el funcionamiento del e-mail en Microsoft CRM 3.0 y la solución a los problemas más típicos. Vamos a empezar por distinguir los dos procesos básicos que tenemos en el email, el envío y la recepción.


Envío


Microsoft CRM permite enviar mensajes de múltiples formas, pero invariablemente los mensajes de salida serán enviados por el Servidor SMTP que se especificó durante la instalación. Y, al contrario de lo que mucha gente cree, este no tiene porque ser Microsoft Exchange. En la siguiente captura de pantalla podemos ver la pantalla del asistente de instalación donde se nos pregunta por el Servidor SMTP que queremos utilizar. La opción que viene marcada por defecto y que muestra la imagen indica que se usará el servidor SMTP del equipo local donde estamos instalando Microsoft CRM (El que viene incluido en Windows), mientras que si queremos utilizar algún otro servidor SMTP tendremos que hacer los ajustes necesarios como si se tratase de configurar un cliente de correo.


 



Lo cierto es que esta pantalla del asistente del proceso de instalación es un poco desafortunada ya que además de preguntar la configuración deseada para el correo saliente, también nos pregunta el nombre del servidor de Exchange que utilizaremos para el correo entrante, en caso de que lo utilicemos pues no es obligatorio, lo que induce a error.


El proceso completo de envío de un mensaje de correo desde Microsoft CRM es el siguiente:



  1. Desde el Cliente Web o los Clientes Outlook creamos un nuevo email
  2. El Servidor CRM procesa la solicitud y crea la correspondiente actividad de email saliente.
  3. El Servidor CRM el verdadero mensaje de email con los archivos adjuntos en caso de existir, y genera el token de seguimiento que se anexa al asunto del Mensaje. (Excepto en las campañas de marketing de envío de email en la que el email real no es enviado automáticamente, luego veremos la solución a este problema).
  4. El Servidor CRM envía el correo real utilizando el Servidor SMTP que tiene configurado, el indicado durante la instalación o el que hayamos fijado cambiando esta configuración (luego veremos como cambiar esta configuración ya que no hay forma directa en el gestor de implementaciones de CRM).



 


Recepción


Al contrario de lo que se piensa, Microsoft CRM no es ningún cliente de correo, no recibe correo… Es una aplicación que nos ofrece la posibilidad de registrar los correos que recibimos para realizar un seguimiento de las actividades de email relacionadas con nuestros clientes. Pero en ningún momento Microsoft CRM se dedicará a consultar a un servidor de correo para comprobar si hay correo nuevo, ni a Exchange ni a ningún otro. Aquí es donde surgen la mayor parte de las confusiones así que vamos a intentar aclararlo lo mejor posible.


Microsoft CRM nos permite, desde los clientes integrado con Outlook, promocionar manualmente correos que tengamos en Outlook al CRM, creando la correspondiente actividad de email en el mismo y relacionándola con los registros del CRM cuya dirección de correo coincida con la del remitente o la del destinatario.


Para evitar tener que promocionar manualmente los emails uno a uno, algo que puede llegar a ser muy tedioso en respuestas a actividades de marketing, los chicos de Microsoft han creado el Exchange Email Router. Esta utilidad incluida con el CRM se compone de una serie de reglas de reenvío (forward), que se instalan en los buzones de los usuarios del CRM, y que reenvían todos los emails recibidos en las cuentas de usuarios al buzón de correo que hemos creado para Microsoft CRM durante la instalación. Y de un Servicio de Windows, MSCRMEXRouterService, que necesita ser instalado en el mismo servidor de Exchange que en el que se encuentre el buzón del CRM. Esto no impide tener un clúster de Microsoft Exchange o tener las cuentas de usuarios repartidas entre varios servidores (habrá que configurar reglas de forward en cada servidor).


El Exchange Router promocionará o no los emails reenviados desde los buzones del usuario en base a la configuración que hayamos establecido el CRM, hacer seguimiento o no del correo (Configuración -> Configuración de organización -> Configuración del sistema -> Pestaña Seguimiento del correo electrónico), y la que tenga cada usuario en particular (Menú Herramientas -> Opciones -> Pestaña Actividades) para decidir si acepta o no acepta mensajes no solicitados. El correo no solicitado es todo correo que no es respuesta a un correo enviado desde el CRM( no tiene un token de seguimiento correcto), y correo solicitado es el que es respuesta a un correo enviado desde el CRM(tiene un token correcto).


El proceso completo de recepción es el siguiente:



  1. Llega un email al buzón del usuario del CRM y las reglas de reenvío envían una copia al buzón del CRM
  2. El Servicio MSCRMEXRouterService comprueba el buzón del CRM(lo hace cada cierto tiempo) y encuentra el mensaje nuevo. Lo envía al Servidor de Microsoft CRM para su procesamiento.
  3. El servidor de Microsoft CRM procesa el correo electrónico, para lo cual comprueba la existencia de un símbolo de seguimiento válido
  4. Si el campo de asunto del mensaje contiene un símbolo de seguimiento válido, el mensaje se considera «solicitado». Se crea una actividad de correo electrónico y se asocia a una
  5. actividad anterior (Siempre que tengamos activado el seguimiento de mensajes en las opciones del sistema en Microsoft CRM).
  6. Si no está presente un símbolo de seguimiento (o existe uno, pero no es válido), Microsoft CRM considera el mensaje de correo electrónico «no solicitado». Si el usuario de Microsoft CRM no está configurado para recibir correo electrónico no solicitado, se detiene el procesamiento. No obstante, si la configuración del usuario de Microsoft CRM le permite recibir correo electrónico no solicitado, se crea y almacena una actividad de correo electrónico.
  7. Los mensajes de correo electrónico procesados satisfactoriamente se eliminan del buzón de Microsoft CRM. Los mensajes que no se procesan satisfactoriamente se mueven a una cola de mensajes con errores (cola de mensajes no enviados) en el buzón de Microsoft CRM, y se informa de ello en el log de eventos de Aplicación del registro de eventos del Servidor.


Recepción (Sin Exchange)


Como ya mencionamos, Microsoft CRM se puede utilizar sin Exchange, y después de leer la sección anterior queda claro que funcionalidad perdemos: El seguimiento automático de mensajes de correo de entrada. Sin Exchange los emails de respuesta a actividades del CRM o todos los que reciba el usuario (dependiendo de la configuración) no serán registrados como actividades de email entrantes en el CRM de manera automática, aunque siempre podríamos hacerlo de manera manual desde algún Cliente Outlook.


Sin embargo, existe la posibilidad de que creemos un Router genérico que realice la misma función que el proporcionado para Exchange pero para cualquier otro servidor de correo que tengamos. Esta posibilidad se detalla al final de un documento de Microsoft donde se explica en detalle como funciona Microsoft CRM sin Exchange, y básicamente informa de que existen dos mensajes del método Execute() del Servicio Web del CRM que nos permiten realizar las mismas funciones que el Router de Exchange.


Algunas soluciones para problemas de email


Antes de nada decir que en el sitio web de Microsoft CRM hay una sección de solución de problemas dedicada al email, os recomiendo echarle un vistazo.


Problemas de Envío


P. ¿Cómo cambiar la configuración del servidor SMTP?


R. Podemos cambiarla modificando unas entradas del registro de Windows en el servidor de Microsoft CRM. En este artículo de la KB se explica como.


P. El envío masivo de emails en las campañas rápidas no se realiza automáticamente


R. Este es un pequeño fallo (o precaución que tiene el CRM), cuando generamos un envío masivo de emails se crean las actividades de envío de email pero no se envía el email real de manera automática. Podemos solucionarlo con un Workflow Assembly como se explican en la segunda parte de este artículo de la KB.


P. El envío masivo de emails en las campañas no se realiza automáticamente


R. Debemos asegurarnos que el Workflow Service esta iniciado y configurado para inicio automático, además de tener configurada como cuenta de usuario la del Servicio de Red en Windows 2003 o la de Servicio Local en Windows 2000.


P. Recibo un mensaje de error al intentar enviar o promocionar un email al CRM


R. Si has modificado en algún momento el Token de seguimiento dejando el valor a nulo la solución al problema está en este hotfix.


P. Recibo el mensaje de error «Failed to Initialize Token» al intentar enviar un email


R. Esto se debe probablemente a que el Servidor SMTP que estás usando no acepta relay desde el servidor de Microsoft CRM, debes configurarlo para que acepte el relay, si estás usando Exchange para el SMTP este artículo de la KB te puede ayudar.


P. Recibo el mensaje de error «Invalid Association: The request association is not valid» al intentar enviar correo desde el Cliente Web


R. Si tienes instalado Software de Antivirus en el Servidor CRM, y has configurado el servidor SMTP en otro servidor distinto al del CRM, la respuesta puede ser este artículo de la KB


Problemas de Recepción


P. ¿Cómo cambiar el Servidor Exchange de recepción?


R. En este artículo de la KB de explican los pasos necesarios, que básicamente consisten en Instalar el Router Exchange en el nuevo servidor, migrar el buzón del CRM a ese servidor, y añadir el servidor al PrivUserGroup del CRM.


Lista de Comprobación para Problemas de Recepción


Aquí en vez de desgranar los distintos problemas que se pueden dar, intentaré daros una lista de comprobación y algunas soluciones.



  1. Utiliza el asistente de implementación de reglas de reenvío para asegurarte de que las reglas están correctas. Si no es así utiliza el asistente para volver a desplegarlas.
  2. Asegúrate de que el Servicio MSCRMEXRouterService está iniciado, sino inícialo, y que está configura para iniciar sesión como cuenta del sistema local
  3. Abre Usuarios y Equipos de Active Directory (Herramientas Administrativas), localiza el grupo de usuarios PrivUserGroup {GUID} de tu implementación y asegúrate del equipo en el que está instalado el Router de Exchange aparece como miembro, si no es así añádelo.
  4. Asegúrate de que tienes activado el seguimiento de correo electrónico en la configuración del sistema. (Configuración -> Configuración de organización -> Configuración del sistema -> Pestaña Seguimiento del correo electrónico)
  5. Comprueba el log de Aplicación del registro de eventos del sistema para ver si hay algún mensaje de warning del Exchange Router indicando que un mensaje no ha podido ser procesado porque no hay ningún registro de Microsoft CRM que tenga la misma dirección de email. El mensaje exacto es más o menos así «[…] was determined to have none of its recipients match a Microsoft CRM user or queue». Si ocurre esto se puede deber a varias causas.

    1. Que los Usuarios de Microsoft CRM hayan sido configurados con una cuenta de correo que no es la que se utiliza para enviar desde Internet. Esto puede pasar cuando nuestro dominio de Active Directory es algo así como organization.com.local mientras que las direcciones de correo para internet son user@organization.com, lo que hace que cuando creemos Usuarios en CRM se coja su nombre de usuario seguido organization.com.local (user@organization.com.local) en vez de la dirección correcta. No hay más que modificar la dirección de email de los usuarios y el problema quedará solucionado
    2. Que el email haya sido respondido, o enviado, a una cuenta que no es la que el usuario tiene configurada para el CRM. Por ejemplo, si nuestra organización tiene dominios organization.com y organization.net puede ser que queramos que nos envíen email utilizando cualquiera de los dos dominios. Para que funcione debemos añadir la segunda cuenta en la ficha de los usuarios del CRM en el campo reservado para ello.

  6. También puede ser que en el Log de Aplicación encuentres un mensaje de error del Router de Exchange que indique algo así «server was unable to process the request», si la aplicación web del CRM está funcionando este error puede ser debido a lo que se comenta en el punto 3.
  7. Si nada de esto soluciona tu problema, utiliza las trazas de Microsoft CRM para obtener más información del error, busca en la KB del CRM, consulta los foros o ponte en contacto con soporte de Microsoft CRM.

 


Nota:


Espero que esto sea de utilidad, dejad todos los comentarios que queráis, tanto si os ha sido de utilidad como si os gustaría añadir algo.


Un saludo,


Marco Amoedo


 


 

CRM Analyzer

Microsoft ha publicado una serie de ejemplos para mostrar las amplias posibilidades analíticas que tiene Microsoft Dynamics CRM en combinación con Analysis Services y Business Scorecard Manager. Como muchos ya sabéis, Analysis Services es el motor para Business Inteligence (OLAP, Data Mining, KPI,etc…) que forma parte de SQL Server, y Business Scorecard Manager es la herramienta para gestión de cuadros de mando integrada en Microsoft Office System.


En la descarga de CRM Analyzer podréis encontrar una base de datos OLAP de ejemplo en combinación con 3 scorecards (o cuadros de mando en la lengua de cervantes) que tratan de mostrar las capacidades analíticas que podemos obtener de Microsoft CRM con estas herramientas. Son un gran ejemplo de cómo podemos extender las capacidades analíticas de Microsoft Dynamics CRM. Sobre todo la base de datos OLAP construida sobre Microsoft CRM.


Un saludo,


Marco Amoedo

Auditoría de datos en Microsoft CRM

El otro día trabajando con un cliente de Plain Concepts me plantearon una cuestión sobre Microsoft CRM bastante interesante ¿Incluye de serie Microsoft CRM algún mecanismo que nos permita auditar las modificaciones de datos en el CRM? Como muchos ya sabéis, Microsoft CRM 3.0 no incluye ningún mecanismo para realizar un log de modificaciones sobre los datos del CRM… Pero sí incluye un magnífico sistema de CallOuts que nos permite crear un sencillo log de modificaciones en una hora o menos.


Ya se os está ocurriendo como hacerlo ¿No? Bueno la idea es sencilla, creamos un CallOut que maneje todos los tipos de métodos de post callout (PostCreate, PostAssing, PostUpdate, PostDelete, etc…) y que se encargue de escribir la información en un fichero de log por ejemplo. ¿Por qué post callout? Pues porque cuando Microsoft CRM dispara un post callout la información ya ha sido tratada por la plataforma, lo que quiere decir que la modificación es en firme, mientras que en los pre callouts no tienes garantizado que el cambio porque el sistema todavía no ha procesado la operación.


Además hay otro aspecto básico que debemos de tener muy en cuenta al trabajar con los callouts. Los callouts se ejecutan siempre de forma síncrona con el proceso del Servidor de Microsoft CRM, tanto pre como post callouts, lo que quiere decir que el hilo de ejecución va a esperar a que el callout termine para seguir. Esto, en ocasiones es aceptable e incluso necesario (pe: cancelar una operación en un precallout), pero en muchos otros casos (sobre todo en post callouts) no es aceptable ya que podemos estar realizando llamadas a Web Services o escribiendo en ficheros lo que ralentizaría el interfaz de usuario del CRM, llegando incluso a poder provocar time outs. Por lo tanto deberemos lanzar los procesos “pesados” en otro hilo de ejecución.


Un ejemplo de código para este callout podría ser el siguiente, pero antes de nada os aviso que lo acabo de escribir y ni siquiera he tenido ocasión de probarlo. Así que no hay ninguna garantía de que funcione correctamente, si lo probáis o lo mejoráis hacédmelo saber dejando un comentario. Por cierto, lo he escrito utilizando la plantilla de proyecto para callouts.


 







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114


using System;
using System.Text;
using Microsoft.Crm.Callout;
using System.Threading;
using System.IO;
using System.Diagnostics;

namespace PlainConcepts.CRMTools.Logging
{
public class LogCallout : CrmCalloutBase
{

public override void PostAssign(CalloutUserContext userContext, CalloutEntityContext entityContext,
string preImageEntityXml, string postImageEntityXml)
{
LogInfo log =
new LogInfo(OperationsType.Assign, userContext.UserId.ToString(), preImageEntityXml, postImageEntityXml);

ThreadPool.QueueUserWorkItem(new WaitCallback(WriteToFile.Write), log);
}

public override void PostCreate(CalloutUserContext userContext, CalloutEntityContext entityContext,
string postImageEntityXml)
{
LogInfo log =
new LogInfo(OperationsType.Create, userContext.UserId.ToString(), postImageEntityXml, null);

ThreadPool.QueueUserWorkItem(new WaitCallback(WriteToFile.Write), log);
}


public override void PostDelete(CalloutUserContext userContext, CalloutEntityContext entityContext,
string preImageEntityXml)
{
LogInfo log =
new LogInfo(OperationsType.Delete, userContext.UserId.ToString(), preImageEntityXml, null);

ThreadPool.QueueUserWorkItem(new WaitCallback(WriteToFile.Write), log);
}


public override void PostDeliver(CalloutUserContext userContext, CalloutEntityContext entityContext,
string postImageEntityXml)
{
LogInfo log =
new LogInfo(OperationsType.Deliver, userContext.UserId.ToString(), postImageEntityXml, null);

ThreadPool.QueueUserWorkItem(new WaitCallback(WriteToFile.Write), log);
}

public override void PostMerge(CalloutUserContext userContext, CalloutEntityContext entityContext,
string preImageMasterEntityXml, string preImageSubordinateEntityXml, string postImageMasterEntityXml)
{
LogInfo log =
new LogInfo(OperationsType.Merge, userContext.UserId.ToString(), preImageMasterEntityXml + » « +
preImageSubordinateEntityXml, postImageMasterEntityXml);

ThreadPool.QueueUserWorkItem(new WaitCallback(WriteToFile.Write), log);
}

public override void PostSetState(CalloutUserContext userContext, CalloutEntityContext entityContext,
string preImageEntityXml, string postImageEntityXml)
{
LogInfo log =
new LogInfo(OperationsType.SetState, userContext.UserId.ToString(), preImageEntityXml, postImageEntityXml);

ThreadPool.QueueUserWorkItem(new WaitCallback(WriteToFile.Write), log);
}

public override void PostUpdate(CalloutUserContext userContext, CalloutEntityContext entityContext,
string preImageEntityXml, string postImageEntityXml)
{
LogInfo log =
new LogInfo(OperationsType.Update, userContext.UserId.ToString(), preImageEntityXml, postImageEntityXml);

ThreadPool.QueueUserWorkItem(new WaitCallback(WriteToFile.Write), log);
}

}

class WriteToFile
{
static object sync;

public static void Write(Object logInfo)
{
Monitor.Enter(sync);
String path = DateTime.Now.Month + «-« + DateTime.Now.Day + «_MSCRM.log»;
StreamWriter sw;
try
{
sw = File.AppendText(path);
sw.WriteLine(logInfo.ToString());
sw.Close();
}
catch (IOException e)
{
if (!System.Diagnostics.EventLog.SourceExists(«CRMDataMonitor»))
System.Diagnostics.EventLog.CreateEventSource(
«CRMDataMonitor», «Application»);

EventLog.WriteEntry(«CRMDataMonitor»,
«Error trying to write the log: n» + e.Message + «n» + e.StackTrace);
}
finally
{
Monitor.Exit(sync);
}
}
}

class LogInfo
{
public LogInfo(OperationsType opType, String userId, String preImage, String postImage)
{
this.opType = opType;
this.userId = userId;
this.preImage = preImage;
this.postImage = postImage;
}

public DateTime time = DateTime.Now;
public OperationsType opType;
public String userId;
public String preImage;
public String postImage;

public override string ToString()
{
return time + «t» + opType + «t» + userId + «t» +
preImage + «t» + ((postImage != null) ? postImage : «»);
}

}

enum OperationsType
{
Assign, Create, Delete, Deliver, Merge, SetState, Update
}
}


Como se ve en el código he utilizado el ApplicationPool para lanzar procesos en background que realicen las escrituras en el fichero de log. También he utilizado una clase estática que contiene el método estático que ejecutan los threads para escribir, lo he hecho de esta forma para asegurar bloqueos con Monitor y así evitar problemas de concurrencia en los accesos a los ficheros de log. Digo ficheros, porque como podéis comprobar el nombre del fichero de log contiene el mes y el día para que cada día se cree un fichero distinto. Además he declarado la clase LogInfo que contiene la información para escribir una entrada de log, y redefinido el ToString() para facilitar la escritura.


Una vez compilado el callout sólo faltaría desplegarlo en el servidor CRM siguiendo los pasos que se explican en el SDK. Recordad que tenemos que registrar el callout para todos los eventos tipo post de todas las entidades que queramos monitorizar. Por ejemplo para registrarlo para el post create de la entidad Cuenta.







1
2
3
4
5
6
7
  <callout entity=»account» event=»PostCreate»>
<subscription assembly=»callout.dll»
class=»PlainConcepts.CRMTools.Logging.LogCallout»
onerror=»ignore»>
<postvalue>@all</postvalue>
</subscription>
</callout>


Como posibles mejoras se me ocurre un par de ellas interesantes: Utilizar el nombre de usuario en vez del GUID, para ello habría que recuperarlo a través de los servicios web. Y hacer el log sobre una BBDD en vez de un fichero. Espero vuestros comentarios sobre el tema.


Un Saludo,


Marco Amoedo

Nuevo CRM Mobile Client Express!

Parece que en Microsoft han vuelto de las vacaciones y por fin se han decido a liberar el nuevo cliente móvil para Microsoft Dynamics CRM 3.0. Como ya habíamos visto, este cliente presenta grandes novedades y ventajas respecto al cliente móvil que ya teníamos disponible. Entre ellas ser una aplicación web, lo que nos ahorrará bastantes dolores de cabeza en la instalación ya que no tenemos que instalar nada en los dispositivos móviles al revés de lo que sucede con el otro cliente móvil. Es más, la aplicación web será compatible con cualquier dispositivo con un navegador compatible con HTML 4.0 (sin necesidad de JavaScript) con lo cual tenemos la posibilidad de utilizarlo desde la inmensa mayoría de PDAs, móviles, etc. Otra gran ventaja es tener el código fuente disponible para modificarla, lo que abre las puertas a adaptarla en caso de necesidad. Para que os hagáis una idea de lo sencillo que es instalar el nuevo CRM Mobile Client Express el manual de instalación son unas 9 páginas, mientras que la guía de implementación del anterior tenía 142 páginas!!


Pero está claro que no todo iba a ser ventajas. Este CRM Mobile Cliente Express tiene un hándicap muy claro con respecto a la versión, no podemos trabajar offline. Es decir, para usar este cliente el dispositivo móvil tendrá que utilizar el navegador web para acceder a la aplicación web del cliente móvil que se alojará en nuestros servidores, con lo cual habrá que disponer de conexión wifi, gprs, 3G o similares. Vamos, que si queremos cliente móvil y trabajar offline este nuevo cliente no será la solución.


El proceso de instalación no es complejo, se trata simplemente de instalar dos aplicaciones web en nuestro servidor IIS, una para la parte de Administración del Cliente Móvil, y otra para el cliente móvil en sí. Además el manual de instalación es bastante claro y conciso. Sólo recordad tener cuidado con los pools de aplicaciones en IIS ya que estas aplicaciones web son .Net 2.0 y el CRM es .Net 1.1.


Una vez completada la instalación tendremos disponible la parte de administración del cliente móvil en la sección de configuración de Microsoft Dynamics CRM. Desde aquí podremos decidir qué entidades publicamos a través del cliente móvil (podemos publicar prácticamente todas), decidir qué tipo de publicación utilizamos en cada entidad (consulta y/o modificación) sin perjuicio de los permisos que tenga cada usuario en su rol, y también podremos establecer los campos que deseamos mostrar y las etiquetas de los mismos. En el manual de usuario que viene junto con la documentación tenéis mucha más información sobre esto, y sobre la funcionalidad que tendrá disponible el usuario de la aplicación.



Por último comentar que también se incluye en la documentación una guía de desarrollo que explica los puntos clave del diseño de la aplicación y como establecer un entorno de desarrollo, de forma que tenemos todas las facilidades para realizar modificaciones sobre la funcionalidad de la misma.


Bueno, yo ya estoy instalándolo en nuestro servidor de pruebas, y ya me está tardando probar el nuevo cliente en mi Motorola MPX220. ¿Qué os parece el nuevo cliente móvil? ¿Veis una limitación grave en la imposibilidad de trabajar desconectado? ¿Lo vais a probar? ¿Qué os parece que sea Open Source? Espero vuestros comentarios.


Enlace: CRM Moblie Client Express


Un saludo,


Marco Amoedo


 


 

Modificar la cadena de conexión de hojas Excel dinámicas

Una de las grandes ventajas de Microsoft CRM es la flexibilidad que da a los usuarios para trabajar en la forma en la que se sientan más cómodos. Un ejemplo de esto es la capacidad para exportar datos a Excel desde prácticamente cualquier vista del sistema, ya que Excel (y en general la familia office) es un entorno de trabajo en el que normalmente un usuario de oficina se mueve como pez en el agua. Personalmente me he quedado sorprendido viendo algunas hojas Excel hechas por usuarios para cubrir sus necesidades de tratamiento de información, hay auténticas maravillas.


Pero Microsoft CRM nos ofrece algo más que simples exportaciones a Excel, como seguramente la mayoría ya conoceréis también tenemos la posibilidad de crear hojas de Excel dinámicas. Hojas que refrescan sus datos consultando al CRM cada vez que las abrimos, para disponer así de los últimos datos actualizados. Esto abre multitud de posibilidades a los usuarios para personalizar el CRM a su gusto, y así trabajar de la forma más cómoda para ellos, gracias a esto podrán crear en Excel gráficos de análisis, listados, cálculos, etc… y que se actualicen automáticamente con los últimos datos de Microsoft CRM. Además los responsables de los sistemas pueden estar tranquilos porque estas hojas se basan en la vistas filtradas, con lo que sólo le mostraran al usuario aquellos registros de Microsoft CRM que su rol de seguridad le permita.


Hay un pero, imaginad que invertís horas en crear una hoja dinámica en un servidor en pruebas y luego necesitáis usarla en otro servidor, o enviársela a un cliente para que la utilice en su CRM. Excel no da ninguna opción para modificar la cadena de conexión de las hojas dinámicas, permite modificar la consulta SQL que genera la vista, pero no la información de conexión a SQL Server… ¿Qué hacemos? Pues la solución no es muy complicada. Resulta que las hojas Excel que genera Microsoft CRM son un documento XML (aunque tenga extensión xls), así que no tenemos más que seleccionar el fichero Excel y abrirlo con el notepad, Visual Studio o un editor XML, y modificar la cadena de conexión en el elemento <Connection>. Por ejemplo:







1
2
3
4
5
6
    <QueryTable xmlns=»urn:schemas-microsoft-com:office:excel»>
<!– … –>
      <QuerySource>
        <ConnectionDRIVER=SQL> Server;APP=Microsoft Office 2003;Network=DBMSSOCN;Trusted_Connection=Yes;
        SERVER=SERVIDORCRM;DATABASE=Organizacion_MSCRM</Connection>
<!– … –>
      </QuerySource>


Espero que este pequeño truquillo os sea de utilidad, espero vuestros comentarios. ¿Os parece interesante la capacidad del CRM para generar hojas dinámicas o no le veis la utilidad?


PD: El truco vale tanto para hojas dinámicas, como para tablas dinámicas


Un saludo,


Marco Amoedo