miércoles, 2 de julio de 2014

Relaciones de Maestro Detalle en SharePoint 2007 con jQuery (simple y efectivo) [Parte 2]

Introducción
Un requerimiento que siempre surge en SharePoint tiene que ver con manejar relaciones de maestro-detalle. He visto y utilizado diferentes formas, con ventajas y desventajas que siempre dependen del escenario en que nos encontremos. En el artículo original mostramos un ejemplo para WSS 3.0 que utiliza programación del lado del cliente.

Si no leíste ese artículo, te recomiendo su lectura en: Relaciones de maestro detalle en SharePoint 2007.

Segunda parte
En esta segunda parte vamos a modificar uno de los 4 scripts, el del padre, para que soporte diferentes tipos de contenido en el hijo. A continuación el código (cambios resaltados):

<script type="text/javascript">

// Agregar esta CEWP debajo de la vista de la lista Padre


// Parámetros importantes

// Posición en que se encuentra la columna ID
var posicion_id = 3;
// Posición en que se encuentra la columna Tipo de Contenido
var posicion_tc = 4;
// Nombre de la lista hija
var lista_hija = "blabla";
// Texto para el botón o imagen
var texto_boton = "<img style='border: none;' src='/_layouts/images/itann.gif'/ title='Agregar ...' >";
// Estilo del botón nuevo
var estilo_boton = "";
// Título columna
var titulo_columna = "Agregar";
// Tipos de Contenido
var tipos_de_contenido = {
Proyecto:"0x010039837982075D1E4490A428B24D078C36", 
Programa:"0x01004B51B7C49BE3CE459ECEE01CACD0CF2F00C53AA5923F258A41A1C1A8354004CF68", 
Producto:"0x01004B51B7C49BE3CE459ECEE01CACD0CF2F00C53AA5923F258A41A1C1A8354004CF68"
};

// Fin de Parámetros importantes



// Id de ítem
var identificador;

// Tipo de Contenido
var tipo_contenido;

// URL del sitio
var sitio= window.location.href;
var origen = encodeURIComponent(sitio);
var posicion_listas = sitio.indexOf("Lists/");
sitio = sitio.substring(0, posicion_listas); 


// URL de nuevo elemento en el hijo
var nuevo_hijo = sitio + "Lists/" + lista_hija + "/NewForm.aspx?source=" + origen + "&padre=";


// Cambiar Título de columna
$(".ms-listviewtable > tbody > tr > th #diidSortID").text(titulo_columna);


// Cambiar columna
// Asumo que la lista usa la vista standar que posee la clase .ms-listviewtable
$(".ms-listviewtable > tbody > tr").each(function( index ) {  

// Obtengo el ID del elemento
identificador = $(this).find("td:nth-child("+posicion_id+")").text();

// Obtengo el Tipo de Contenido
tipo_contenido = $(this).find("td:nth-child("+posicion_tc+")").text();

// Cambio el ID por el botón nuevo
$( this ).find("td:nth-child("+posicion_id+")").html("<a style='" + estilo_boton + "' href='" + nuevo_hijo + identificador + "&ContentTypeId=" + tipos_de_contenido[tipo_contenido] + "'>" + texto_boton + "</a>") ;

}); 

</script>

0 comentarios:

Publicar un comentario en la entrada