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

2 comentarios en “Reutilizar un campo Picklist en Microsoft CRM”

  1. Hola Marco, me parece muy bueno este consejo. Que posibilidades hay que modificar la asignación automática de valores enteros que hace CRM a cada una de las opciones del picklist?

  2. Quisiera que me se un consejo.Ahorita estoy utilizando el CRM 1.2, hecho un codigo en java script en la cual se lo estoy colocando a un campo picklist (se llama tipo relacion) y lo que quiero que haga es que obtenga el indice del item seleccionado y dependiendo de este indice quiero cambiar la obligatoriedad de otro campo (e-mail) pero no me esta funcionando. Y este mismo codigo lo utilizo en el CRM 3.0 si funciona
    No tendras otra alternativa para atacar este problemita
    Gracias
    Stefano

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *