sábado, 22 de octubre de 2011

Como migrar de CRM Online a On Premise (bajando de la nube)

A veces surge la necesidad de migrar un CRM 2011 que está online (en la nube) a un entorno local en la organización (On Premise).
Para esto hace falta contactar con atención al cliente de Microsoft para solicitar una copia de seguridad de la base de datos de SQL Server que está en la nube.
Todo el procedimiento está publicado en un documento: http://www.microsoft.com/download/en/details.aspx?DisplayLang=en&id=18039

Los requerimientos básicos de sistemas que hay que tener en cuenta (ademas de los de siempre), es que la base de datos de SQL Server sea de la misma versión que la que hay online y que el CRM on-premise de destino tenga todos los Rollups instalados.

Una vez solicitada la base de datos y cargado el Backup recibido por Microsoft en el SQL Server, se debe abrir el Administrador de implementaciones y hacer una importación de la organización.
En el documento explica los pasos a seguir, es un asistente bastante sencillo, pero hay que tener en cuenta que sería recomendable ya tener identificados los usuarios del directorio activo de la organización que se "mapeen" con los usuarios de online, ya que el asistente nos solicitará hacer esto.
Hay que recordar que los usuarios que estaban en online con cuentas de Windows Live Id pasarán a ser usuarios del directorio activo de la organización.
Importador de organizaciones

Espero les sirva en caso que quieran "bajar" de la nube.

un saludo,

jueves, 13 de octubre de 2011

Estadísticas de uso en CRM 2011

He desarrollado una solución muy sencilla que nos permite observar las estadísticas de uso del CRM.
Estas estadísticas nos permitirán ver la evolución por tiempo, por usuario, por entidades e incluso por mensajes ejecutados.
La idea es ver un panel como el siguiente:


Para la instalación de esta solución, simplemente se puede descargar del siguiente enlace y luego importarlo: CRMStats_1_0_0_0_managed.zip

Lo que contiene esta solución es lo siguiente:


Como se ve, simplemente contiene una nueva entidad "Estadistica", con un panel "Estadisticas CRM" y un Plugin con todos sus pasos ya registrados.
Como ejemplo, lo que estoy registrando son solamente los Mensajes de Cuenta y Contacto, pero dependiendo de lo que se desee, se pueden añadir otros mensajes, simplemente utilizando el pluginregistrationtool que viene en la SDK:
El plugin la verdad que no tiene mucha "ciencia" y es muy sencillo su código:

 namespace CRMStats_Plugin
{
public class CRMStats_Plugin:IPlugin
{
public void Execute(IServiceProvider serviceProvider)
{
ITracingService tracingService=null;
try
{
tracingService = (ITracingService)serviceProvider.GetService(typeof(ITracingService));
IPluginExecutionContext context = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext));
IOrganizationServiceFactory serviceFactory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory));
if (context.Depth >= 2) return;
IOrganizationService service = serviceFactory.CreateOrganizationService(null);
Entity stat = new Entity("new_estadistica");
stat.Attributes["new_name"] = context.MessageName;
stat.Attributes["new_entidad"] = context.PrimaryEntityName;
stat.Attributes["new_systemuserid"] = new EntityReference("systemuser", context.UserId);
service.Create(stat);
}
catch (Exception ex)
{
tracingService.Trace("CRMStats_Plugin[Execute()]", "Execution Error: " + ex.Message + "-"+ex.StackTrace);
throw ex;
}
}
}
}

Como se ve, la idea es hacer un plugin muy sencillo que cree registros y luego "aprovecharnos" de las herramientos de gráficos y paneles que tiene CRM 2011 para explotar la información.

Espero les sirva!

abrazo

jueves, 6 de octubre de 2011

Error al acceder al Historial de auditoría en CRM 2011

Existe un pequeño error que ocurre a veces en algunos registros, al acceder al historial de auditoría.
El error que aparece es como el siguiente:

La descripción del error nos puede dar algo de información:

[CrmException: An unexpected error occurred.]

en Microsoft.Crm.Application.Platform.ServiceCommands.PlatformCommand.XrmExecuteInternal()
en Microsoft.Crm.Application.Platform.ServiceCommands.RetrieveRecordChangeHistoryCommand.Execute()
en Microsoft.Crm.ApplicationQuery.RetrieveAuditByObjectCommand.RetrieveData()
en Microsoft.Crm.ApplicationQuery.ExecuteQuery()
en Microsoft.Crm.Application.Platform.Grid.GridDataProviderQueryBuilder.LoadQueryData()
en Microsoft.Crm.Application.Platform.Grid.GridDataProviderQueryBuilder.LoadData()
en Microsoft.Crm.Application.Controls.GridUIProvider.PrepareGridData()
en Microsoft.Crm.Application.Controls.GridUIProvider.Render(HtmlTextWriter output)

El error aparentemente ocurre cuando el sistema no tiene el formato de fecha de US English segun comentan en los foros: http://social.microsoft.com/Forums/zh/crm/thread/117dd980-5a5b-4710-8ca7-4eff9538104b

De todos modos esto ya se debería arreglar con el Rollup 4 (lo he comprobado y es así):
http://www.microsoft.com/downloads/es-es/details.aspx?familyid=c83ae301-1c10-4bd2-a43e-5e8dcd1cad3f&displaylang=es

Al instalar el Rollup 4 deja de dar el error, pero los antiguos siguen dando error. Una buena manera de arreglar esto (de forma no soportada, por supuesto) es borrando los historiales conflictivos de la tabla AuditBase:

delete Auditbase
where 
objectid='85E26447-3965-E011-BC15-000C29A20BB7' 
 
un saludo,

martes, 4 de octubre de 2011

Drag And Drop ficheros como Adjuntos en CRM 2011

Hoy he encontrado un desarrollo muy interesante sobre CRM 2011. Una de las funcionalidades un poco "molestas" de CRM es el tema de añadir adjuntos a una entidad.
Aprovechando funcionalidades de Silverlight y su integración con CRM 2011, se ha creado una solución para poder hacer un drag and drop de ficheros en un formulario de CRM para uqe esos ficheros se almacenen como notas adjuntas.
el funcionamiento es muy sencillo, simplemente se debe importar una solución (http://www.mindthecloud.net/wp-content/uploads/2011/09/Drag2MSCRM_1_0_0_0_managed.zip) que contiene un Web Resource y luego añadir el mismo en algun formulario deseado:


La verdad que es una muy pequeña funcionalidad, pero muy cómoda si tenemos que adjuntar varios ficheros a la vez...

Esta idea la he recogido del blog de "Sebastian W" (http://twitter.com/qmiswax) del artículo: http://www.mindthecloud.net/?p=512)

Gracias! un saludo

viernes, 9 de septiembre de 2011

Problemas en desarrollo de Plugins para Citas

Hola, este artículo es para complementar otro que ya había publicado en relación con los Plugins y las citas (http://crmtoall.blogspot.com/2011/07/plugin-en-la-creacion-de-citas-no-se.html)
En ese artículo explicaba como registrar un plugin en el postCreate de las Citas (como "child pipeline").
A pesar de que eso funciona, no es del todo completo.
Los mensajes de Create de Cita no se llaman siempre de la misma manera, dependiendo de si ha habido un conflicto de Citas o no. que es la típica ventana que aparece cuando hay algun usuario no disponible:

Es decir, si no hay conflicto, el mensaje de Create se llama como "Child", pero si hay alguno, el mensaje de "Create" se llamará recién cuando se haga click en "Omitir y guardar" y como "Parent".

Esto tiene su lógica, ya que al crear una Cita, se llama al mensaje "Book" y si va todo bien, desde el mismo mensaje de Book, se llama al Create (como hijo de este).
En caso de haber un conflicto, entra por el Book, que devuelve al usuario el mensaje de error. Si el usuario confirma la grabación, no se vuelve a llamar al "Book" y se llama directamente al Create (como "Parent").

Esto es un poco complicado, pero es así como funcionan los plugins de Citas.

Es por esto que al crear plugins en las Citas, hay que tener mucho cuidado si es que se llaman correctamente, y probarlos siempre con conflictos y sin conflictos, ya que los plugins se llaman de manera diferente.

un saludo,

miércoles, 31 de agosto de 2011

Usuarios no interactivos en CRM 2011

Antiguamente en CRM 4.0, si necesitabamos que un desarrollo nuestro (una aplicación web por ejemplo) se conecte al CRM con un usuario determinado con unos roles específicos, debíamos consumir una licencia de CRM 4.0. Es decir, crear un usuario, que nunca accederá al CRM como tal, sino que simplemente se utiliza para conectarse a través de la SDK.
Esto cambia con CRM 2011 y se resuelve. Ahora existe la posibilidad de crear usuarios "No interactivos", mediante lo cual podemos crear usuarios que no consumen licencias y que nos permiten conectarnos directamente al CRM desde nuestros desarrollos.
Para hacer esto, lo que hay que hacer es simplemente crear un usuario nuevo, y poner al atributo "Modo de acceso" el valor "No interactivo".
El problema es que hay cierto funcionamiento en el formulario relacionado este atributo que hace que no se vea. Si entramos a la personalización del formulario, se ve que el atributo aparece, pero luego en la realidad no se ve. En realidad lo que ocurre es que donde está ubicado este atributo, se oculta la sección completa.
Entonces lo que hice fue simplemente volver a añadirlo de la siguiente forma:
Luego lo que añado el atributo y publico, puedo ver los valores:


Un saludo,

miércoles, 10 de agosto de 2011

Como hacer Lookup relacionados en CRM 2011

Como todos saben, al añdir atributos de tipo "lookup" en una entidad (por ejemplo selección de Provincias y Países en Cuenta), al hacer click en la "lupa", no se realiza ningún filtro y nos aparecer todos los registros de la entidad relacionada (según los roles de seguridad, claro).

En el "antiguo" CRM 4.0 si queríamos hacer que por ejemplo al seleccionar un País, solo nos muestre las provincias de ese país, había que buscarse la vida con soluciones complejas en javascript no soportadas o desarrollos a medida con ASP.Net.

Afortunadamente Microsoft ha escuchado nuestros gritos desesperados (je) acerca de este tema, y nos da una solución mediante la cual podemos definir estas relaciones simplemente en las personalizaciones del formulario.

Este sería el ejemplo que comento en el formulario de Cuentas:

Esto da por supuesto que tenemos previamente creadas dos nuevas entidades (new_pais y new_provincia) relacionadas entre sí.
De esta manera, al seleccionar un País en la Cuenta, al ir al buscador de Provincias, aparecerán filtradas según el País seleccionado.
Esta funcionalidad funciona también con la "busqueda rápida" de los lookups:

Espero les sea útil.

un saludo,