CRM 2011: Mostrar formulario en función del valor de un picklist

22 04 2011

La posibilidad de crear varios formularios para una misma entidad y su visualización en función de los roles del usuario abre un mundo de posibilidades. Sin embargo, muchos desarrolladores se preguntan inmediatamente si es posible mostrar un formulario u otro en función del valor de un atributo de la entidad. Así por ejemplo, nos puede interesar que al abrir un registro, se muestre un formulario u otro (todos ellos disponibles para el role del usuario) en función del valor de un picklist.

Pues bien, a continuación os describo un pequeño desarrollo que nos permitirá abrir un registro en un formulario u otro en función del valor de un picklist. Antes de mostrar el desarrollo es importante tener en cuenta que:

1. Cuando en una entidad un usuario tiene disponibles varios formularios por su role, CRM 2011 siempre mantiene el último formulario seleccionado. Así por ejemplo, si disponemos de dos formularios Form1 y Form2 y, al abrir un registro seleccionamos el Form2, al abrir un nuevo registro o al crear uno nuevo, se nos mostrará con el Form2

2. Los formularios que queremos mostrar en función del valor de un atributo deben estar todos disponibles para el role de los usuarios que accederán a los registros de la entidad

3. Al seleccionar por código un formulario u otro debemos ocultar el selector de formularios ya que si no, el desarrollo perdería su gracia ya que, a pesar de mostrar el formulario correcto el usuario podría cambiar a otro formulario

4. Al cambiar de formulario por el selector de formularios, si se ha realizado algún cambio en los valores de los atributos se nos muestra un mensaje de si queremos guardar antes de cambiar de formulario. Por tanto, nuestro desarrollo deberá contemplar la opción de ocultar el selector de formulario para que tan sólo se pueda cambiar de formulario al guardar y en función del valor del atributo

5. Debido al punto 1, cuando el usuario entre en un registro en el que se muestre por ejemplo el Form2, cuando entre en un registro que debe mostrar el Form1 se producirá una primera carga del registro con el Form2 e inmediatamente se cargará el registro en el Form1. Esto producirá un efecto de ‘flicker’ que puede no ser del todo ‘agradable’

6. Cada formulario definido en una entidad dispone de sus propias librerías y funciones por tanto, si queremos realizar un desarrollo común hay que crearlo en un webresource y adjuntarlo como librería en todos los formularios que definamos

Dicho esto, vemos a continuación el desarrollo que nos ha de permitir abrir un formulario u otro en función del valor de un atributo. En el siguiente ejemplo se ha creado el siguiente entorno:

1. Se ha creado una nueva entidad Test con tres atributos: Name (string), Select Form (picklist) y Test Field (string)

2. En el picklist de SelectForm se han creado dos valores 1-Form1 y 2-Form2

3. Se han definido dos formularios Form 1 y Form 2. En el Form 1 se muestran los tres atributos. En el Form 2 solo se muestra el atributo Name y el Select Form

4. Se ha definido un webresource new_OnLoad_Test de tipo JavaScript que se ha añadido como librería en el Form 1 y en el Form 2 (hay que tener en cuenta que cada formulario utiliza sus librerías y funciones!!!). El código de la librería es:


function showFormItems()
{
var lblShow = "Form1";
// Si el valor del picklist no se corresponde con el formulario seleccionado, lo cambia
if (Xrm.Page.getAttribute("new_selectform").getValue() == 2)
lblShow = "Form2";
// Cambia de formulario si no se corresponde con el que queremos mostrar para el valor del picklist
if (Xrm.Page.ui.formSelector.getCurrentItem().getLabel() != lblShow)
{
var items = Xrm.Page.ui.formSelector.items.get();
for (var i in items)
{
var item = items[i];
var itemId = item.getId();
var itemLabel = item.getLabel();
if (itemLabel == lblShow)
{
item.navigate();
}
}
}
// Oculta el selector de formularios
document.getElementById("crmFormSelector").style.display = "none";
}

5. Se ha añadido como función asociada al OnLoad la función showFormItems

Una vez configurado todo lo anterior podemos comprobar que al crear un nuevo formulario con el valor del picklist Form1, siempre se abrirá el registro con el formulario Form 1 y lo mismo para otro registro con Form2, para el cúal se abrirá el formulario Form 2.

Al abrir el Registro con Form1, se abrirá con el formulario de tipo Form1 ya que el picklist tiene el valor Form1 seleccionado:

Al abrir el Registro con Form2, se abrirá con el formulario de tipo Form2 ya que el picklist tiene el valor Form2 seleccionado:

Como comentaba al inicio, al abrir el segundo registro se produce una doble carga de formulario pues CRM 2011 intenta abrir el registro con el último tipo de formulario utilizado (Form1).

En este ejemplo he usado un picklist con dos valores pero, entiendo que sabréis extrapolarlo a cualquier otro tipo de atributo y lógica a aplicar.

Anuncios

Acciones

Information

One response

26 04 2011
Toni Serrano

Un article molt interessant i de gran utilitat.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s




A %d blogueros les gusta esto: