Ocultar columnas en base al valor de otra columna en SharePoint 2007

Introducción

En este breve artículo vamos a explicar cómo ocultar o mostrar columnas en base al valor que tome una columna en la pantalla NewForm.aspx. La solución la implementaremos a través de jQuery y JavaScript dentro de una CEWP (content editor webpart).

Comportamiento de la pantalla

Imaginemos que tenemos una pantalla de alta que posee una columna llamada “SiNo” y que dependiendo del valor de esa columna, queremos que se muestren u oculten otras columnas. Si el valor de la columna “SiNo” es “Si”, entonces queremos que la pantalla se vea de esta manera:

image

Pero si el valor de la columna “SiNo” es NO, entonces queremos que se oculte el campo “Eleccion” y se muestren los campos “Texto” y “Busqueda”

image

Enfoque de la solución

Para ello trabajamos con una solución que agrega un evento “click” en la casilla de verificación “SiNo”. Este evento oculta o muestra campos en base al valor de esta casilla.

Esta porción de código está realizada con jQuery y está basada en la idea de este artículo: http://www.codeproject.com/Articles/252468/Hide-column-in-SharePoint-custom-list-based-on-val

La forma de encontrar, ocultar y mostrar columnas en SharePoint se realiza a través de JavaScript, aprovechando los comentarios de SharePoint que indican los nombres internos de las columnas. Nos basamos en este artículo: http://www.cleverworkarounds.com/2008/02/28/more-sharepoint-branding-customisation-using-javascript-part-2/

Configuración del código

Para utilizar el código, podemos pegar el mismo en una CEWP o integrarlo dentro de alguna librería JavaScript. El código posee tres partes a configurar:

1. La indicación de cuál es el campo que nos permite decidir qué campos mostrar u ocultar. Debe ser un campo de tipo “Si/No”

image

2. La especificación de los campos a mostrar u ocultar cuando el valor es Si

image

3. La especificación de los campos a mostrar u ocultar cuando el valor es No

image

Código de la solución

Por último les dejo el código completo, espero les sea útil. Hasta la próxima!

<!--

Esta función oculta y muestra un conjunto de columnas de acuerdo al valor de un campo Si/No
Se aplica dentro de una CEWP en la página NewForm.aspx

Utiliza una variante de la función de CleverWorkarounds para ocultar y encontrar controles de SharePoint
http://www.cleverworkarounds.com/2008/02/28/more-sharepoint-branding-customisation-using-javascript-part-2/

Utiliz una variante de la función de CodeProject para agregar el evento click con jQuery a una columna Si/No
http://www.codeproject.com/Articles/252468/Hide-column-in-SharePoint-custom-list-based-on-val

Requiere jQuery

El código puede ser insertado dentro de una CEWP

-->

<script src="/internal/jquery-1.7.2.min.js">
</script>  

<script type="text/javascript">

OcultarMostrarCondicional ('SiNo'); // Internal Name del campo de tipo Si/No que decide
     
/* Completar en esta función los controles a mostral u ocultar cuando la opción es SI */

function OcultarMostrar_Cuando_SI () {
    ocultar_control('Texto');
    ocultar_control('Busqueda');
    mostrar_control('Eleccion');
}

/* Completar en esta función los controles a mostral u ocultar cuando la opción es NO */

function OcultarMostrar_Cuando_NO () {
    mostrar_control('Texto');
    mostrar_control('Busqueda');
    ocultar_control('Eleccion');
}

/*************************************/
/* A PARTIR DE ACA NO MODIFICAR NADA */
/*************************************/

function OcultarMostrarCondicional (CampoSiNo) {

    // Busco el campo Si/No que decide que campos ocultar y qué campos mostrar
    var SiNo = retornar_id_control(CampoSiNo);

    // Situación predeterminada de la pantalla
    if($("#"+SiNo).is(':checked')) {
        OcultarMostrar_Cuando_SI ();
    }
    else {
        OcultarMostrar_Cuando_NO ();
    }


    // Agrego el evento click
    $("#"+SiNo).bind('click',function() { 

        if($(this).is(':checked')) {                   
            OcultarMostrar_Cuando_SI();
         }
         else {
            OcultarMostrar_Cuando_NO();
         }
    });    

    }

function ocultar_control (FieldName) {
   var arr = document.getElementsByTagName("!");
   for (var i=0;i < arr.length; i++ ) {
      if (arr[i].innerHTML.indexOf("FieldInternalName=\""+FieldName+"\"") > 0) {
          arr[i].parentNode.parentNode.style.display="none";
          }
      }
   }

function mostrar_control (FieldName) {
   var arr = document.getElementsByTagName("!");
   for (var i=0;i < arr.length; i++ ) {
      if (arr[i].innerHTML.indexOf("FieldInternalName=\""+FieldName+"\"") > 0) {
          arr[i].parentNode.parentNode.style.display="inline";
          }
      }
   }

function retornar_id_control (FieldName) {
   var arr = document.getElementsByTagName("!");
   for (var i=0;i < arr.length; i++ ) {
      if (arr[i].innerHTML.indexOf("FieldInternalName=\""+FieldName+"\"") > 0) {
         return arr[i].parentNode.lastChild.firstChild.id;
          }
      }
   }

</script>
Published 23/7/2012 12:03 por Juan Pablo
Comparte este post:
http://geeks.ms/blogs/jpussacq/archive/2012/07/23/ocultar-columnas-en-base-al-valor-de-otra-columna-en-sharepoint-2007.aspx