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.

Loobpack Check Fix

Muchas veces estos artículos que escribo son un recordatorio personal porque una y otra vez debo realizar el mismo trabajo.

Hoy tenía este error en un SharePoint 2013 y después de leerlo dije: ¡claro, no le he dado permisos al usuario spcontent!

Access is denied. Verify that either the Default Content Access Account has access to this repository, or add a crawl rule to crawl this repository. If the repository being crawled is a SharePoint repository, verify that the account you are using has “Full Read” permissions on the SharePoint Web Application being crawled. (0x80041205)

 

Así que procedí a agregar darle permisos de lectura total al usuario que realiza las indexaciones.

disableloopback2

Pero incluso después de agregar el usuario me salía exactamente el mismo error en el visor de eventos. Así que esa no era la solución.

Investigando en internet posibles causas de errores recordé que no había deshabilitado la famosa característica de seguridad “LoopbakCheck”. Aquí pueden encontrar la información oficial de Microsoft: http://support.microsoft.com/kb/896861

Si es un servidor de pruebas, pueden deshabilitarlo por completo con este comando de PowerShell:

New-ItemProperty HKLM:\System\CurrentControlSet\Control\Lsa -Name “DisableLoopbackCheck” -Value “1” -PropertyType dword

Si es un servidor en producción lo mejor es que agreguen cada una de las direcciones de su sitio de SharePoint y que no lo deshabiliten del todo. En PowerShell el comando es:

New-ItemProperty HKLM:\System\CurrentControlSet\Control\Lsa\MSV1_0 -Name “BackConnectionHostNames” -Value “intranet.contoso.com”,”personal.contoso.com” -PropertyType multistring

¿Qué significa i:0#.w| en las cuentas de usuario?

Para quienes hemos realizado algún tipo de desarrollo en SharePoint, ya sea .NET o JavaScript, hemos notado que al consultar los usuarios en algunas ocasiones aparece el usuario aparece de esta forma i:0#.w|contoso\vielka, lo que nos obliga a estar recortando el texto para eliminar esta parte i:0#.w|

¿Pero qué significan esos símbolos? Significa que SharePoint está usando autenticación tipo Claims (antiguo Forms) en lugar de autenticación clásica o NTLM para esa aplicación Web, y para SharePoint 2013, el tipo de autenticación recomendada para todos los sitios es Claims, aunque el AD organizacional no use Kerberos.

A continuación les presente unos ejemplos y el detalle completo lo pueden consultar en SharePoint 2013: Claims Encoding – Also Valuable for SharePoint 2010.

Tipo de reclamo

Código

Explicación

Usuario de windows i:0#.w|contoso\Vielka   i significa   que es del tipo “identity claim”  # indica   que contiene un login

  . tiene un   texto (string)

  w es autenticación   tipo Windows

  contoso\vielka  es el valor de la identidad   (la cuenta del usuario)

Tipo Forms i:0#.f|mymembershipprovider|Vielka   i significa   que es del tipo “identity claim”  # indica   que contiene un login

  . tiene   un texto (string)

  f es autenticación tipo Forms.

  mymembershipprovider    identifica quien emite la autenticación

  vielka   es el login del usuario

Valores de los estados de los flujos de trabajo

 

Si deseamos crear vistas en una lista de acuerdo al estado de un flujo de trabajo, lo primero es tomar una vista normal y filtrarla por el estado que deseamos.

image

 

El siguiente paso es fijarse en el URL de la página para ver el nombre del filtro (campo FilterField1) y el valor correspondiente (campo FilterValue1).

image

Cuando crean la vista, debe usar el número del estado para filtrar, no el texto, como en el siguiente ejemplo:

image

 

Aquí esta el resumen de todos los estados, con el nombre en español e inglés:

Estado Valor
No iniciado  – Not started 0
Fallo al iniciar – Failed on Start 1
En curso – In Progress 2
Error – Error Occurred 3
Completado – Completed 5
Fallo al iniciar (reintentando) – Failed on Start (retrying) 6
Error (reintentando) – Error Occurred (retrying) 7
Cancelado – Canceled 15
Aprobado – Approved 16
Rechazado – Rejected 17

Anexos obligatorios en listas de SharePoint

Hoy hice una lista sencilla para automatizar la aprobación de solicitudes de crédito, pero ocupaba que los usuarios anexaran al menos un archivo, lo cual no es muy sencillo en SharePoint.

1) El primer paso fue crear un archivo de texto (requiredAttachment.txt) con el siguiente script:

<script type=”text/javascript” language=”javascript”>
function PreSaveAction() {

            var elm = document.getElementById(“idAttachmentsTable”);
            if (elm == null || elm.rows.length == 0)
{
                document.getElementById(“idAttachmentsRow”).style.display=’none’;

alert(“Por favor agregue el archivo usando el botón Attach File”);
return false ;
}
else { return true ;}
}
</script>

2) Después lo subí a la biblioteca de activos del sitio

image

3) En la lista donde voy a realizar la personalización desactivé la opción de abrir los formularios en cuadros de diálogo.

image

4) En la lista que desea hacer obligatorios los anexos, presione el botón Nuevo elemento, y agregue en el URL Toolpaneview=2

image

5) En la nueva pantalla, presione el botón Add a Web Part.

image

6) Agregue el Web Part de Editor de Contenido.

image

7) Edite las propiedades del Editor de Contenido.

image

8) Cambie el tipo de borde a Ninguno.

image

9) En el campo de vínculo al contenido, escriba el URL del archivo que contiene el código javascript (paso 2 de este post).

image

10) Presione el botón OK para guardar los cambios.

image

 

11) Debe repetir estos pasos para el formulario de editar elementos, como se muestra en la siguiente imagen:

image

12) Cuando terminó de agregar los scripts, puede volver a marcar que los formularios se abran como cuadros de diálogo.

image

2012 in review

The WordPress.com stats helper monkeys prepared a 2012 annual report for this blog.

Here’s an excerpt:

600 people reached the top of Mt. Everest in 2012. This blog got about 9,000 views in 2012. If every person who reached the top of Mt. Everest viewed this blog, it would have taken 15 years to get that many views.

Click here to see the complete report.

Mover una base de datos de contenido a otro servidor de SQL

Hoy les cuento como cambiar el servidor de SQL donde está la base de datos de contenido de un sitio. En este ejemplo no vamos a cambiar todas las bases de datos del servidor de SharePoint, solo una que creció demasiado.

  1. Abrimos SharePoint 2010 Management Shell (donde escribimos los comandos de Power Shell)

  1. Si aparece la ventana de control de usuarios, hagan clic en yes.

  1. Se debe documentar cuidadosamente las bases de datos usadas por cada aplicación de SharePoint, usando el comando Get-SPContentDatabase -WebApplication <http://NombreSitio&gt;

  1. A continuación, se ejecuta el comando para ver la lista de tareas asociadas con ese sitio que se están ejecutnado. Debem sustituir lo que está entre los símbolos < >

Get-SPTimerJob -webapplication <http://nombresitio&gt; | select name | Out-File <c:\timerjobfile.txt> –Append –Encoding ascii

  1. Este es un ejemplo del archivo de texto que generó la herramienta

  1. Después procedemos a detener cada job que se está ejecutando en ese momento con el siguiente comando:

ForEach($tmrjob in (Get-Content <c:\timerjobfile.txt>)) { Get-SPTimerJob -Identity $tmrjob | Disable-SPTimerjob }

  1. En mi caso, se devolvieron algunos errores de jobs que no pudieron detenerse. Pero continué adelante.

  1. Volvemos a la administración central de SharePoint y en la sección de Administración de Aplicaciones, buscan la opción de Administrar bases de datos de contenido.

  1. Hacen clic sobre el nombre de la base de datos que desea mover, en este caso es la llamada WSS_Content.

  1. En la página de configuración de la base de datos marque la casilla de “remover la base de datos” y acepta la ventana de confirmación. Esto no elimina la base de datos del servidor de SQL, sólo quita la asociación de la base de datos con la aplicación web en el SharePoint.

  1. Después debe hacerle un Detach de la base de datos desde la herramienta de administración del servidor de SQL.

  1. Copie la base de datos a la nueva ubicación física.

  1. En el nuevo servidor de SQL, debe agregar la base de datos con el comando Attach.

  1. Una vez que la base de datos este en el nuevo servidor de SQL, regresa a la administración central de SharePoint, a la sección de administrar las bases de datos de contenido, y haga clic en la opción Add a content database.

  1. Seleccione la aplicación Web a la que pertenece la base de datos, escriba el nombre del nuevo servidor de SQL y el nombre de la base de datos.

  1. Presione el botón OK para continuar. Se esta usando autenticación integrada de Windows porque el usuario spadmin tiene permisos dentro del nuevo servidor de SQL.

  1. Verifique que la base de datos se conectó correctamente y que el sitio funcione.

  1. Finalmente, reinicie los jobs que se detuvieron, usando el mismo archivo de texto generado en el paso 4, con el siguiente comando:

ForEach($tmrjob in (Get-Content c:\timerjobfile.txt)) {Get-SPTimerJob -Identity $tmrjob | Enable-SPTimerjob}

 

Más información: http://technet.microsoft.com/en-us/library/cc287899.aspx

Anteriores Entradas antiguas

A %d blogueros les gusta esto: