Descargar un Workflow o Plugin de CRM

En este post vamos a ver cómo descargar un Workflow o Plugin registrado en CRM. Sería algo así como el proceso inverso que realiza el Plugin Registration Tool que trae la SDK de CRM. Mediante esta herramienta podemos registrar (o subir) ensamblados DLL a CRM pero no se nos permite descargarlos.

Para hacer la prueba vamos a crear un Workflow muy simple, lo vamos a registrar y a continuación lo vamos a descargar. El Workflow únicamente escribirá un nuevo registro dentro de una entidad de Log denominada new_log.

Además, para tener una pequeña verificación de que el Workflow que nos descargaremos luego sea el mismo que hemos registrado voy a darle una versión de compilado a la DLL con el valor 3.1.4.1.

Versión compilado Visual Studio

Versión compilado Visual Studio

 

Recordad que además para que un Workflow pueda ser registrado debe contener firma. En las propiedades del proyecto, en el apartado Firma (Signing) añadimos una nueva firma.

Añadir firma a un Workfow

Añadir firma a un Workfow

Compilamos y obtenemos la DLL con nuestro Workflow.

DLL del Workflow compilado

DLL del Workflow compilado

Abrimos el Plugin Registration Tool y registramos nuestro Workflow en nuestra organización.

 Workflow registrado en CRM

Workflow registrado en CRM

Hasta aquí sería el trabajo que solemos hacer para cargar un ensamblado en CRM. Ahora vamos a ver cómo descargarlo. Lo primero de todo es entender cómo se guardan en CRM los ensamblados. Un ensamblado se guarda en la base de datos del mismo modo que cualquier otro registro cuando seleccionamos este modo de registro en el Plugin Registration Tool en la opción Location : Database, que es la opción por defecto. En este caso cuando registramos una DLL en CRM se creará un registro que contendrá, entre otros datos, el contenido del ensamblado. La entidad donde se guardan los ensamblados tiene como nombre lógico (logical name) pluginassembly y, como el resto de entidades, cada registro tendrá un ID único. Para conocer el ID debemos ir a CRM y mediante una búsqueda avanzada a la entidad Ensamblados de Complementos encontraremos el nuestro Workflow. El ID lo podemos obtener abriendo la consola del navegador y localizando la linea en el código.

Obtener un ID de un registro mediante búsqueda avanzada

Obtener un ID de un registro mediante búsqueda avanzada

Ahora, teniendo la entidad y el ID único podemos hacer un Retrieve. Los campos que debemos descargar son el nombre (name) y el contenido del ensamblado (content). Este segundo campo contiene el contenido de la DLL codificado en Base 64. Desde C# es sencillo decodificarlo mediante la clase Convert.

Con todo esto ya podemos descargar y guardar en un archivo la DLL, como en el siguiente ejemplo:

Si ejecutamos ese comando y abrimos la carpeta donde está el ejecutable encontraremos la DLL y podremos comprobar la versión.

DLL descargada con su versión

DLL descargada con su versión

 

Paneles de USD: dónde se encuentran y cómo saber los que hay

Cuando añadimos un hosted control a nuestro USD, uno de los campos que tenemos que rellenar es el Display Group. En este campo hay que indicar dónde va a ir nuestro hosted control dentro del esquema general del USD, o lo que es lo mismo, en cual de los paneles se mostrará cuando abramos nuestra aplicación.

El USD al final es una aplicación como cualquier otra, diseñada con un esquema XAML predeterminado que han organizado los desarrolladores de Microsoft y que nos dibuja sobre la aplicación lo que ya todos conocemos: los paneles laterales que se contraen y expanden, la barra superior con el logo de Unified service desk etc.

Cada uno de estos paneles recibe un nombre definido en el esquema XAML y este es el nombre que se tendrá que poner en el campo Display Group para que una aplicación se cargue exactamente en ese panel. El esquema por defecto que trae el USD contiene varios paneles donde situar nuestros hosted controls.

En la siguiente figura pongo todos los paneles que podremos usar normalmente:

Posición de paneles dentro de USD

Posición de paneles dentro de USD

A estos esquemas habría que añadir el HiddenPanel que nos servirá para incluir hosted control que queremos que trabajen en tiempo de ejecución pero que no se muestren al usuario.

Como vemos la organización es bastante intuitiva. Normalmente nosotros utilizaremos unos pocos de todos estos paneles. El MainPanel es obligado puesto que será donde normalmente veamos el contenido de las páginas CRM que visitemos. Además si queremos integración telefónica, el CtiPanel es ideal para colocar nuestra botonera con los botones de colgar, llamar, transferir etc. Otra cosa importante es que los paneles de la izquierda, uno sobre el otro, tienen definido un Height auto, de modo que podremos usar cualquiera normalmente y aparecerá arriba del todo, si no se ha utilizado ninguno superior. Finalmente añadir que el RightPopupPanel se trata de un panel PopUp que está pensado para ver “Article Preview”. Yo personalmente no lo he dado uso nunca.