Bien, la idea de hoy es añadir una funcionalidad genérica, que permita de manera sencilla seleccionar varios valores de una tabla relacionada.
El resumen de la entrega de hoy:
Formulario: Cuenta
Evento: OnLoad()
Atributos: (new_paises).
Funcionalidad: Al cargar el formulario, en un IFRAME se crea dinámicamente un listado de checkboxes con los valores de los países disponibles. Mientras se van seleccionando o eliminando los valores de los checkboxes, en un campo ntext, se concatenan los valores seleccionados con sus Guids y sus nombres.
Todo este ejemplo estará como siempre disponible en Codeplex:
http://elblogdedynamicscrm.codeplex.com/documentation
En el XML, he añadido una nueva acción:
1: <action type="multipleselect" attributename="new_paises" entityname="new_pais"
2: entityid="new_paisid" entityattributename="new_name" iframename="IFRAME_paismultiple"/>
La nueva acción se llama “multipleselect” y como su nombre lo indica. Los atributos son los siguientes (iguales al de las versiones anteriores de lookuptocombo y lookuptoradio):
- attributename: nombre del campo de tipo ntext en donde se concatenan los valores en el formulario
- entityname: nombre de la entidad a donde apuntan los checkboxes
- entityid: nombre del campo clave de la entidad
- entityattributename: campo nombre de la entidad que será utilizado para enseñar los valores del desplegable.
- iframename: nombre del iframe donde se incluirá el listado de checkboxes dinámicamente.
1: function MultipleSelect(attributename,entityname,iframename,entityid,entityattributename)
2: {
3: var result=RetrieveEntitiesByFilter (entityname, "statecode", "Active", entityid+","+
4: entityattributename, false, "");
5: var i=0;
6: var svalue="";
7: var svalue=getValue(attributename);
8: if (!svalue)
9: {
10: svalue="";
11: }
12: var HTMLselect="<form style='font-size:11Px;font-family:Segoe UI, Tahoma, Arial;'>";
13: for (i=0;i<result.recordCount;i++)
14: {
15: var selected="";
16: var name=eval("result[i]."+entityattributename);
17: var id=eval("result[i]."+entityid);
18:
19: if (svalue.indexOf(id)!=-1)
20: {
21: selected="CHECKED";
22: }
23:
24: var js="onclick='parent.ActualizoSelects(document,"+result.recordCount+",
25: document.all.attributename.value);'"
26: HTMLselect+="<input "+js+" type='checkbox' name='opt"+i+"' id='opt"+i+
27: "' nombre='"+name+"' value='"+id+"' "+selected+" /> "+name+"<br />";
28: }
29: HTMLselect+="</form> ";
30: HTMLselect+="<input type='hidden' id='entityname' name='entityname'
31: value='"
+entityname+"'/><input type='hidden' id='attributename' 32: name='attributename' value='"
+attributename+"'/>";33: var myIframe=document.getElementById(iframename);
34: myIframe.contentWindow.document.body.innerHTML = HTMLselect;
35: myIframe.contentWindow.document.body.style.margin="0px;";
36: }
El funcionamiento es muy similar a los looktocombo y lookuptoradio pero en este caso cambia un poco el funcionamiento en cuanto a la función que se llama para realizar los cálculos que es “ActualizoSelects()”:
1: function ActualizoSelects(doc,cant, attributename)
2: {
3: var str='';var i=0;
4: for (i=0;i<cant;i++)
5: {
6: if (doc.getElementById('opt'+i).checked)
7: {
8: if (i!=0)
9: {
10: str+="\n";
11: }
12: str+=doc.getElementById('opt'+i).value+';'+doc.getElementById('opt'+i).nombre;
13: }
14: }
15: setValue(attributename,str);
16: }
El ejemplo y la solución completa funcionando la he dejado como siempre en CodePlex.
En el formulario la funcionalidad sería como lo siguiente:
La idea es que en el campo “new_paises” se concatena esa cadena de caracteres en formato .csv. De esta manera, se puede utilizar también este campo en las búsquedas avanzadas.
No hay comentarios:
Publicar un comentario