jueves, 8 de octubre de 2009

Como copiar una entidad con todos sus atributos

Muchas veces necesitamos copiar toda la estructura de una entidad, incluyendo sus atributos, relaciones, etiquetas, etc.
Esto suele ocurrir cuando se tiene una entidad a la que no le hemos definido Notas o Actividades, y luego se desea modificar dicha propiedad (que solo se puede definir en la creación de la entidad).
He desarrollado una pequeña función que lo que hace es copiar toda la información de esquema (es decir atributos, relaciones y la definición general de la entidad) de una entidad original, a una nueva. Este desarrollo esta basado en la documentación que aparece en la SDK y es totalmente soportado.
Simplemente la llamada a la misma podria ser:

CopiarEntidad("localhost","Contoso","new_entidadoriginal", "new_nuevaentidadoriginal", true,true);
Los parámetros serían los siguientes:
1) Ip del servidor
2) Empresa
3) Nombre de esquema de la entidad original
4) Nombre de esquema de la nueva entidad a crear
5) true/false si la nueva entidad contendrá notas
6) true/false si la nueva entidad contendrá actividades

El código de la función es un poco largo así que no lo pego directamente aquí, sino que dejo este enlace para descargárselo.

El funcionamiento del código es bastante sencillo. En primer lugar, se recoge dinámicamente los metadatos de la entidad original. Luego creo la nueva entidad y le creo todos los atributos relacionados recorriendo los atributos de la entidad original. Finalmente recorre las relaciones de N:1 de la entidad (campos de lookup de la entidad) y crea las relaciones.

Si utilizan la función deben tener en cuenta:
1) La nueva entidad que se crea, se crea con el nombre para mostrar "copia de ". Esto es así ya que el CRM no permite tener 2 entidades con los mismos nombres para mostrar.
2) Utilizo la clase CrmServiceUtility para la creación de los "CrmLabel". Esta clase esta documentada en la SDK.
3) Sólo esta preparado para copiar una entidad personalizada.
4) Por ahora esta función no copia ni vistas ni personalizaciones de formulario.
5) Se deben añadir las referencias a los web services de CRM ("CrmSdk" y "metadataService")

Espero les sirva este código, intentaré ir mejorandolo de a poco en siguientes artículos.

Un saludo

5 comentarios:

  1. Gracias.. muy util tu informacion!

    ResponderEliminar
  2. ¿podriais explicar que hay que hacer con el código, paso a paso, para poder obtener una copia de una entidad???
    Disculpad mi atrevimiento, pero soy novisimo en esto del CRm. Gracias

    ResponderEliminar
  3. hola Ismael. este codigo funciona con crm 4.0 y dudo que funcione con 2011.
    el codigo es funcional y para utilizarlo debes crear un proyecto de visual studio y llamar a al mismo apuntando a tu servidor de crm. debes probarlo en algun emtorno de desarrollo primero obviamente. un abrazo.

    ResponderEliminar
  4. el texto del menmsaje de informe de errores, al publicarlo, se "transforma" en ilegible.

    ResponderEliminar
  5. hola imanol.
    el codigo no funciona en el onload de un formulario ya alli. solo puedes poner codigo javascript y este codigo es .net.
    para traducirlo deberias crearte un proyecto de visual studio y ponerte a desarrollar. siento no poder ayudarte mas en este momento. si necesitas esto para hacetlo para una sola entidad, te recomiendo hacerlo a mano que vas a tardar menos.
    un abrazo

    ResponderEliminar