lunes, 25 de junio de 2012

DynamicForm 1.3: Concatenaciones de campos

Siguiendo con el progreso de nuestro componente, iremos añadiendo funcionalidades que creo que todos nosotros hemos utilizado alguna vez, o que sino, seguro que necesitarán en el futuro alguna vez.

La idea de hoy es añadir la posibilidad de concatenar varios campos en uno solo. Esto suele ser muy utilizado especialmente en algunos casos como en entidades de relación que simulan relaciones N-N y así rellenar en el campo “new_name” la relación.

El resumen de la funcionalidad propuesta hoy es el siguiente:

Formulario: Cuenta
Evento: OnLoad(), OnChange()

Atributos: para este ejemplo, el campo description, y todos los relacionados con la dirección (address1_*).
Funcionalidad: Además de la funcionalidad que ya se disponía, he añadido en el XML la posibilidad de definir “actions”, en un primer momento de tipo “concat” para concatenar campos en uno de destino.

Todo este ejemplo estará como siempre disponible en Codeplex:

http://elblogdedynamicscrm.codeplex.com/documentation

En el XML he añadido una nueva sección:







La idea es que por cada “action” se defina:




  • type: define si la acción a realizar es de tipo “concat” (concatenación)


  • destattribute: define el nombre del atributo donde queremos que se escriba el resultado de la concatenación


  • attributestoconcat: listado de atributos separados por comas y en orden que se quieren concatenar.


  • stringseparator: cadena utilizada para separa los valores regogidos



En cuando a nuestro Javascript en esta versión he añadido un par de funciones nuevas:




function Actions()
{
var nodePath = "//Root/actions/action";
var nodelist = doc.selectNodes(nodePath);
//Actions
LoadXmlWebResource("new_new_test_xml");
for (var i = 0; i < nodelist.length; i++)
{
var attributes=nodelist(i).attributes;
var type= attributes.getNamedItem("type").nodeValue;
var destattribute= attributes.getNamedItem("destattribute").nodeValue;
var attributestoconcat= attributes.getNamedItem("attributestoconcat").nodeValue;
var stringseparator= attributes.getNamedItem("stringseparator").nodeValue;
switch (type)
{
case "concat":
Concat(destattribute,attributestoconcat,stringseparator);
break;
}
}
}

function Concat(destattribute,attributestoconcat,stringseparator)
{
var strConcat="";
var arrattributestoconcat=attributestoconcat.split(",");
for (j=0;j {
if (strConcat!="")
{
strConcat+=stringseparator;
}
var value=getValue(arrattributestoconcat[j]);
if (value!=null)
strConcat+=getValue(arrattributestoconcat[j]);
}
setValue(destattribute,strConcat);

}

Los métodos nuevos son:



  • Actions: que es llamado en Load() y en el OnChange() de los campos definidos para concatenar.


  • Concat: método que recibe los parámetros y concatena los valores en el campo de destino.


Además he añadido una nueva función que no tenía hasta ahora, a pesar de ser bastante básica y creo que no requiere mayor explicación:



function setValue(attributename,value)
{
if (getAttribute(attributename))
getAttribute(attributename).setValue(value);
}


Todo este ejemplo, junto con el resto de versiones completas y funcionando podéis descargarlas de Codeplex, en donde además del código completo, está también la solución completa y funcional.



Les dejo una imagen con este ejemplo funcionando en CRM:



image



Un Saludo!

No hay comentarios:

Publicar un comentario