sábado, 28 de septiembre de 2013

Lógica de negocio portable en CRM 2013 (PBL Rules)

Una de las nuevas funcionalidades que mas me han sorprendido sobre CRM 2013, es lo conocido como “PBL (Portable Business Logic) Rules”.
Esta nueva funcionalidad ofrece la posibilidad de creación de formularios dinámicos con una arquitectura similar a la que yo tenía en la cabeza cuando desarrollé DynamicForm el año pasado (http://www.demianrasko.com/2012/08/dynamicform-tutorial-de-implantacion.html). La idea que tenía en la cabeza era que no haga falta que se desarrolle todo por Javascript desde cero, cada vez que se nos presentaban formularios que debían cambiar dependiendo de diferentes condiciones.
Bueno, Microsoft ya nos ofrece esta funcionalidad “OOB” (Out of the box), lo cual se agradece ya que además dispone de un interfaz de usuario muy amigable.
Los pasos para definir una nueva “Business Rule” son los siguientes:
1) Ir a las personalizaciones de la entidad y crear una nueva (en este caso en Cuenta)
image
2) Definimos una o varias condiciones que dispararán la regla (las condiciones se agrupan siempre con la condición “Y”)
image
Lo bueno y nuevo de estas condiciones, es que se pueden definir condiciones de comparaciones entre campos además de cadenas de texto fijas, por ejemplo en el caso que muestro, estoy definiendo la condición de que el Teléfono principal sea igual al Fax.
3) Definir la Acción o acciones a realizar. Las acciones pueden ser de diferente tipo:
Para mostrar mensajes de error en los atributos:
image
Para poner valores en campos:
image
Para definir campos como obligatorios o no obligatorios:
image
Para definir la visibilidad de los campos:
image
Para bloquear o desbloquear campos del formulario:
image
Una vez definida nuestra regla de negocio, se ve así:
image
Allí se ve que en la parte superior derecha, se puede definir para que formulario se aplicará esta regla (o todos).
Una vez guardado, debemos activarlo para ponerlo en funcionamiento:
image
Una vez activado, no hace falta publicar la entidad, y ya lo tenemos disponible, a continuación muestro lo que ocurre.
Cuando se abre el formulario de una Cuenta se ve así:
image
Luego modifico el campo “Fax” al mismo valor que tiene el campo “Phone” (333) y lo que ocurre es lo siguiente:
image
Como aclaración adicional, hay que tener en cuenta que los javascript que tengamos en el load() del formulario se disparan después de la ejecución de las PBL Rules (salvo lo de mostrar los mensajes de error, que aparecen después). A continuación se puede ver como mi javascript del “Load” que dispara un alert, se dispara, pero por debajo ya podemos ver que Ticker Symbol ya esta en solo lectura y obligatorio y el campo “Web site” está ya oculto:
image
Como siempre, intento ir un poco mas lejos. He creado un Javascript en el load, que pone un valor
   1: function carga()
   2: {
   3:     alert("load");
   4:     Xrm.Page.getAttribute("telephone1").setValue("333");
   5:     alert("cambiado el valor de Phone");
   6: }
 
 
Entonces inicialmente Phone y Fax tienen valores diferentes:
image
Luego cambio el valor por javascript y quedan iguales, pero la regla PBL no se ha disparado (porque el “pbl rule” se ejecutó antes):
image

Para que se ejecute la regla de negocio, se deberá disparar el “Onchage” del campo Phone.

Por esto último, habrá que tener cuidado con mezclar Reglas de negocio PBL y código javascript, teniendo en cuenta también que los PBL se ejecuta o actualizan solamente en el Load (antes de los load() de javascript) y en los onchange de los campos.
Los PBL Rules son parte de las personalizaciones de una entidad, como las vistas, formularios o campos. Por lo tanto viajan en las soluciones con las entidades a las que pertenecen.

Estas funcionalidades nos permiten que usuarios sin conocimientos de desarrollo en Javascript, puedan crear formularios mas dinámicos.

jueves, 26 de septiembre de 2013

Quick View en formularios de Dynamics CRM 2013

Hoy voy a hablar sobre una nueva funcionalidad que nos ofrece Dynamics CRM 2013, que permite que en una zona de un formulario podamos ver información de alguna de las entidades relacionadas de la misma.

Estos formularios se llaman “Quick View Forms”, que básicamente es una forma de resumir ciertos datos de la entidad, para que se vean de forma sencilla en otros formularios. Esto sirve por ejemplo para mostrar un resumen con unos campos de la Cuenta en el formulario de un Caso, información de un Contacto en una nueva cita, etc.

Para explicar esta funcionalidad voy a enseñar un ejemplo de creación de un formulario de tipo “Quick View” y enlazarlo con una entidad relacionada. Para crear el formulario de este tipo debemos ir a las personalizaciones y seleccionar este tipo de formularios:

image

Definimos el formulario, en donde podemos añadir atributos e incluso entidades relacionadas (aunque no se puede añadir javascript):

image

Entonces vamos al formulario de Citas, y añadimos el nuevo formulario “New form” recién creado y publicamos:

image

Ahora si creamos una nueva cita, al rellenar el campo “Regarding” ya podemos ver el quickview form:

image

Excelente! y sobre todo, extremadamente fácil. Con el “viejo” CRM 2011, si queríamos hacer esto, o bien poníamos el formulario completo del Contacto (con el ribbon y todo), o bien debíamos desarrollar (mas costoso). Ahora tenemos la solución directa y sencilla que sirve para cubrir estas necesidades.

La única limitación de momento es el tema de no poder añadir Javascript ni siquiera para consultar desde el formulario “padre” los datos del “hijo”, ojalá esto se permita en futuras actualizaciones.

Abrazo!

martes, 24 de septiembre de 2013

Curso de Desarrollo con Dynamics CRM

Academia de la Comunidad CRM

Hoy me alegra anunciar el lanzamiento de una nueva iniciativa de la Comunidad CRM (http://www.comunidadcrm.com) en la he participado activamente. para Acceder a la Academia ir a: http://www.comunidadcrm.com/academia/

Hemos preparado una seria de cursos en español relacionados con Dynamics CRM, y a mí me ha tocado el curso de desarrollo.

El temario completo del curso incluye 31 vídeos cortos que se irán publicando poco a poco y estarán disponibles para toda la comunidad. En total mas de 3 horas de puro desarrollo en CRM, que espero les pueda ser útil.

El temario completo del curso es el siguiente (incluyo enlace a la primera lección):

  • Lección 1 – Introducción [http://www.comunidadcrm.com/academia/2013/09/23/curso-de-desarrollo-con-dynamics-crm-leccion-1-introduccion/]
    • Introducción
  • Leccion 2 – Aplicaciones .NET
    • Introducción
    • Conexión a Dynamics CRM
    • Explicación Early/Late Bound
    • Early/Late bound ejemplos CUD
    • Consultas de datos a Dynamics CRM
    • Consultas con Linq
    • Consutlas con FetchXML
    • Consultas con Queryexpression
    • Consultas con Retrieve
    • Consultas con FilteredViews
    • Otros mensajes de CRM
    • Trabajo con Metadata
    • Mejores prácticas (best practices)
    • Gestión de errores (Troubleshooting)
  • Leccion 3 – Código Client side
    • Introducción
    • Código Javascript
    • Consultas REST y SOAP desde Javascript
    • Depuración de Javascript
  • Lección 4 – Plugins
    • Introducción
    • Desarrollo de un Plugin inicial
    • Registro de Plugins
    • Depuración de Plugins
    • Imágenes en Plugins
    • Autenticación en Plugins
    • Plugins asíncronos
    • Ilmerge y Soluciones
  • Lección 5 – Actividades de Workflow (Workflow Activities)
    • Introducción
    • Desarrolo de un Workflow Activity inicial
    • Parámetros a Workflows Activities
    • Depuración de Workflow Activities

La verdad que el esfuerzo ha sido importante durante muchos fines de semana, pero espero les guste.

Un abrazo,

domingo, 22 de septiembre de 2013

Autosave en Dynamics CRM 2013

En el nuevo Dynamics CRM 2013, la funcionalidad de Autosave, hasta ahora solo disponible para CRM 2011 Online, se despliegue para todos los formularios de CRM. Esta funcionalidad por lo tanto se convierte en una funcionalidad general de Dynamics CRM. Esto es una funcionalidad que aporta mucho a los usuarios, ya que hace mucho mas ágil el funcionamiento, permitiendo que el guardado de datos sea algo automático.
A pesar de esto, en muchos entornos, es posible que esto puede provocar funcionamientos no esperados, por esto primero intentaré explicar como funciona, para luego ver alternativas posibles.
El autosave funciona de la siguiente manera:
Al abrir un formulario de CRM aparece en la parte inferior derecha un disco:
image
Al modificar cualquiera de los campos del formulario cambia a lo siguiente:
image
Cada 30 segundos a partir del primer cambio, los datos modificados (los “Dirty”) se envían al servidor y se guardan:
image
Cuando esto ocurre hay que tener en cuenta lo siguiente:
1) Todos los plugins relacionados se disparan (síncronos y asíncronos)
2) Todos los workflows relacionados se disparan (síncronos y asíncronos)
3) El formulario hace un “refresh” de los datos, sin hacer un “postback” de toda la página.
4) Los eventos del Save del formularios son ejecutados
5) Al hacer un Autosave, los eventos del “load” del formulario no se disparan (solo se disparan al cargar el formulario por primera vez). De hecho estos eventos tampoco se disparan si se hace un Save manual. Es decir, para que el Load se vuelva a ejecutar, hay que cargar de nuevo el formulario (hacer un postback).
6) No existe botón de guardar de forma manual en el menú superior, pero dándole al disco se puede grabar manualmente.
Ok, así es como funciona el Autosave. Lo bueno es que podemos deshabilitar esta funcionalidad de forma global para todo el CRM en la configuración de la organización:
image
Una vez deshabilitado el autosave, en el formulario aparece un nuevo botón de Guardar (como en CRM 2011):
image
Ok, hasta aquí todo bien. Pero el problema surgirá cuando un cliente nos pida deshabilitar el Autosave, pero solo para determinadas entidades. Para esto no hay nada previsto a nivel de configuración, sino que se debe controlar a través de código en Javascript.
Para esto, primero creamos un WebResource de tipo Javascript con el siguiente método (el número 70, nos dice que es un Autosave):
   1: function preventAutoSave(econtext) {
   2:     var eventArgs = econtext.getEventArgs();
   3:     if (eventArgs.getSaveMode() == 70 || eventArgs.getSaveMode() == 2) {
   4:         eventArgs.preventDefault();
   5:     }
   6: }
   7:  


image

Luego añadimos la llamada en el OnSave del formulario a dicho método:

image


image


Una vez publicados los cambios, el Autosave deja de funcionar para el formulario en que hemos añadido este código.

Para el usuario final es como si no existiese el Autosave, es totalmente transparente. Si el usuario intenta cerrar la ventana, aparece la típica advertencia de que los cambios no están guardados:

image

Y si intentas navegar a otra página ocurre lo mismo:

image

Si el usuario quiere guardar los cambios deberá hacer click en donde se muestra a continuación de forma manual:

image
Espero les sea de ayuda este pequeño resumen, y a tenerlo en cuenta para nuevas implementaciones con Dynamics CRM 2013!

domingo, 15 de septiembre de 2013

Dynamics CRM 2013 ya está casi aquí!

 

Guauu!, por donde empezar? Dynamics CRM 2013 ya ésta a la vuelta de la esquina, y necesito empezar a hablar de todo lo nuevo que se nos viene.

He decidido empezar a hablar a nivel general, resumiendo poco a poco las cosas nuevas, que no son pocas, para ir después explicándolas una a una en detalle.

A nivel general las mejoras se centran en la parte del usuario, sobre todo en los cambios de interfaz y otras nuevas funcionalidades muy útiles. Me he encontrado con grandes novedades, que realmente me han encantado, estoy seguro que a todos les encantarán y que los usuarios lo agradecerán mucho.

Por empezar por una parte, el nuevo CRM 2013 se ve así:

image

La navegación cambia mucho, la Navigation bar que había antes, ahora aparece en la parte superior con menús desplegables:

image

image

La interfaz de usuario cambia totalmente, viéndose mucho mas limpia y ágil y, sobre todo, se han eliminado los fastidiosos popups.

En cuanto a algunos de los temas que encuentro mas interesantes de la nueva versión destaco los siguientes:

  • Los Ribbon, dejan de existir, a partir de ahora se utilizan los Command bars:

image

  • “Inline editing”: en entidades como oportunidades u ofertas, se pueden editar línea a línea (sin popups) las líneas:

image

  • Formularios de tipo vista rápida (Quick view forms): son formularios de solo lectura que pueden ser incluidos en otros formularios. Por ejemplo, un formulario de una cuenta en un Caso:

image

image

  • Nuevo tipo de campo “Image” para poder añadir imágenes a los registros (por ejemplo se podría crear una entidad de países, cada una con sus banderas):

image

image

  • Posibilidad de habilitar la búsqueda rápida (Quick find) de hasta 10 entidades a la vez:

image

image

  • Nuevo formato de campos de tipo “Phone”, para habilitar “Click to call”:

image

image

  • Nuevo tipo de seguridad a través de grupos de acceso (“access teams”), que se definen con una plantilla de seguridad y luego registro a registro:

image

image

image

image

  • Workflows síncronos, se ejecutan como si fueran plugins (realmente maravillosos!):

image

image

  • Existen nuevos campos que se componen de otro vario, por ejemplo para las direcciones:

image

  • Posibilidad de creación de flujos de proceso de negocio (Business process flow), como en Polaris Online, pero ahora mucho mas completos con la posibilidad de añadirlo a cualquier entidad, mas de una por entidad y posibilidad de exportarlos en soluciones:

image

  • Lógica de negocio portable (PBL- Portable Business Logic): es la posibilidad de añadir automatismos a los formularios, sin necesidad de introducir código javascript. Con una condición, se pueden ocultar campos, poner mensajes de error, poner requeridos o valores determinados:

image

image

  • Existe un cliente gratuito para Windows 8 y iPad:

image

  • Nuevos tipos de Formularios de creación rápida:

image

image

  • “Custom Actions”: Esta funcionalidad nos permite crear acciones personalizadas, con una serie de pasos definidos en un workflow y que puede recibir parámetros de distintos tipos y que puede ser llamada desde el “Execute” de los Web Services de CRM:

 

image

image

En resumen, hay mucho nuevo y todo me encanta! Lo he estado probando y funciona de maravilla y sobre todo RÁPIDO y ÁGIL!

Creo sinceramente que el camino por donde se está dirigiendo la solución es el correcto, lo cual me da muy buena expectativas a futuras versiones y futuras mejoras. Mi mas sincera enhorabuena a todo el equipo de producto de Dynamics CRM por el buen trabajo realizado!

Esto es solo el comienzo, viene mucho mas, mas y mas….espero que esta introducción rápida les sirva y os guste. Iré añadiendo análisis en detalle de cada uno de los puntos las próximas semanas.

Saludos cordiales!!