Solución al error de importación masiva de Microsoft CRM 0x80131500

Si alguna vez estáis importando datos en Microsoft CRM 3.0 utilizando la herramienta de importación masiva, y os topáis con este error en la importación de algún registro sin más explicación en el log que el número de error, aquí tenéis una posible solución. No sé si será la más correcta, ni tampoco cual es la causa «real» de este problema, no he tenido tiempo de darle más vueltas (si alguien lo sabe que deje un comentario), pero este pequeño rodeo os servirá para salir del paso.


Al estudiar los registros que no me importaba la herramienta me di cuenta que no se importaban aquellos que tenían una fecha con el campo día superior a 12… ¿a que ya sabéis que estaba pasando? Efectivamente, estaba aplicando el formato de fechas inglés (ya digo que desconozco el motivo). ¿Cómo lo podemos solucionar?


Abrimos el fichero csv que estamos importando con Microsoft Excel, seleccionamos la columna que contiene la fecha y pulsamos el botón derecho para aplicarle formato al campo. Ahí seleccionamos el formato de fecha y el tipo de presentación mm/dd/aaaa, guardamos el fichero de nuevo y ya lo podemos cargar utilizando la herramienta de importación masiva.


Bueno, es un pequeño rodeo para este error. Si os encontráis con él ya sabéis a que puede ser debido, y si habéis encontrado la causa o alguna otra solución comentadla.


Un saludo,


Marco Amoedo

Reutilizar un campo Picklist en Microsoft CRM

Seguro que alguna vez os habéis encontrado en la situación de tener que añadir un campo de tipo Picklist a varias entidades de Microsoft CRM 3.0, y como sabéis no hay una forma directa de reutilizarlo. Es decir, que tenemos que crear el campo en cada una de las entidades y volver a introducir las opciones del picklist una a una en cada entidad. En un picklist con bastantes opciones y realizándolo para varias entidades puede convertirse en una tarea bastante pesada. Por ejemplo, un desplegable con las provincias de un páis.


Bueno, pues ahí va un pequeño truquillo que os puede ayudar a evitar tener que repetir la tarea de crear un picklist en varias entidades. Lo primero que tenemos que hacer es crear el campo en una de las entidades en la que lo queramos utilizar. Luego exportaremos esa entidad para obtener el fichero XML con la definición de la misma. A la vez que exportamos, una a una, las demás entidades en las que queramos reutilizar el campo de tipo Picklist. Es decir, tendremos un fichero xml con la entidad que contiene el campo, y un fichero xml a mayores por cada entidad en la que queramos añadir el campo.


Ahora debemos abrir el fichero XML de la entidad que contiene el campo picklist y buscar su definición en el XML para copiarla a los ficheros de las otras entidades. Para ello deberemos copiar un par de secciones attribute del xml que definen el campo, y una sección field que define las opciones disponibles en el picklist.


Las secciones attribute las encontraremos en ImportExportXML/Entities/Entity/EntityInfo/entity/attributes y tendrán una pinta parecida al siguiente ejemplo que como veis estarán identificadas por el nombre de esquema del atributo y el nombre de esquema del atributo más el sufijo Name.


<attribute PhysicalName=»New_EjemploPicklist»>

<Type>picklist</Type>

<ValidForCreateApi>1</ValidForCreateApi>

<ValidForUpdateApi>1</ValidForUpdateApi>

<ValidForReadApi>1</ValidForReadApi>

<IsCustomField>1</IsCustomField>

<DisplayMask>ValidForAdvancedFind|ValidForForm|ValidForGrid</DisplayMask>

<Description />

</attribute>

<attribute PhysicalName=»new_ejemplopicklistName»>

<Type>virtual</Type>

<ValidForReadApi>1</ValidForReadApi>

<IsCustomField>1</IsCustomField>

<IsLogical>1</IsLogical>

<AttributeOf>New_EjemploPicklist</AttributeOf>

<XmlAbbreviation>name</XmlAbbreviation>

</attribute>


Y la sección field que debemos copiar la encontraremos ImportExportXML/Entities/Entity/FieldXML/entity/fields y que identificaremos por el nombre de esquema del campo personalizado, tendrá un aspecto como este.


<field name=»new_ejemplopicklist» requiredlevel=»na» defaultvalue=»1″>

<displaynames>

<displayname description=»EjemploPicklist» languagecode=»3082″ />

</displaynames>

<options nextvalue=»6″>

<option value=»1″>

<labels>

<label description=»Opción 1″ languagecode=»3082″ />

</labels>

</option>

<option value=»2″>

<labels>

<label description=»Opción 2″ languagecode=»3082″ />

</labels>

</option>

<option value=»3″>

<labels>

<label description=»Opción 3″ languagecode=»3082″ />

</labels>

</option>

<option value=»4″>

<labels>

<label description=»Opción 4″ languagecode=»3082″ />

</labels>

</option>

<option value=»5″>

<labels>

<label description=»Opción 5″ languagecode=»3082″ />

</labels>

</option>

</options>

</field>


Una vez que tengamos identificadas y copiadas estos tres pedazos de XML que definen nuestro picklist ya sólo tendremos que pegarlos en las secciones correspondientes de las entidades en las que queramos copiar el picklist, y volverlas a importar a Microsoft CRM 3.0. Con esto ya habremos copiado el picklist de una entidad a otras.


Como veis no es un procedimiento demasiado sencillo, pero en picklist con muchas opciones puede ser un buen rodeo para evitar tener que crearlo uno a uno en cada entidad. Espero que le sea de utilidad a alguién, y a ver si en Titan esto ya tiene alguna otra solución más cómoda.


Un saludo,


Marco Amoedo

Novedades de Dynamics CRM 3.0

Hola a todos, llevo unos días sin escribir nada porque me he tomado unas pequeñas vacaciones para coger fuerzas para todas las novedades que nos vienen encima este año (el año de TITAN). Así que hoy vamos a dar un pequeño repaso a temas de Microsoft Dynamics CRM que se han quedado pendientes de comentar y otras cosas que acaban de salir y que irán llegando.


CRM Performance Paper


Se trata de un completo documento de Word que nos aporta información sobre cómo mejorar el rendimiento de Microsoft Dynamics CRM. No esperéis milagros, pero lo que se comenta en el informe puede ser de gran utilidad en muchos casos. Entre otras cosas se tratan los siguientes temas:


Mantenimiento de la BBDD: Regeneración y defragmentación de índices. Tips para la creación de nuevos índices. Eliminación de registros de ejecución de workflow. Mantenimiento de ficheros de almacenamiento y recomendaciones sobre RAID. Proporciona scripts T-SQL para las tareas más comunes (tanto para SQL Server 200 como 2005).


Optimizaciones de los clientes: Se incluyen consejos para optimizar el funcionamiento del cliente web (vistas más restrictivas, campos de búsqueda…) y del cliente Outlook(datasets a sincronizar…). Además de información sobre los hotfix que afectan al rendimiento.


Optimización de Reporting Services: Incluye información bastante interesante sobre solución de problemas de rendimiento relacionados con SRS, además de pistas para mejorar el rendimiento y sobre cómo utilizar un servidor de reports dedicado.


Optimización de IIS: Algunos consejos muy interesantes sobre los Worker Process.


Se tratan más temas, pero estos son los que tienen más «chicha». Vale la pena descargárselo y dedicarle un par de horitas a leerlo con calma. Descarga de Microsoft Dynamics CRM Performance Paper


Exchange 2007


Ya está disponible una actualización del Exchange Email Router que es capaz de trabajar con Exchange 2007, concretamente es capaz de desplegar reglas de reenvío en buzones que residan en Exchange 2007. Más información.


Microsoft Dynamics CRM Analytics Foundation


Ha sido liberada un conjunto de documentación y ejemplos cuyo objetivo es servir de base (acelerador) para la construcción de aplicaciones de Business Inteligence sobre Microsoft Dynamics CRM. Tiene muchas cosas interesantes que pueden servir de base para nuestros desarrollos, a destacar la integración de elementos predictivos de BI en la interfaz de Microsoft CRM. Está disponible como un proyecto en CodePlex (plataforma para proyectos de código abierto de Microsoft), en el sitio del proyecto tenéis más información y unas interesantes imágenes http://www.codeplex.com/crmanalytics. Espero poder probarlo pronto.


Algunas cosillas de Titan


Sé que este es un tema que interesa mucho, en especial las nuevas funcionalidades que vienen y sobre las que aún hay bastante «misterio». En principio «Titan» está previsto para mediados finales de este año, y a medida que se acerquen las fechas espero poder contaros con detalle las novedades. Pero mientras tanto, podemos empezar a elucubrar algo viendo estas capturas de pantalla que están disponibles en el nuevo sitio web http://www.dynamicslive.com


Integración con Microsoft AdCenter, Campañas de marketing on-line y  Colaboración en campañas de marketing



 



Para los que hayáis ido al Convergence EMEA ’06 no es nada nuevo, de hecho en la keynote de Bill Gates ya se veía esto.


Tiene buena pinta eh! Espero comentarios, ¿Qué os parece la plataforma CRM Live!? ¿Que funcionalidades esperáis que se incluyan?….


Un saludo,


Marco Amoedo

Tips para campos Lookup en Microsoft CRM

Después de una semanita en la que no he tenido prácticamente tiempo para poner ningún post en el blog, hoy voy a dejar aquí una recopilación de algunos «tips» que he ido apuntando sobre cosas interesantes de los campos lookup de Microsoft Dynamics CRM 3.0. Espero que os resulte útil.


Fijar la entidad por defecto en un campo Lookup


A veces resulta un poco molesto tener que estar seleccionando el tipo de entidad adecuado cuando queremos seleccionar un registro en un campo de lookup que acepta varios tipos de entidades. Por ejemplo, imaginad que en la empresa os dicen que todos los incidentes de servicio se relacionarán con contactos y no con cuentas, pues puede resultar un poco molesto para la persona que está registrando incidentes tener que estar seleccionando el tipo de entidad relacionada cada vez que quiera relacionar el incidente con un cliente.


Bueno pues esto tiene solución. En el evento form OnLoad() podemos poner una línea de Java Script que cambie el tipo de entidad por defecto de un campo Lookup.


//Establecer tipo de entidad por defecto
crmForm.all.regardingobjectid.defaulttype = «2»;


Como véis no hay más que indicar el EntityTypeCode de la entidad deseada y listo.


Limitar los tipos de entidades que se pueden seleccionar en un Lookup


Siguiendo con el ejemplo anterior. ¿Cómo hacemos para que en el lookup «cliente» de la ficha de casos sólo se puedan seleccionar contactos y no cuentas? Pues, de nuevo utilizando Java Script lo podemos conseguir, aunque esta vez ya se complica un poquito más.


//Establecer solo contactos como tipos de entidad
crmForm.all.regardingobjectid.lookuptypes = «2»;

//Poner el icono a mostrar en los registros
crmForm.all.regardingobjectid.lookuptypeIcons = «/_imgs/ico_16_2.gif»;


No os olvidéis de incluir siempre la segunda línea para establecer el icono que se muestra delante del nombre del registro en el campo de Lookup.


Filtrar los registros disponibles en el Lookup


Y finalmente un «tip» que me encanta, cómo filtrar los registros que aparecen en el cuadro de diálogo del Lookup. Imaginad que tenéis miles de contactos en el CRM, y que queréis establecer el contacto principal de una cuenta mediante el campo disponible a tal efecto en el formulario. Resultaría más cómodo que en el listado de selección del cuadro de diálogo sólo se mostrasen aquellos contactos que se encuentren relacionados con esa cuenta ¿no? Bueno, pues otra vez el Java Script nos va a ayudar.


crmForm.all.primarycontactid.lookupbrowse = 1;
crmForm.all.primarycontactid.additionalparams = «fetchXml=<fetch mapping=’logical’><entity name=’contact’><all-attributes /><filter type=’and’><condition attribute=’parentcustomerid’ operator=’eq’ value='» + crmForm.ObjectId + «‘/></filter></entity></fetch>»;


En la primera línea fijamos el campo lookupbrowse a 1 para indicar que se van a filtrar los resultados a mostrar en el cuadro de diálogo. Mientras que en la segunda línea debemos proporcionar la consulta que utilizaremos para obtener los registro a mostrar, propocionando el FetchXML que la describe.


En este caso el FetchXML simplemente selecciona aquellos contactos que tengan como «parentaccount» (cuenta principal) la cuenta que estamos visualizando en el formulario, de ahí la concatenación del ObjectID en el medio de la consulta.


Sin embargo, hacer este filtrado tiene un efecto colateral que hay que destacar. El botón de crear un nuevo registro en el cuadro de diálogo del Lookup dejará de funcionar, si lo pulsamos mostrará un error. Es lo que tiene utilizar personalizaciones no soportadas.


Bueno, espero que os resulten de interés estos truquillos sobre los campos de Lookup. La semana que viene más.


Un saludo,


Marco Amoedo


PD: Estas personalizaciones no están soportadas, por lo tanto úsalas bajo tu propia responsabilidad y ten en cuenta que pueden provocar problemas a la hora de futuras actualizaciones y/o recibir soporte técnico.