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)
2) Definimos una o varias condiciones que dispararán la regla (las condiciones se agrupan siempre con la condición “Y”)
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:Una vez definida nuestra regla de negocio, se ve así:
Para poner valores en campos:
Para definir campos como obligatorios o no obligatorios:
Para definir la visibilidad de los campos:
Para bloquear o desbloquear campos del formulario:
Una vez guardado, debemos activarlo para ponerlo en funcionamiento:
Allí se ve que en la parte superior derecha, se puede definir para que formulario se aplicará esta regla (o todos).
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í:
Luego modifico el campo “Fax” al mismo valor que tiene el campo “Phone” (333) y lo que ocurre es lo siguiente:
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:
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:
Luego cambio el valor por javascript y quedan iguales, pero la regla PBL no se ha disparado (porque el “pbl rule” se ejecutó antes):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.
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.
Estas funcionalidades nos permiten que usuarios sin conocimientos de desarrollo en Javascript, puedan crear formularios mas dinámicos.