MSCRM 4.0: Crear dashboards con gráficos

23 05 2011

Recupero a continuación un artículo que escribí a principio del año pasado (2010). Me pareció interesante al releerlo ver como han cambiado las cosas en CRM 2011 en el que ya disponemos de dashboards e integración de Silverlight mediante webresources. Parace que Microsoft ha ido por la línea que muchos de nosotros ya instuíamos en su momento, ¿no?. El artículo hablaba sobre como integrar aplicaciones Silverlight en MSCRM 4.0 para obtener dashboards impactantes. Por otro lado, comentar que en el artículo me refería a las librerías gráficas que NO estaban disponibles en Silvelight 3 pero que ahora en Silverlight 4 (y en breve en Silverlight 5, YA estan disponibles!!!).

Una de las aplicaciones más inmediatas que a uno se le ocurre para usar Silverlight 3 en MSCRM 4.0 es la visualización de gráficos. Por defecto, Silverlight no lleva consigo controles específicos de gráficos. Sin embargo podemos encontrar en internet montones de controles de gráficos para Silverlight, tanto de pago como de libre uso. En concreto, recientemente encontré una biblioteca de controles para crear gráficos que me dejo impresionado. En primer lugar es de libre uso (aunque muestra un link al fabricante). Puede adquirirse licencias de uso por desarrollador si se desea disponer de soporte y no mostrar el link al fabricante.

En cualquier caso, el objetivo de mi artículo no era el de describir esta biblioteca sino el de mostraros como con tan sólo unos minutos he creado un dashboard (como página HTML que contiene un par de gráficos) y lo he conectado a MSCRM 4.0 en un nuevo link (Dashboard) en el Área de trabajo!!! Los datos de estos gráficos no son dinámicos (no se obtienen de la base de datos o del servicio web de MSCRM) pero pueden obtenerse muy fácilmente. De hecho, para que os hagáis una idea, esto gráficos pueden generarse dinámicamente desde una página ASPX por tanto, en el codebehind podéis consultar y cargar los datos como tradicionalmente ya hemos hecho y componer el gráfico antes de que el usuario lo consulte. El resultado (ver figura siguiente) es impresionante, ¿no? Y eso que no he utilizado ni un 10% de la capacidad de esta librería.

Como os comentaba existen un montón de librerías de gráficos para Silverlight (entre ellas tenéis la de Dundas, similar a la que se utiliza en Reporting Services 2008) por tanto, eso no es novedad. Lo que si me gustaría que vierais es la rápida aplicación (y muy vistosa como podéis ver) de esos gráficos para crear dashboards (mediante páginas ASPX o HTML). Por cierto, hablando de vistoso, esta imagen es estática pero, al mostrar el gráfico quedarías impresionados del efecto de fade que le coloca sin más que configurar un parámetro más del control!!! Podéis ver más información de la librería de gráficos en http://www.visifire.com.

Anuncios




SL 3: Error #2104 al publicar aplicaciones en IIS 6

23 05 2011

Intentando mostrar una aplicación desarrollada en Silverlight 3 dentro de un IFRAME de MSCRM 4.0 me encontré con este maldito problema. Tras varias horas perdidas buscando una solución al problema al fin la encontré en http://mmunozs.spaces.live.com/blog/cns!11EE93E8286B18FE!360.entry. Por desgracia la mayoría de máquinas virtuales de MSCRM 4.0 de que dispongo utilizan IIS 6 y por tanto en todas tenia el mismo problema a la hora de publicar aplicaciones en Silverlight. A continuación os transcribo la solución al problema:

Para resolver este problema seguir los siguientes pasos en el servidor IIS:

1. Configurar el tiempo de expiración de contenido.

En la ventana de propiedades del sitio Web seleccionar HTTP Headers y habilitar “Enable content Expiration”. Configurar para que el contenido expire después de un minuto.

2. Registrar los tipos MIME y extensiones de archivos para que el explorador web pueda cargar los manejadores (handlers) correctos.

En la ventana de propiedades y estando en la sección HTTP Headers dar clic al botón MIME Types para agregar los siguientes tipos:

Extension MIME Type
.xap application/octet-stream
.xaml application/xaml+xml




MSCRM 4.0: Cambiar atributo a requerido o recomendado

23 05 2011

Mostramos a continuación como aprovechar una de las funciones disponibles en Global.js en MSCRM 4.0 para cambiar un atributo a requerido o recomendado en un evento de un formulario.
De forma resumida, para pasar un atributo a requerido el código JavaScript es:

SetFieldRequiredOrRecommended(crmForm.all.<atributo>_c, FORM_FIELD_TYPE_REQUIRED, "Required");
crmForm.all.<atributo>.req = 2;

Para pasarlo a opcional:

SetFieldRequiredOrRecommended(crmForm.all.<atributo>_c, FORM_FIELD_TYPE_NORMAL, "");
crmForm.all.<atributo>.req = 0;

Y por fin, para pasarlo a recomandado:

SetFieldRequiredOrRecommended(crmForm.all.<atributo>_c, FORM_FIELD_TYPE_RECOMMENDED, "Recommended");
crmForm.all.<atributo>.req = 1;

La función SetFieldRequiredOrRecommended es una función del sistema MSCRM que se encuentra en Global.js por tanto, disponible desde cualquier formulario de edición de las entidades.





NET: e-Books gratuitos

18 05 2011

En el site de MSDN podéis encontrar e-Books gratuitos (en formato PDF) que son muy interesantes. Entre otros me gustaría destacar los siguientes ya que están muy relacionados con el mundo CRM (aunque no sea específicamente de CRM si que pueden ayudarnos a nuestras tareas de desarrollo de extensiones):

· Programming Windows Phone 7
· Moving to Microsoft Visual Studio 2010
· Introducing Microsoft SQL Server 2008 R2
· Introducing Windows Server 2008 R2
· First Look Microsoft Office 2010

Podéis encontrar los links de descarga en:

 http://blogs.msdn.com/b/microsoft_press/archive/2011/03/03/ebooks-list-of-our-free-books.aspx.





CRM 2011: Mostrar imagenes en un formulario

17 05 2011

Recientemente en el foro de Microsoft he estado compartiendo experiencias sobre la posibilidad de añadir imágenes a los formularios (registros) de CRM 2011. Como ya os mostré en este blog hace un tiempo, en su momento desarrollamos una aplicación para mostrar imágenes en los formularios de CRM 4.0 (https://albporra.wordpress.com/2010/11/15/mscrm-4-0-qurius-image-control/). Ese desarrollo se basaba en la integración de páginas ASPX en el contexto de CRM 4.0 (en el directorio ISV) que, como ya sabréis, ya no está soportado en CRM 2011. Si bien ese desarrollo sigue funcionando para CRM 2011 (por compatibilidad) ya no está soportado por lo que hemos estando buscando alternativas para actualizarlo a CRM 2011.

La alternativa a la aplicación ASPX desarrollada para CRM 4.0 debe pasar por utilizar alguna de las nuevas herramientas: Silverlight, HTML, REST… EN internet podeis encontrar multitud de soluciones sobretodo en Silverlight (incluso en Codeplex podeis encontrar un control con su código fuente). Todos ellos se basan en registrar la imagen a mostrar como una nota (attachment) del registro y mostrarla en un IFRAME o en un webresource (HTML, Silverlight o Image).

Una de las opciones para mostrar (aunque no nos sirve para cargar la imagen, tan solo para visualizarla) la imagen cargada en un archivo adjunto la ha enviado un colaborador del foro de Microsoft como respuesta a un thread en el que estaba respodiendo (http://social.microsoft.com/Forums/en-US/crmdevelopment/thread/4507e5b6-d8e4-4e3d-b2c1-38f16c4c05a6/). El sistema consiste en recuperar todos los archivos adjuntos a través de una llamada REST en JavaScript y reemplazar el contenido de un webresource de tipo imagen el contenido del archivo adjunto. A continuación os muestro la implementación de este sistema:

1. El sistema se basa en la recuperación mediante REST de los nombres de los archivos adjuntos al registro por lo que necesitaremos añadir como webresource y como bibliotecas de la entidad los archivos para JQuery y JSON (podéis descargarlos de internet)

2. Una vez añadidos a nuestra solución como webresource (en el ejemplo los hemos denominado new_JQuery y new_JSON), los seleccionamos como bibliotecas disponibles para el formulario (en el ejemplo, un formulario de la entidad Contact)

3. Añadimos una nueva biblioteca (webresource) de tipo JavaScript en el que definimos la función que llamaremos en el evento OnLoad del formulario. En esta función utilizamos la llamada REST para obtener los nombre de los archivos adjuntos al registro y, si encontramos un archivo adjunto con el nombre contact.jpg, substituimos el contenido de un webresource que hemos añadido al formulario con el contenido del archivo adjunto.

4. Añadiremos también a la definición del formulario de contact un webresource de tipo imagen con una imagen en blanco o indicativa (en este ejemplo, usaremos una imagen alegórica de fotografía para indicar que no se ha asignado aún ninguna imagen al contacto). El nombre del webresource añadido al formulario debe ser WebResource_img.

5. Una vez publicada la entidad contact con todos los cambios añadidos, tan sólo nos queda ver el resultado. En la imagen anterior vemos el aspecto de cualquier registro de contacto al que todavía no hemos adjuntado ninguna imagen. Por defecto se nos muestra la imagen del webresource que hemos colgado como imagen por defecto.

6. Tras añadir a un registro un archivo adjunto de imagen con el nombre de archivo contact.jpg, si refrescamos el formulario podremos ver la imagen adjunta en el webresource de imagen:

Como comentaba al inicio del artículo esta solución me parece muy buena para la visualización de la imagen pero, requiere establecer algunos criterios al usuario para que utilice el sistema estándar de adjuntar archivos. Siempre que pensamos en un control de este tipo pensamos en un control completo que permita seleccionar, previsualizar y subir imágenes… Pero, quizá podamos completar este sistema con algún sistema de selección y subida de archivos en HTML… y siempre nos quedará la solución Silverlight (con todas sus ventajas e inconvenientes).





MSCRM 4.0: Obtener el GUID del registro en un plugin

13 05 2011

Como sabréis, para obtener el GUID del registro en un plugin debemos tener en que mensaje estamos y si estamos en pre o en post. Cada vez que tenemos que recuperar el GUID debemos recordar estos factores y tenerlos en cuenta, eso si no usamos una misma clase para responder a dos mensajes distintos (Create y Update por ejemplo). Pues bien, recopilando las distintas situaciones en que podemos querer recuperar el GUID del registro he creado la siguiente función que os permitirá obtener ese valor independientemente del mensaje:


public static Guid GetKey(IPluginExecutionContext context) {
string id = "";
switch (context.MessageName) {
 case "Create":
  if (context.OutputParameters.Properties.Contains("id")) {
   id = context.OutputParameters.Properties["id"].ToString();
  }
  break;
 case "Update":
  if (context.InputParameters.Properties.Contains(ParameterName.Target) && context.InputParameters.Properties[ParameterName.Target] is DynamicEntity) {
   DynamicEntity entity = (DynamicEntity)context.InputParameters.Properties[ParameterName.Target];
   id = ((Key)entity.Properties[entity.Name + "id"]).Value.ToString();
  }
  break;
 case "Delete":
  if (context.InputParameters.Properties.Contains("Target")) {
   Moniker monikerentity = null;
   monikerentity = (Moniker)context.InputParameters.Properties[ParameterName.Target];
   id = monikerentity.Id.ToString();
  }
  break;
}
if (id == "")
 return Guid.Empty;
else
 return new Guid(id);
}




CRM 2011: Eliminación múltiple de atributos y entidades

9 05 2011

Si bien no es uno de los procesos más habituales en la configuración y personalización de CRM si que en algunas ocasiones nos encontramos con esta necesidad. Me refiero a la posibilidad de eliminar múltiples atributos o entidades en una sola selección. En versiones anteriores si teníamos que eliminar 10 atributos debíamos eliminarlos uno a uno!!! Con la consecuente pérdida de tiempo. En la versión 2011 podemos seleccionar todos los atributos que queremos eliminar (obviamente con los mismos requisitos que anteriormente es decir, que no se parte de una relación, no esté incluido en ningún formulario ni vista…) y eliminarlos en una sola operación.

En el caso de entidades, seleccionamos varias y pulsamos la opción eliminar:

De forma similar, para eliminar varios atributos, los seleccionamos y pulsamos eliminar:

Insisto que, si bien no es una operación habitual, en ciertas ocasiones esta nueva posibilidad de CRM 2011 nos puede ahorrar mucho tiempo. Advertir que en el caso de eliminar varias entidades a la vez, el proceso puede durar bastante tiempo… coffe break?