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.

2 comentarios:

  1. Pregunta: Las reglas del negocio requieren algún permiso especial en un rol, Me cargan en roles específicos y no encuentro la inconsistencia

    ResponderEliminar
    Respuestas
    1. Hola bryan, no entiendo que problema tienes, pero si me lo explicas en detalle, por ahi puedo ayudarte.
      un abrazo

      Eliminar