Home

Impedir grabar una cita en dependencia del valor del tipo en CRM2011

webmaster's picture

Nuestro caso está basado en que después de tener clasificados varios tipos de citas, hemos tenido que unificar criterios y se dejan de utilizar alguno de los tipos de citas que antes se utilizaban. Uno de esos tipod e citas que existen en la actualidad es "Others". Como no podemos borrarlos, porque sino los registros de esos tipos de citas que antes existían se quedarían si valor, la solución sería ocultar los tipos de citas que ya no valen al crear una cita nueva y para las citas antiguas creadas, en el momento de que se vayan a grabar, mostrarle un cartel que con ese tipo ya no se pueden grabar y que elija otro de los permitidos.

 

Primeramente vamos a crear una libreria "Apointment_main_libnrary.js" y la vamos a adjuntar a la lista de los archivos que utliza la entidad "Appointment". Dentro de esta libreríoa crearemos la funcion "Form_Onsave" y "Form_Onload" que serán llamadas desde el formulario en los eventos OnSave y OnLoad del formula.rio Main del mismo.

En la figura anterior se muestra como se activa la librería y la llamada al metodo que contiene en el evento OnSave del formulario.

Para el evento OnSave, en el detalle del mismo, en la pantalla de habilitar el evento, marcamos "Pass execution context as first paramenter" debido a que necesitamos saber que el evento OnSave se esta ejecutando en nuestro metodo y poder invalidarlo en caso que nuestras condiciones no se cumplan con la sentencia en javascript "executionObj.getEventArgs().preventDefault(); "

Una vez que realizados los cambios, guardamos el formulario y lo publicamos para que los cambios surtan efecto. Más adelante codificamos nuestra funcion dentro de la libreria anteriormente mencionada tal y como aprarece a continuación.

function Form_onsave(executionObj)
{
// En la pantalla del On_Save tiene que estar activo el "Pass execution object as first parameter"
    // Autor: lazaro Castro
    // Fecha: 23.05.2014
    var invalidType = SaveNoOther();
    if (invalidType == true)
    {
    alert("Appointment cannot has [Other] category. Please change type of appointment category");
    executionObj.getEventArgs().preventDefault();
    }
}
 
En la funcion anterior se llama a la funcion  SaveNoOther para realice las operaciones en funcioón del estado en que se encuentre el  formulario
 
function SaveNoOther()
// Funcion: En dependencia del estado del formulario se actua para resear los valores del "new_appointmenttype"
// o se impide grabar si el valor tiene codigo 20
// Autor: lazaro Castro
 // Fecha: 23.05.2014
{
var CRM_FORM_TYPE_UPDATE = 2;
var CRM_FORM_TYPE_CREATE = 1;
var noOther = false;
var tipoAppointment = Xrm.Page.ui.controls.get("new_appointmenttype");
var options = tipoAppointment.getAttribute().getOptions();
 
switch (Xrm.Page.ui.getFormType()) {
           case CRM_FORM_TYPE_CREATE:
            tipoAppointment.clearOptions();
            for (var i = 0; i < options.length -2; i++){
            if (i != 20){
            tipoAppointment.addOption(options[i]);
            }
            }
                break;
            case CRM_FORM_TYPE_UPDATE:
                if (getValue("new_appointmenttype") == 20){
                noOther = true;
                }
                break;
      }
 
return noOther;
}

En el metodo Form_onLoad() solo introducimos una llamada al metodo SaveNoOther para que resetee la lista desplegable en para los casos de que el fomulario sea nuevo.

function Form_onload()
{
       Código anterior…
       SaveNoOther();
}
 

En la pantalla anterior puede observarse que para los nuevos Appointments ya no se muestra el tipo "Other" antiguo, sin embargo si se muestra para los antiguos Appointments que estan clasificados por ese concepto.

Fuente: 

Centro Práctico de LEMURSOLUTION & Knowledge Base de Microsoft Dynamics

Contacto: 
webmaster