Ocultar / mostrar un botón en Dynamics CRM con Ribbon Workbench (y no morir en el intento…)

 


En este post te voy a enseñar los pasos mínimos para agregar lógica con Ribbon Workbench (RWB) y ocultar/mostrar un botón estándar en Dynamics 365 CRM.


Caso de estudio:

Supongamos que como desarrolladores nos piden ocultar el botón de “Desactivar” cuenta si el campo “Contacto principal” contiene datos. Este es un ejemplo trivial y quizás carezca de sentido. Pero para los efectos de lo que quiero mostrar alcanza.



Solución:

Debemos configurar, usando RWB, una “Enable Rule” que sirva para habilitar / deshabilitar el botón “Desactivar”. Esa acción se puede traducir en un true / false, donde true sería “habilitar” y false “deshabilitar”. La “enable rule” nos va a permitir ejecutar esa acción sobre el botón pero necesitamos darle la inteligencia a dicha acción. Esto lo vamos a lograr con una función de JavaScript.

Pasos:

  1. Crear una solución y agregar la tabla account con su metadata. Si nunca utilizaste RWB, acá te dejo un post anterior donde explico como usarlo por primera vez.
  2. Creamos la lógica en JavaScript de lo que queremos hacer. En este caso devolver un true si la cuenta no tiene dato de contacto principal y false en caso contrario. Recordar que necesitamos, de algún modo, el contexto donde esa función es invocada. Este contexto es el que nos va a permitir acceder al atributo dentro del formulario.

    Aquí va la función:

  3.         function ShowButton(PrimaryControl) { 

        var primaryContact = PrimaryControl.getAttribute("primarycontactid"); 

        if (primaryContact !== null) { 

            var primaryContactValue = primaryContact.getValue(); 

            return primaryContactValue !== null;

            } else { 

                return true;

            }

        }

  4. Crear un webresource del tipo JavaScript, dentro del mismo agregar la función creada en el paso anterior y que vamos a invocar dentro de la “Enable Rule” en RWB




Abrir RWB, cargar la solución creada en el punto 1. Editar el comando del botón desactivar, agregar una nueva enable rule, invocando la función de JS creada en el punto 2.

Como el cambio lo haremos sobre el contexto del formulario cuando abrimos un registro, debemos editar el ribbon relacionado a “Form” tal como se muestra en la imagen.



En otro post, menciono que es una buena práctica clonar el botón existente y hacer los cambios sobre el botón clonado. Sugiero que si estas iniciando a aprender a usar RWB lo hagas. Para mi ejemplo que quiero mostrar y como se trata de un entorno trial omití ese paso.


Para que tengas en cuenta, un botón en el menú del CRM consta básicamente de: 
  • Botón: Objeto por el cual el usuario hará interacción.
  • Comando: Acción o lógica que ejecutará dicho botón al ser presionado.
  • Las “Display rules” y “Enable rules” pueden ser opcionales. Y es la lógica por la cual el botón se mostrará en la interfaz y se habilitará su uso según el contexto. Las display rules son reglas que se ejecutan del lado del servidor y las Enable rules se ejecutan del lado del cliente.
Como estamos editando un botón estándar, no necesitamos tocar ni los comandos, ni los display rules. Solo queremos editar el Enable Rule ya que es lógica que se ejecutará del lado del cliente (JavaScript). 

Una vez seleccionada la opción “Customise Button”, en el panel derecho se cargarán el botón más los comandos y acciones atadas a dicho botón.
Una vez que se carguen los componentes, hacer click sobre el comando del botón. A continuación en el panel derecho se van a cargar todas las propiedades asociadas al botón.



Hacer click en “Add Enable Rule”

A continuación configurar lo siguiente:

Add Step: “Custom Rule”. Dentro de la Custom Rule colocar el nombre de la función JS que tiene la lógica, en nuestro ejemplo se llama “ShowButton”. Luego referenciar el webresource donde se encuentra nuestro código. Si buscas por nombre del recurso y haces click sobre la lupa, buscará en todo el sistema dicho recurso.

Por último, agregar un parámetro. En nuestro caso un “CRM Parameter” y como valor, seleccionar “PrimaryControl”. Este parámetro es el registro que contendrá el contexto en el cual queremos invocar esta lógica. Es como el formContext.



Una vez configurado todo esto, publicar los cambios desde aquí:



Demora unos minutos en publicar los cambios. A veces puede suceder que de un mensaje de error asociado a conexión cerrada o timeout. Esto es porque detrás realiza un “Publish All”. En ese caso, forzar una publicación manualmente desde la solución y verificar si el cambio esta aplicado, sino repetir la acción. 


En caso de algún error grave, RWB alertará y no dejará publicar.

 

Una vez que termina el proceso, refrescar la pantalla de D365 CRM y probamos: 

  •          Cuenta con contacto principal (debería ocultarse el botón Desactivar)

  •          Cuenta sin contacto principal (deberíamos poder ver el botón Desactivar)


        Espero te haya servido el post 😉. Hasta el próximo post!!






Comentarios