martes, 24 de marzo de 2015

Integración Dynamics CRM 2015 con Sharepoint

Hola a todos, hoy vengo a compartirles un artículo que he publicado en la revista compatiMOSS: http://www.compartimoss.com/revistas/numero-23/integracion-dynamics-crm-2015-con-sharepoint

La revista compartiMOSS, es una revista dedicada a Sharepoint, de publicación trimestral. La revista la la dirigen una serie de MVPs de Sharepoint, que algunos tengo el placer de conocer, y que son:

Es una revista a la que sigo y de la cual aprendo mucho de un área que no es mi especialidad (Sharepoint) pero que cada día tiene mas puntos de integración con Dynamics CRM.

En el número 23 de la revista, de marzo de 2015, he colaborado con un artículo relacionado con la integración de Dynamics CRM con Sharepoint, que comparto aquí debajo.

Espero les guste, un saludo.

Dynamics CRM y Sharepoint

Dynamics CRM y Sharepoint son soluciones de Microsoft que tienen una vida ya de más de diez años cada una. Con el paso del tiempo, estas dos soluciones no solo fueron incrementando funcionalidades, sino que se han convertido en grandes plataformas donde poder implementar cualquier tipo de proceso de negocio.

Si bien las posibilidades son ilimitadas en ambas plataformas, por su naturaleza cada una lo hace de otras maneras, y por lo tanto existen escenarios de negocio que se acercan más a una o a otra.

Tradicionalmente se asocia al CRM con las relaciones con los clientes (Ventas, Servicio al cliente y Marketing) y Sharepoint se asocia más a entornos de intranets, gestión de contenidos o documental. Ambas dos asociaciones son correctas, pero desde mi punto de vista son algo simplistas si se tiene en cuenta las posibilidades que ambas plataformas pueden ofrecer.

Desde el punto de vista funcional, Sharepoint y Dynamics CRM tienen enfoques diferentes como se puede apreciar en la siguiente imagen:

clip_image002

Este gráfico explica a alto nivel los enfoques la forma de trabajo en una y otra plataforma, que permiten enfocar los datos y los procesos relacionados con los mismos de diferente manera.

Por qué integrar Dynamics CRM con Sharepoint

La integración de Dynamics CRM con Sharepoint nace de la necesidad de cubrir un GAP funcional en Dynamics CRM en cuanto a la gestión documental que dispone Sharepoint. En Dynamics CRM existe la posibilidad de añadir ficheros adjuntos, que son almacenados como “notas” relacionadas con las entidades de CRM. Pero estos ficheros adjuntos solo se permiten guardar en CRM y nada más. En Sharepoint en cambio podemos disponer de todo un abanico funcional y de colaboración mucho más rico.

Además del GAP funcional, existen un también un tema económico. En la “nube” se paga por uso y uno de estos conceptos es el espacio de almacenamiento. El almacenamiento de Dynamics CRM Online es mucho más caro que el almacenamiento de Sharepoint. Esto es importante, ya que en caso de enfrentarnos a un escenario en Dynamics CRM Online con gran volumen de ficheros adjuntos, se debería avaluar la repercusión del precio de estos adjuntos en cuanto al almacenamiento en la nube.

Arquitectura de integración lado servidor

La integración de la versión actual de Dynamics CRM 2015 con Sharepoint Online está bastante desarrollada aunque existen algunos puntos que deberían ser mejorados para garantizar una completa integración.

En versiones anteriores de Dynamics CRM la integración estaba basada en el lado cliente, en donde mediante un iframe apuntando a Sharepoint, se podía acceder a documentos allí almacenados desde un contexto de un registro de CRM. Esto significa que desde el navegador cliente, es el que directamente accede y se autentica contra el Sharepoint.

Desde Dynamics CRM 2013 Online, existe la posibilidad de integrar Dynamics CRM desde el lado servidor. Esto quiere decir que directamente será Dynamics CRM el que se encargue de conectar con Sharepoint, consultando y actualizado los datos que allí se almacenan. Esto permite que desde el navegador del cliente, solo se acceda a Dynamics CRM, haciendo la integración más transparente para los usuarios.

A continuación se enseñan estos dos tipos de escenarios:

clip_image004

Configurando Integración de documentos Dynamics CRM y Sharepoint

A continuación voy a enseñar paso a paso como configurar Dynamics CRM 2015 Online con Sharepoint Online. Para este ejemplo, he creado una trial de Office365, con una trial de Sharepoint y de CRM.

Lo primero que voy a hacer es crearme una biblioteca de documentos en Sharepoint, donde quiero almacenar los documentos a almacenar provenientes de Dynamics CRM:

clip_image006

Luego en Dynamics CRM en Configuración->Administración de documentos, podemos configurar toda la integración.

clip_image008

Y al habilitar la integración de Sharepoint basada en servidor, introducimos la dirección URL del sitio de Sharepoint:

clip_image009

clip_image010

clip_image011

Luego abrimos la configuración de administración de documentos, donde introducimos la url del Sharepoint y seleccionamos que entidades dispondrán de documentos:

clip_image012

clip_image013

clip_image014

Una vez configurada esta integración, desde un formulario de una Cuenta de CRM, podemos acceder a los Documentos relacionados:

clip_image016

Si es la primera vez que se accede a los documentos de esta Cuenta, aparece la siguiente ventana:

clip_image017

Al confirmar esta acción, se crea la carpeta en Sharepoint, relacionada con el registro de la Cuenta de CRM.

A partir de este momento, los documentos pueden añadirse en CRM, mediante formularios nativos, y estos documentos son almacenados en Sharepoint.

clip_image019

Integración de metadatos de Sharepoint con Dynamics CRM

Otra funcionalidad interesante relacionada con la integración de Dynamics CRM con Sharepoint, es la utilización de metadatos.

La creación de un documento en Sharepoint, permite que otros usuarios, incluso no usuarios de CRM, puedan interactuar con un documento. Una opción podría ser un flujo de aprobación o revisión de un documento. A continuación se detalla cómo se pueden crear metadatos en Sharepoint, que pueden ser consultados directamente en CRM.

Primero creamos una columna con un desplegable de estados, que quiero que se vean en Sharepoint

clip_image021

clip_image022

Así se ven estos registros que se han creado en CRM en Sharepoint:

clip_image024

La entidad que utiliza Dynamics CRM para integrar con Sharepoint se llama “Documentos de Sharepoint”, y si creamos en la misma un campo con el mismo nombre que el metadato creado en Sharepoint, Dynamics CRM se encarga de forma automática de integrar los mismos:

clip_image026

También añadimos esta columna en las vistas de la entidad, para que sea visible. Publicamos y ya tenemos disponible este campo en el listado de documentos:

clip_image028

Esta integración de atributos es muy interesante, pero hay que tener en cuenta que los tipos de datos que hay en Dynamics CRM y Sharepoint no es igual y se debe revisar qué tipo de metadato se puede mapear con qué tipo de campo con CRM. En este ejemplo se ha utilizado un atributo de tipo texto, que puede ser mapeado con cualquier metadato de Sharepoint.

Escenarios avanzados de integración

Lo explicado anteriormente, ofrece una serie de opciones configurables, que están muy bien, pero en muchos escenarios de negocio, las integraciones deben ser algo más complejas. Ya sea porque requerimientos funcionales no cubiertos o por requerimientos de seguridad.

Es por esto, que se abre un abanico de nuevas posibilidades que los propios entornos de Dynamics CRM y Sharepoint ofrecen. Como se comentaba al inicio, la madurez de los productos nos garantiza que “casi” todo requerimiento funcional se pueda conseguir, aunque a veces hay que valorar si los esfuerzos de desarrollo a dedicar para este tipo de extensiones funcionales son los adecuados.

El primero de los escenarios es el siguiente:

clip_image030

Desde Dynamics CRM, se pueden crear Plugins o actividades de Workflow, que hagan llamadas directamente a Sharepoint, o a un web service intermedio que conecte con Sharepoint.

De la misma manera, podría existir un camino inverso desde Sharepoint, hacia Dynamics CRM:

clip_image031

Desde el punto de vista de la interfaz de usuario, en Dynamics CRM se podría añadir un iframe en formularios o Dashboards que apunten a URLs de Sharepoint, o bien crear Recursos web HTML, que conecten directamente al punto REST y consulten datos de Sharepoint y se muestren.

clip_image033

Igualmente el camino inverso, en Sharepoint se podría añadir un iframe con una URL de cualquier registro de CRM, o desarrollar una App o un Webpart, que conecte con los servicios de Dynamics CRM.

clip_image035

Conclusiones

Como puede verse, la integración de Dynamics CRM con Sharepoint, es sencilla de montar y configurar, pero la funcionalidad que ofrece es limitada. De todos modos la madurez de estas dos plataformas permite que se pueda extender a los requerimientos de negocio.

La integración de la gestión documental de Sharepoint en Dynamics CRM cubre un GAP funcional a CRM, y ofrece a Sharepoint la posibilidad de trabajo de documentos que ya vienen relacionados con entidades de negocio de Dynamics CRM.

De los temas que quedarían pendientes de montar, es el tema de la seguridad. En Dynamics CRM la seguridad en implícita, basada en roles de seguridad y en la ubicación jerárquica de los usuarios. En cambio en Sharepoint la seguridad es explícita en cada registro, y por lo tanto se debería tener que desarrollar algo para permitir que esta integración sea más sólida.

Demian Adolfo Raschkovan

Microsoft MVP | Dynamics CRM

Director Técnico | Infoaván Soluciones
mvp@demianrasko.com
@demian_rasko
http://www.demianrasko.com

@ComunidadCRM

http://www.comunidadcrm.com

domingo, 22 de marzo de 2015

Nuevo: Definición de campos clave en entidades (Update 1–Carina)

Esta semana se ha celebrado el Convergence 2015 en Atlanta, EEUU. Como parte del evento se han presentado la nueva versión de Dynamics CRM de primavera (CRM Online 2015 Update 1 (llamada con nombre código “Carina”)).

Esta versión solamente estará disponible en la versión Online, así que usuarios de Onpremise deberán esperar para disfrutar todo lo nuevo que nos ofrece la nueva versión.

El detalle de todo lo nuevo, ha sido publicado ya en el blog del equipo de producto: http://blogs.msdn.com/b/crm/archive/2015/03/18/crm-online-2015-update-1-official-pre-release-content-is-here.aspx

Hoy voy a hablar de uno de las nuevas funcionalidades, que como siempre nos ofrece un mundo nuevo de posibilidades. Se trata de la posibilidad de añadir claves a las entidades, basados en campos de la misma.

Antiguamente, solamente se disponía del campo de tipo “GUID” interno de cada entidad, que se genera automáticamente por Dynamics CRM al crear cualquier registro en la plataforma. Si necesitábamos controlar algo como una clave única, debíamos hacer un Plugin que haga esta validación.

Ahora, vamos a poder crear claves basadas en campos estándar. A continuación os voy a enseñar como funciona con un ejemplo.

Primero, voy a crear una nueva entidad de “Países” (muy original) con un campo con el nombre “Código”.

image

Luego acceso a “Keys” para definirle una clave. Lo que quiero, es definir a esta entidad que el campo clave de la misma sea “Código” (vamos a clave y “nuevo”):

image

Luego vamos y creamos unos cuantos Países por ejemplo:

image

Entonces, lo que voy a hacer ahora es intentar crear un nuevo país con código “2” a ver que ocurre:

image

No me deja. Esto es genial, ya que ahora podemos controlar códigos únicos para que no se repitan. Además no solo funciona en la creación de registros, sino también en la actualización. La clave es única por entidad, y sin filtros ya que se aplica tanto para registros que estén activos como inactivos.

Como siempre, me gusta ir un pasito mas y quería ver que ventajas nos puede ofrecer esto de las claves a nivel de desarrollo, y la verdad es que son muchísimas.

Antes, para realizar cualquier “Update” de registros, debíamos antes recoger el GUID del registro. Ahora vamos a poder hacer actualizaciones basadas en estos campos clave personalizados:

 Entity pais = new Entity("dar_pais");
pais.KeyAttributes.Add(
"dar_codigo", "1");
pais.Attributes.Add(
"dar_name", "España_updated");
service.Update(pais);



O poder actualizar un Contacto por una clave mía (código) y además actualizarle un campo de tipo “Lookup” también sin necesidad de hacer antes una consulta para recoger su GUID interno:




 Entity contacto = new Entity("contact");
contacto.KeyAttributes.Add(
"dar_codigo", "1");
contacto.Attributes.Add(
"dar_pais", new EntityReference("dar_pais", "dar_codigo", "1"));
service.Update(contacto);



Simplemente genial. Piensen en la cantidad de código que nos vamos a ahorrar, solamente por esta nueva funcionalidad. Nuestros códigos serán mucho mas eficientes y sencillos.



Espero les haya gustado, intentaré seguir publicando cosas de estas nuevas que nos trae Carina.



un saludo

martes, 17 de marzo de 2015

Error con Plugin Registration Tool (como solucionarlo)

Una de las cosas mas interesantes de ser un MVP, es la posibilidad de contactar con gente muy diversa y sobre todo tener contacto con el equipo de producto dentro de Microsoft de la tecnología que nos apasiona, en mi caso, Dynamics CRM.

Bien, hoy ha sido uno de esos días en los cuales puede decir que he conseguido una (muy pequeña) contribución para todos los que trabajamos con Dynamics CRM de habla hispana.

Como muchos de ustedes ya sabrán, en la SDK hay una herramienta que se llama Plugin Registration Tool, que sirve para el registro y depuración de Plugins en Dynamics CRM (en online y en onpremise).

Desde la versión 6.1.1, estamos notando los que tenemos equipos en español, que al intentar conectar con un CRM, la herramienta se intenta conectar y luego se queda así totalmente en blanco:

image

Mucho mas no podemos hacer…así que lo único que nos quedaba era utilizar versiones anteriores que si funcionan (la primera para atrás es la 6.1.0. El problema es que si tenemos diferencia de versiones, no podemos instalar el “Profiler” para depurar los Plugins en remoto.

Hasta ahora esto no ha sido un problema para mí y creí que era algo temporal o de mi PC, pero poco a poco me di cuenta que esto le ocurría a mas gente.

Bien, ahora les voy a decir como se soluciona este problema, y parece ser que es algo solamente relacionado con aquellos como yo que tenemos el PC en idioma Español.

Simplemente se debe renombrar la carpeta dentro del PluginRegistrationTool con el nombre “es-es” como muestro a continuación:

image

Con esto, ya lo tendremos resuelto y a correr!

Espero les haya servido para tanto como para mí… un abrazo!

@demian_rasko

sábado, 7 de marzo de 2015

Nueva versión Dynamics CRM 2015 Workflow Tools 1.0.3.0

Sigo evolucionando mi solución y añadiendo nuevas funcionalidades. Mi componente sigue estando disponible en Codeplex: https://msdyncrmworkflowtools.codeplex.com

Completamente abierto, y con el código ahí mismo.

Hoy he añadido un nuevo paso, que permite realizar consultas a cualquier entidad de CRM. La idea es muy fácil, primero añadimos un paso de QueryValues:

image

Una vez disponemos del paso, podemos configurarlo:

image

La idea es fácil, definimos un tipo de entidad un par de atributos para recoger, y un par de campos y valores que filtrar. En el ejemplo anterior, estoy haciendo una búsqueda de “account” (Cuentas) y quiero recoger los campos “address1_line1” y “telephone1”. La cuenta que quiero recoger, es la que tenga como “name” (Nombre”) “"el valor “test”.

La descripción detallada de los campos es:

  • EntityName (required) : the schema name of the entity to be searched
  • Attribute1 (required) : first attribute to be retrieved
  • Attribute2 : second attribute to be retrieved
  • FilterAttibute1 (required) : first filter attribute name
  • ValueAttribute1 (required) : first filter attribute value
  • FilterAttibute2 : second filter attribute name
  • ValueAttribute2 : second filter attribute value
  • ResultValue1 : retrieved value for the first attibute
  • ResultValue2 : retrieved value for the second attibute

Una vez añadido esto, podemos utilizar los dos valores que nos devuelve, en donde queramos. Por ejemplo en un “UPDATE” de una cuenta puedo utilizar los valores devueltos y añadirlos en el campo descripción:

image

Solo nos queda probarlo ahora, selecciono una cuenta, ejecuto este workflow (era manual) y el resultado es el siguiente:

image

Límites:

  • Solamente filtra con campos de tipo “string”
  • Solamente devuelve campos de tipo “string”
  • Los filtros solamente se añaden con condición “and”

Espero poder seguir ayudando a la gente a realizar mejores proyectos y con menos desarrollo.

un abrazo

martes, 3 de marzo de 2015

Nueva versión Dynamics CRM 2015 Workflow Tools 1.0.2.0

He creado una nueva versión de las WorkflowTools, y ya hay 3!

La nueva herramienta permite la compartición de un registro desde su URL, a un Equipo o un usuario (o a los dos a la vez). Adicionalmente permite seleccionar exactamente que privilegios se quieren compartir, y además da la posibilidad de eliminar los privilegios anteriores, de cara a poder “reiniciar” los mismos y estar seguros que la seguridad compartida es la adecuada.

La versión de “Dynamics CRM 2015 Workflow Tools” y está disponible aquí:https://msdyncrmworkflowtools.codeplex.com/

De momento hay tres actividades de Workflow disponibles:

  • Force Calculate Rollup Field: para forzar el cálculo de campos Rollup
  • Apply Routing Rules: para aplicar las reglas de enrutamiento de casos
  • Sharing Record Step: para compartir registros desde Workflows

La nueva funcionalidad de compartición es la siguiente:

image

Un saludo!

miércoles, 25 de febrero de 2015

Dynamics CRM 2015 Workflow Tools

Esta semana he creado un nuevo proyecto en Codeplex, con la idea de ir mejorándolo poco a poco.

Mi objetivo es crear una gran librería de soluciones basadas en Actividades de Workflow que permitan a usuarios o implementadores hacer muchas de las cosas que naturalmente hacemos los desarrolladores.

Si podemos ir acercando mas y mas herramientas a consultores de negocio y usuarios, facilitaremos su trabajo.

Lo he llamado “Dynamics CRM 2015 Workflow Tools” y está disponible aquí: https://msdyncrmworkflowtools.codeplex.com/

De momento solo hay dos actividades de Workflow disponibles:

  • Force Calculate Rollup Field: para forzar el cálculo de campos Rollup
  • Apply Routing Rules: para aplicar las reglas de enrutamiento de casos

Estoy abierto a recibir cualquier idea de nuevas actividades, iré añadiendo periódicamente nuevas que vaya encontrando por ahí.

Intentaré mantenerla para diferentes versiones, pero empezando con CRM 2015, si lo necesitan para versiones anteriores, tenéis todo el código disponible para ser utilizado sin problemas en Codeplex.

Un saludo,

domingo, 22 de febrero de 2015

Ejecución de reglas de enrutamiento para Casos por SDK

Desde CRM 2013, existe la posibilidad de crear reglas de enrutamiento de los casos.

Básicamente, la idea es que mediante una serie de condiciones, los casos puedan ser enrutados a determinadas colas o asignados a equipos o usuarios.

image

Solo puede haber una regla activa, que a su vez puede contener Elementos de regla como se ve a continuación:

image

image

Los elementos de regla, pueden asignar a colas o a equipos dependiendo de condiciones:

image

Ok, esto está muy bueno, pero el tema es que solamente se pueden utilizar desde:

  • Reglas de creación de emails a casos
  • Manualmente desde las vistas o formularios de Casos como se muestra a continuación:

image

Ok, hoy lo que hice fue buscar una manera de que esto se ejecute cuando uno quiera y para esto busqué el mensaje que hace esto que se llama ApplyRoutingRuleRequest (https://msdn.microsoft.com/en-us/library/microsoft.crm.sdk.messages.applyroutingrulerequest.aspx).

La utilización no puede ser mas sencilla:

ApplyRoutingRuleRequest routeRequest = new ApplyRoutingRuleRequest();
routeRequest.Target = new EntityReference(“incident”, new Guid(“{0000-00000-00000-0000}”));
ApplyRoutingRuleResponse routeResponse = (ApplyRoutingRuleResponse)service.Execute(routeRequest);

Mediante este mensaje, lo que hace es enrutar el caso que se le pase con su código, con la regla de enrutamiento activa.

La solución que desarrollé está incluída en un nuevo proyecto que creé en Codeplex, donde iré publicando nuevas herramientas: https://msdyncrmworkflowtools.codeplex.com/

Solamente hay un tema, y es que en algunas versiones de CRM, este método esta fallando y el enrutamiento no funciona. No devuelve error ni nada, pero lo ejecuta correctamente. En el Update Rollup 2 de CRM 2013 SP1 ya esta resuelta esta incidencia (http://support.microsoft.com/kb/2963850) allí dice dentro de lo que se resuelve:

  • Si ejecuta el mensaje de ApplyRoutingRuleRequest en el código se ejecuta sin error, pero no se aplica la regla.

Un saludo!