Explorando spservices: ocultar columnas por grupo de SharePoint

Recientemente he estado trabajando mucho con la librería de spservices (http://spservices.codeplex.com) así que voy a iniciar una serie de artículos con ejemplos de su uso.

Me gusta realizar modificaciones con JavaScript porque si se debe cambiar la versión de SharePoint, el código es más sencillo de modificar, no hay que recompilarlo!, y también funciona con SharePoint Online.

A continuación les voy a mostrar como ocultar columnas del formulario de creación de nuevos elementos. En este caso estoy usando SharePoint 2010, pero debería funcionarles para 2013 sin muchos problemas.

Tengo una lista con cuatro campos y dos grupos de SharePoint en mi sitio, deseo que el grupo IT Owners pueda ver todos los campos del formulario, y el grupo IT Infrastructure Members no pueda ver la columna “Nivel 2”, ni la columna “comentarios”.

Este es el formulario original.

hidefields1

 

Y en esta vista pueden ver los grupos de SharePoint que vamos a utilizar.

hidefields2

 

Veamos el script

En un editor de texto comenzamos a redactar el script. Primero agregamos las referencias a JavaScript y SPServices. Mi recomendación es utilizar una biblioteca en el mismo sitio donde van a usar el script. Por ejemplo, una carpeta llamada Scripts dentro de la biblioteca Site Assets o Activos del Sitio.

<script src=”/url al script/jquery-1.8.2.js” type=”text/javascript”></script>
<script src=”/url al script/jquery.SPServices-2014.01.js” type=”text/javascript”></script>

//Después agregarmos las funciones para ocultar los campos

<script type=”text/javascript”>

// Esta función oculta todo el reglón de la tabla. No es necesario modificarla. 
function hideColumn(c) {

$(“.ms-formlabel h3 nobr”).filter(function() {

var thisText = $.trim($(this).clone().children().remove().end().text());

return thisText.indexOf(c) === 0 && thisText.length === c.length;

}).closest(“tr”).hide();

}

// Esta función usa SPServices para saber si el usuario que esta viendo la página (logged in)

// pertenece al grupo que se envió en la variable groupName. No es necesario modificarla. 

function isGroupMember(groupName, callback)
{

$().SPServices({

operation: “GetGroupCollectionFromUser”,

userLoginName: $().SPServices.SPGetCurrentUser(),

async: true,

completefunc: function(xData, Status) {

callback( !!($(xData.responseXML).find(“Group[Name='” + groupName + “‘]”).length) );

}

});
};

// Esta función si deben cambiarla de acuerdo a sus necesidades.

// Cambien IT Infrastructure Members por el nombre del grupo que ustedes desean revisar.

// Cambien Nivel 2 y Comentarios por el nombre de las columnas que ustedes desean ocultar. 

isGroupMember(“IT Infrastructure Members”, function(result){

if(result){

hideColumn(“Nivel 2”);

hideColumn(“Comentarios”);

}

});
</script>

En mi caso, este script se llama ocultar columnas.js y lo subí a la biblioteca de Site Assets junto con los otros scripts que estoy utilizando.

hidefields4

Para insertar el script en la pagina NewForm.aspx vamos a utilizar un Elemento Web Editor de Contenido, así que para trabajar más fácilmente, primero vamos a deshabilitar la opción de abrir los formularios en cuadros de diálogo, para que se abran totalmente en la página Web.

Después de agregar el script puede volver a habilitar esta opción y que se muestren los formularios en cuadros de diálogo.

  • Primero hacen clic en Lista, después en Configuración de la lista.
  • Luego hacen clic en Configuración avanzada (1).
  • En la página de configuración avanzada, bajan hasta el final de la página, y en la preguna sobre si se deben abrir los formularios dentro de ventanas de diálogos marcan la opción No (2).

hidefields3

  • Después hacemos clic en Agregar elemento, y una vez en la página de agregar elemento, vamos al menú de Acciones de sitio y hacemos clic en Editar Página.

hidefields5

Esto nos va a permitir agregar elementos Web a la página NewForms.aspx. Este procedimiento también se puede realizar con SharePoint Designer.

  • Hagan clic en Add a Web Part, o Agregar Elementos Web.

hidefields6

  • Busquen el elemento Content Editor o Editor de Contenido Web dentro de la categoría de Medios y Contenido.
  • Presionan el botón Agregar.

hidefields7

  • Una vez que agregaron el elemento Web, hagan clic en Editar elemento Web para agregar la dirección al script que usamos.

hidefields8

  •  En la primera sección del Editor de contenido, deben agregar la dirección del script (3).
  • En la sección de Apariencia, seleccionen el Chrome Type a Ninguno (4), para que no se vea el título del mismo en nuestro formulario. Y presionan el botón Ok.

hidefields9

  • Después guardan los cambios de la página presionando el botón Stop Editing o Detener Edición.

hidefields11

Como pueden ver, ahora si el usuario que ve el formulario pertenece al equipo IT Infrastructure Members, no va a poder ver todos los campos.

hidefields12

Algo muy importante que deben tener en cuenta, es que por la lógica que estoy usando, si el usuario pertenece a ambos grupos igual no va a poder ver los campos, aunque pertenezca a IT Owners; porque sólo estoy preguntando si pertenece a IT Infrastructure Members.

Anuncios

A %d blogueros les gusta esto: