Category Archives: Basic Functions

CRM 2011 Javascript – working with Option sets

If we want to write the value of an option set in a text field.

 
function onyearchange() {
    var myOptionSet = Xrm.Page.data.entity.attributes.get("lema_year");
    var optionSetText = myOptionSet.getText();
    Xrm.Page.getAttribute("lema_name").setValue(optionSetText);
}

If we need to set the value of an option set based on a text

 

function SetOptionSetValueByText(optionsetAttribute, optionText)  
 {  
  var options = Xrm.Page.getAttribute(optionsetAttribute).getOptions();  
  for(i = 0; i < options.length; i++)  
  {  
  if (options[i].text == optionText)  
   Xrm.Page.getAttribute(optionsetAttribute).setValue(options[i].value);  
  }  
 }  



SetOptionSetValueByText("lema_year","2014");

Advertisements

JavaScript functions for validating IBAN, Bank Account ,ID and Passport Number for Spain

We had to create 3 JavaScript functions to validate ID Numbers, Bank Account Numbers, Passport and International Bank Account Numbers (IBAN) for one of our Spanish Clients.

Here is the solution we took:

Creating and Validating IBAN Internation Bank Account Number


	
function GenerateIban(account) {
 
//Limpiamos el numero de IBAN
            account = account.toUpperCase();  //Todo a Mayus
            account = trim(account); //Quitamos blancos de principio y final.
            account  = account.replace(/\s/g, "");  //Quitamos blancos del medio.
            
            var letra1,letra2,num1,num2;
            var isbanaux;
            var numeroSustitucion;
			
			//Generamos IBAN Temporal
			codigopais = 'ES';
			
            isbanaux = codigopais + '00' + account;
 
			// Cambiamos las letras por numeros.
            letra1 = isbanaux.substring(0, 1);
            letra2 = isbanaux.substring(1, 2);
			
             num1 = getnumIBAN(letra1);
             num2 = getnumIBAN(letra2);		 
			
			 isbanaux = String(num1) + String(num2) + isbanaux.substring(2, isbanaux.length - 2);   
            
			// Movemos los 6 primeros caracteres al final de la cadena.			
            isbanaux = isbanaux.substring(6,isbanaux.length - 6) + isbanaux.substring(0,6);
			
         //Calculamos el resto			
            resto = isbanaux % 97;            
			digitocontrol = 98 - resto;
			
			if(digitocontrol < 10) digitocontrol = '0'+ String(digitocontrol);
			Ibanfinal = codigopais + digitocontrol + account;
 
            if (fValidarIBAN(Ibanfinal)) 
	         {
                Xrm.Page.getAttribute("asisa_codigoiban").setValue(Ibanfinal);
            }
            else 
            {
                alert('Error generando el codigo IBAN');
            }
 
        }
		
		function fValidarIBAN(IBAN) {
 
//Limpiamos el numero de IBAN
            IBAN = IBAN.toUpperCase();  //Todo a Mayus
            IBAN = trim(IBAN); //Quitamos blancos de principio y final.
             IBAN  = IBAN.replace(/\s/g, "");  //Quitamos blancos del medio.
            
            var letra1,letra2,num1,num2;
            var isbanaux;
            var numeroSustitucion;
 
            // Para obtener la letra del NIE solo hay que sustituir la X del principio por un 0 y la Y por un 1 dividir el número entre 23 
            // Letra (X,Y,Z) seguida de número de 7 cifras y otra letra (digito de control). (NIE).
 
            if (IBAN.length != 24) {                
                return false;
            }
 
            // Cogemos las primeras dos letras y las pasamos a numeros
            letra1 = IBAN.substring(0, 1);
             letra2 = IBAN.substring(1, 2);
			
        num1 = getnumIBAN(letra1);
        num2 = getnumIBAN(letra2);
            //Substituimos las letras por numeros.
          isbanaux = String(num1) + String(num2) + IBAN.substring(2, IBAN.length - 2);
         // Movemos los 6 primeros caracteres al final de la cadena.			
        isbanaux = isbanaux.substring(6,IBAN.length - 6) + isbanaux.substring(0,6);
			
         //Calculamos el resto			
            resto = isbanaux % 97;
            
 
            if (resto == 1) 
	{
                return true;
            }
            else 
            {
                return false;
            }
 
        }

function trim(myString)
{
return myString.replace(/^\s+/g,'').replace(/\s+$/g,'');
}

function getnumIBAN(letra)
{
	ls_letras = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';			
	return ls_letras.search(letra) + 10;
}

Validate any Id Document (DNI, NIE, PASSPORT, CIF


var arrayLetras = new Array(44);
// La posición 23 nunca sale, está en el array para las posiciones posteriores a la 23.
arrayLetras = new Array("T", "R", "W", "A", "G", "M", "Y", "F", "P", "D", "X", "B", "N", "J", "Z", "S", "Q",
                                   "V", "H", "L", "C", "K", "E", "T", "0", "9", "8", "7", "6", "5", "4", "3", "2", "1",
                                   "J", "I", "H", "G", "F", "E", "D", "C", "B", "A");

function fCalcularNIF(nif) {
    var correcto = true;
    var resto = 0;
    var dni;
    var letra;

    nif = nif.toUpperCase();
    if (nif.length < 9) // El DNI tiene que tener una logitud de 9 caracteres.
    {
        return false;
    }

    dni = nif.substring(0, nif.length - 1);
    // Comprueba que el dni está compuesto sólo por números
    for (i = 0; i < dni.length; i++) {
        ch = dni.charAt(i);
        if (isNaN(ch)) {
            return false;
        }
    }

    resto = dni % 23;

    if (arrayLetras[resto] == nif.charAt(nif.length - 1).toUpperCase()) {
        return true;
    }
    else {
        return false;
    }
}


// Funcion que comprueba que el parámetro pasado como valor es
// un NIE válido.
// nie: string que contiene el valor del NIE a validar
function fCalcularNIE(nie) {

    nie = nie.toUpperCase();
    //alert(nie);
    var letraX;
    var dni = 0;

    // Si el nie no tiene 3 caracteres o más salimos de la función
    if (nie.length < 9) {
        return false;
    }

    // Cogemos la primera posición del parametro
    letraX = nie.substring(0, 1);
    // Si la primera posicion del nie es una X o una K o una L o una M.
    if ((letraX = 'X') || (letraX = 'K') || (letraX = 'L') || (letraX = 'M')) {
        // Obtengo el número del nie.
        dni = nie.substring(1, nie.length - 1);
        // Comprueba que el dni está compuesto sólo por números
        for (i = 0; i < dni.length; i++) {
            ch = dni.charAt(i);
            if (isNaN(ch)) {
                return false;
            }
        }
    }
    else {
        return false;
    }
    resto = dni % 23;
    var letra = arrayLetras[resto];
    if (letra == nie.charAt(nie.length - 1).toUpperCase()) {
        return true;
    }
    else {
        return false;
    }

}

// Funcion que comprueba que el parámetro pasado como valor es
// un CIF válido.
// cif: string que contiene el valor del CIF a validar
function fCalcularCIF(cif) {

    cif = cif.toUpperCase();
    var acumulado = 0;
    var resto = 0;
    var valorFinal = 0;
    var codigoEntidad;
    var numero;
    var digitoControl;

    // Si el cif no tiene 3 caracteres o más salimos de la función
    if (cif.length < 9) {
        return false;
    }
    // Cogemos el primer caracter del CIF.
    codigoEntidad = cif.substring(0, 1);

    // Cogemos el número del cif que son todos los dígitos menos el primero y el último.
    numero = cif.substring(1, cif.length - 1);

    // Cogemos el último parámetro del CIF.
    digitoControl = cif.substring(cif.length - 1, cif.length);

    for (i = 0; i < numero.length; i++) {
        var ch = numero.charAt(i);
        if (isNaN(ch)) {
            // Si el caracter que estamos tratando no es un numero, no pasa la validación.
            return false;
        }
        if ((i + 1 == 1) || (i + 1 == 3) || (i + 1 == 5) || (i + 1 == 7)) {
            aux = ch * 2;
            if (aux > 9) {
                acumulado = acumulado + (aux % 10) + (aux / 10);
            }
            else {
                acumulado = parseInt(acumulado) + parseInt(aux);
            }
        }
        else {
            acumulado = parseInt(acumulado) + parseInt(ch);
        }
    }

    resto = parseInt(acumulado) % 10;
    if ((codigoEntidad == 'P') || (codigoEntidad == 'Q') || (codigoEntidad == 'S')) //|| (codigoEntidad=='Z') )
    {
        valor = resto + 34;
    }
    /*    
    else if ( (codigoEntidad=='A') && isNaN(digitoControl) )
    {
    if ( confirm('Está dando el alta de una empresa extranjera, ¿desea continuar?') )
    {
    valor = resto + 34;
    }
    else
    {
    return false;
    }
    }
    */
    else {
        valor = resto + 24;
    }

    var letra = arrayLetras[valor];
    if (letra == digitoControl) {
        return true;
    }
    else {
        return false;
    }
}

function fCalcularCIE(cie) {
    arrayLetrasCIF = new Array("A", "B", "C", "D", "E", "F", "G", "H", "I", "J");

    cie = cie.toUpperCase();
    var acumulado = 0;
    var resto = 0;
    var valorFinal = 0;
    var complemento = 0;
    var codigoEntidad;
    var numero;
    var digitoControl;

    // Cogemos el primer caracter del CIE.
    codigoEntidad = cie.substring(0, 1);

    // Cogemos el número del cie que son todos los dígitos menos el primero y el último.
    numero = cie.substring(1, cie.length - 1);

    // Cogemos el último parámetro del CIE.
    digitoControl = cie.substring(cie.length - 1, cie.length);

    for (i = 0; i < numero.length; i++) {
        var ch = numero.charAt(i);
        if (isNaN(ch)) {
            // Si el caracter que estamos tratando no es un numero, no pasa la validación.
            return false;
        }
        if ((i + 1 == 1) || (i + 1 == 3) || (i + 1 == 5) || (i + 1 == 7)) {
            aux = ch * 2;
            if (aux > 9) {
                // acumulado = acumulado + la ultima cifra de aux + la primera cifra de aux
                acumulado = acumulado + (aux % 10) + (aux / 10);
            }
            else {
                acumulado = parseInt(acumulado) + parseInt(aux);
            }
        }
        else {
            acumulado = parseInt(acumulado) + parseInt(ch);
        }
    }

    resto = parseInt(acumulado) % 10;
    complemento = 10 - resto;

    var letra = arrayLetrasCIF[complemento - 1];
    if (letra == digitoControl) {
        return true;
    }
    else {
        return false;
    }

}

function fCalcularDNI(dni) {
    if (dni.length != 8) // El DNI tiene que tener una logitud de 8 caracteres.
    {
        return false;
    }

    // Comprueba que el dni está compuesto sólo por números
    for (i = 0; i < dni.length; i++) {
        ch = dni.charAt(i);
        if (isNaN(ch)) {
            return false;
        }
    }

    return true;
}

function fCalcularPasaporte(pasaporte) {
    var contadorDeLetras = 0;
    for (i = 0; i < pasaporte.length; i++) {
        ch = pasaporte.charAt(i);
        if (isNaN(ch)) {
            contadorDeLetras = contadorDeLetras + 1;
        }
    }

    if (contadorDeLetras == pasaporte.length) {
        return false;
    }

    return true;
}

function fCalcularTarjeta(tarjeta) {
    var contadorDeLetras = 0;
    for (i = 0; i < tarjeta.length; i++) {
        ch = tarjeta.charAt(i);
        if (isNaN(ch)) {
            contadorDeLetras == contadorDeLetras + 1;
        }
    }

    if (contadorDeLetras == tarjeta.length) {
        return false;
    }

    return true;
}

function validarXIF() {


    var _doc = Xrm.Page.getAttribute("asisa_numero").getValue();
    var tipoDoc = Xrm.Page.getAttribute("asisa_tipodedocumento").getValue();

    var Tipo = "";

    if (_doc.length > 0) {

        switch (tipoDoc) {

            case 100000000: Tipo = "DNI"; break;
            case 100000001: Tipo = "NIE"; break;
            case 100000002: Tipo = "NIF"; break;
            case 100000003: Tipo = "Pasaporte"; break;
            case 100000004: Tipo = "Tarjeta de residencia"; break;
            case 100000006: Tipo = "CIF"; break;
            default: break;

        }


        switch (Tipo) {
            case "CIF": valor = fCalcularCIF(_doc); break;
            case "DNI": valor = fCalcularNIF(_doc); break;
            case "NIE": valor = fCalcularNIE(_doc); break;
            case "NIF": valor = fCalcularNIF(_doc); break;
            case "Pasaporte": valor = fCalcularPasaporte(_doc); break;
            case "Tarjeta de residencia": valor = fCalcularTarjeta(_doc); break;

            default: valor = false; break;

        }


        if (!valor) {
            alert("No es un valor correcto para " + Tipo);
        }


    }




}

Bank Account


function validaCuenta() {

    var entidad = Xrm.Page.getAttribute("new_banco").getValue();
    var oficina = Xrm.Page.getAttribute("new_sucursal").getValue();
    var dc = Xrm.Page.getAttribute("new_dc").getValue();
    var cuenta = Xrm.Page.getAttribute("new_cuenta").getValue();

    //Salta en todos los campos para eso comprabamos que primero que esten rellenos todos-

    var completado = false;
    var validacion = true; //

    if (entidad != null && oficina != null && dc != null && cuenta != null) {
        if (entidad.length == 4 && oficina.length == 4 && dc.length == 2 && cuenta.length == 10) {
            validacion = validaLibreta(entidad, oficina, dc, cuenta);
            if (!validacion) alert("Incorrect Bank Account");

        }
        else {
            validacion = false;
            alert("Some numbers are missing.");
        }

    }
    return validacion;
}

function validaLibreta(i_entidad, i_oficina, i_digito, i_cuenta) {
    // VALIDACIÓN DE CUALQUIER LIBRETA DE CUALQUIER ENTIDAD BANCARIA.
    // Funcion recibe como parámetro la entidad, la oficina, 
    // el digito (concatenación del de control entidad-oficina y del de control entidad)
    // y la cuenta. Espera los valores con 0's a la izquierda.
    // Devuelve true o false.
    // NOTAS:
    // Formato deseado de los parámetros:
    // - i_entidad (4)
    // - i_oficina (4)
    // - i_digito (2)
    // - i_cuenta (10)
    var wtotal, wcociente, wresto;
    if (i_entidad.length != 4) {
        return false;
    }
    if (i_oficina.length != 4) {
        return false;
    }
    if (i_digito.length != 2) {
        return false;
    }
    if (i_cuenta.length != 10) {
        return false;
    }
    wtotal = i_entidad.charAt(0) * 4;
    wtotal += i_entidad.charAt(1) * 8;
    wtotal += i_entidad.charAt(2) * 5;
    wtotal += i_entidad.charAt(3) * 10;
    wtotal += i_oficina.charAt(0) * 9;
    wtotal += i_oficina.charAt(1) * 7;
    wtotal += i_oficina.charAt(2) * 3;
    wtotal += i_oficina.charAt(3) * 6;
    // busco el resto de dividir wtotal entre 11
    wcociente = Math.floor(wtotal / 11);
    wresto = wtotal - (wcociente * 11);
    //
    wtotal = 11 - wresto;
    if (wtotal == 11) {
        wtotal = 0;
    }
    if (wtotal == 10) {
        wtotal = 1;
    }
    if (wtotal != i_digito.charAt(0)) {
        return false;
    }
    //hemos validado la entidad y oficina
    //-----------------------------------
    wtotal = i_cuenta.charAt(0) * 1;
    wtotal += i_cuenta.charAt(1) * 2;
    wtotal += i_cuenta.charAt(2) * 4;
    wtotal += i_cuenta.charAt(3) * 8;
    wtotal += i_cuenta.charAt(4) * 5;
    wtotal += i_cuenta.charAt(5) * 10;
    wtotal += i_cuenta.charAt(6) * 9;
    wtotal += i_cuenta.charAt(7) * 7;
    wtotal += i_cuenta.charAt(8) * 3;
    wtotal += i_cuenta.charAt(9) * 6;

    // busco el resto de dividir wtotal entre 11
    wcociente = Math.floor(wtotal / 11);
    wresto = wtotal - (wcociente * 11);
    //
    wtotal = 11 - wresto;
    if (wtotal == 11) { wtotal = 0; }
    if (wtotal == 10) { wtotal = 1; }

    if (wtotal != i_digito.charAt(1)) {
        //alert(wtotal+' y no '+i_digito.charAt(1));
        return false;
    }
    // hemos validado la cuenta corriente

    return true;
}

CRM2011 – C# Datatypes

These are the common datatypes relations between CRM2011 and C# types.

 

CRM2011  Visual Studio 2010 Asign Command SQL Server
EntityReference Entity[“Field”] = new EntityReference(“Entity Related”, Data Type Guid(“Related Entity ID”)) uniqueidentifier
Client Entity[“Field”] = new EntityReference(“Entity Related(account/contact)”, Data Type Guid(“Related Entity ID”)) uniqueidentifier
OptionSet Entity[“Field”] = new OptionSetValue(Data Type Int) int
Currency Entity[“Field”] = new Money(Data Type Decimal) money
2 options Entity[“Field”] = Data Type Bool bit
DateTime Entity[“Field”] = Data Type Datetime o Datetime.ToString(“format”) datetime
Line of text Entity[“Field”] = Data Type String nvarchar
Decimal Number Entity[“Field”] = Data Type Decimal decimal
Integer Number Entity[“Field”] = Data Type Int int
Double Entity[“Field”] = Data Type Double float
Owner Entity[“Field”] = new EntityReference(“Related Entity(systemuser)”, Data Type Guid(“Related Entity ID”)) uniqueidentifier
Long Text Entity[“Field”] = Data Type String (long text) nvarchar(-1)