Archivo de la categoría: SharePoint 2007

SharePoint 2007

“Configurar grupos para este sitio” en SharePoint 2010

sharepoint2010Una de las cosas que echo de menos de SharePoint 2007 en SharePoint 2010 es la pagina de “Configurar grupos para este sitio” o en inglés “Set up Groups for this site“, donde el usuario puede especificar quién puede tener acceso a un  sitio en concreto. Esta claro que he mejorado mucho la forma de gestionar los grupos y usuarios, pero hecho en falta esta pagina (y sobre todo su funcionalidad)…

 

ConfigurarGrupos

Por algún motivo, el equipo de SharePoint decidió que esta funcionalidad “Configurar grupos de este sitio” debía de estar oculta en el menú de Permisos del Sitio. Si que esta visible, cuando creas un Sitio nuevo (si lo creas con la opción de permisos únicos), la malo es que luego, no hay forma de ver los grupos asignados a cada perfil.

Si necesitas realizar cambios en la asignación de grupos y como esta funcionalidad sigue estando en SharePoint 2010, siempre es posible acceder a la pagina por url: /_layouts/permsetup.aspx

 

Editar plantillas de SharePoint (archivos stp) de una forma cómoda y sencilla

sharepoint2010Es posible que te hayas visto en la necesidad de tener que editar plantillas de listas de SharePoint, para pasarlas a una granja diferente o similar… Una cosa que suele ser común es que en tu servidor de pruebas no tengas todos los Language Packs instalados, y cuando quieras usar dichas plantillas de lista, no puedas hacerlo.

Para poder realizar esto, es necesitar editar el manifiesto de la planilla y ponerle el idioma, que tengas instalado en tu entorno. Para editar un archivo stp existen varios métodos que comento a continuación:

1) Existe una forma manual de poder editarlos, cuyos pasos serian:

  1. Copia y renombra la extensión del archivo .stp por .cab
  2. Extrae el contenido del archivo (yo suelo usar WinRar)
  3. Abre el archivo manifest.xml en un editor de texto (Visual Studio, Notepad, Dreamweaver, etc.)
  4. Modifica el archivo manifest.xml
  5. Usando la linea de comando,  sitúate en el directorio/carpeta que contenga el manifiesto ya editado
  6. Teclea el siguiente comando, sustituyendo el <nombre_plantilla> por el deseado: makecab.exe manifest.xml <nombre_plantilla>.cab
  7. Esto generará un archivo .cab que deberemos renombrar de extensión a .stp
  8. Ya tenemos listo la plantilla modificada, preparada para subir a SharePoint

makecab01

2) Existe otra forma mucho mas sencilla, cuyos pasos serian:

  1. Copia y renombra la extensión del archivo .stp por .cab
  2. Extrae el contenido del archivo (yo suelo usar WinRar)
  3. Abre el archivo manifest.xml en un editor de texto (Visual Studio, Notepad, Dreamweaver, etc.)
  4. Modifica el archivo manifest.xml
  5. Buscar la aplicación iexpress.exe y ejecutala
  6. Sigue los pasos del wizard
  7. Esto generará un archivo .cab que deberemos renombrar de extensión a .stp
  8. Ya tenemos listo la plantilla modificada, preparada para subir a SharePoint

IEXPRESS02

Este segundo paso es mucho mas cómodo si tu plantilla, contiene mas de un archivo (es decir a aparte del manifest.xml) ya que no tienes que generar ningún script para que te haga el empaquetado usando makecab.

Para más información sobre IExpress Wizard, puedes consultar esta pagina de Microsoft.

 

DisableLoopbackCheck en SharePoint 2010

Uno de los problemas con el que nos podemos encontrar los desarrolladores de SharePoint 2010, es que cada vez que intentamos acceder a sitios de nuestros entornos de desarrollo o preproducción de SharePoint, que se habíamos creado previamente, nos pide en repetidas ocasiones (las tres de rigor) su usuario y contraseña antes de devolver un error 401.1 Access Denied y una entrada en el Visor de Eventos de Windows.

En principio esto no debe de ser un problema ya que ningún usuario usa directamente los servidores de la granja de SharePoint para navegar por los sitios ahí hosteados. Pero ¿y si es un servidor de desarrollo o pruebas? En estos casos es obligatorio que podamos acceder a los sitios sin que este comportamiento ocurra.

Este comportamiento del sistema, es una característica de seguridad introducida desde el Service Pack 1 de Windows Server 2003 y está presente hasta las versiones actuales de Windows Server 2008 R2. Básicamente lo que hace es bloquear el acceso a una Web Application usando el FQDN, si esto sucede la característica entra en acción y bloquea este acceso enviando un error 401.1 Access Denied. ¿Por qué se introdujo esta característica? Pues porque existían varios ataques que se basaban en reflección para engañar a IE y hacerle creer que se estaba trabajando de manera local y así burlar muchas restricciones de seguridad.

¿Como podemos solucionar este problema (siempre y cuando se traten de entornos no productivos)? Existen dos métodos .. uno a través de la ejecución de un comando de PowerShell y la segunda añadiendo una clave en el Registro de Windows.

1) Ejecución de este comando PowerShell:

New-ItemProperty HKLM:\System\CurrentControlSet\Control\Lsa -Name "DisableLoopbackCheck" -value "1" -PropertyType dword

En la siguiente imagen puede apreciarse la ejecución de este comando:

2) Modificando directamente el Registro de Windows:

– Pincha en el botón de Inicio o presiona la tecla Windows + X (dependiendo la versión de Windows), pincha en Ejecutar, escribe: “regedit” y presiona Intro.
– En el editor del Registro de Windows, localiza la siguiente clave: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa
– Pincha con el botón derecho del ratón en Lsa, selecciona nueva Valor de DWORD (32 bits)


– Introducimos el nombre “DisableLoopbackCheck” y presionamos Intro.
– Pinchamos con el botón derecho del raton sobre esta nueva clave “DisableLoopbackCheck“, y seleccionamos Modificar.
– Introducimos un “1” en el campo Información del valor  y presionamos Intro.


– Cerramos el editor del Registro de Windows y reiniciamos el servidor para que los cambios tengan efecto.

Para información mas detallada sobre este problema, podéis consultar el KB896861.

 

Sincronizar un sitio de SharePoint Server 2007 con SharePoint Workspace 2010

Hola, una de las preguntas que me han realizado es como se posible sincronizar con SharePoint Workspace 2010 un sitio de SharePoint 2007.

Este es un proceso muy sencillo, ya que Microsoft ha mantenido la compatibilidad con las versiones antes del producto, aunque es algo diferente al proceso de sincronización habitual. Si intentamos abrir un sitio de SharePoint 2007, recibiremos el siguiente error:

Para solucionar este problema y poder sincronizar un sitio de SharePoint 2007 utilizando SharePoint Workspace 2010, lo que tienes que hacer es lo siguiente:

  1. En la ficha Inicio de la Barra de inicio de SharePoint Workspace, haz clic en Nuevo y, a continuación, en Área de trabajo de Groove.
  2. En la ventana Nueva área de trabajo de Groove, haga clic en Opciones, seleccione 2007 en la lista desplegableVersión del área de trabajo y, por último, haga clic en Aceptar.
  3. En la nueva área de trabajo, haga clic en la ficha Área de trabajo, en Agregar y, a continuación, en Archivos de SharePoint.
     

     

  4. Introduces las credenciales y la herramienta Archivos de Office SharePoint 2007 se agrega al área de trabajo, que puede sincronizar una única biblioteca de documentos en un sitio de Office SharePoint Server 2007 o de SharePoint Server 2010.

 

Crear vistas filtradas en SharePoint 2010

Esto no es algo nuevo de SharePoint 2010 sino que ya viene de versiones anteriores, pero conviene recordarlo…

Existe la posibilidad de poder modificar las vistas de una lista o librería de SharePoint desde el interface Web, es decir sin uso de SharePoint Designer o programación, para que filtre la información de una terminada vista por ejemplo, por una fecha, por mi usuario, etc.

A continuación os dejo unos ejemplos de como podemos filtrar la información, a través de las vistas:

  • Cambiados recientemente – Para crear una vista que incluya únicamente los elementos que han cambiado la semana pasada, puede indizar la columna Modificado y, a continuación, aplicar el filtro Modificado (Indizado) es mayor que [Hoy]-7.
  • Nuevos elementos – Para crear una vista de únicamente los elementos agregados la semana pasada, puede indizar la columna Creado y, a continuación, aplicar el filtro Creado es mayor que [Hoy]-7.
  • Mis elementos – Para crear una vista de únicamente los elementos agregados, puede indizar la columna Creado por y, a continuación, aplicar el filtro Creado por es igual a [Yo].
  • Vence hoy – Para listas o bibliotecas con una columna Fecha de vencimiento, puede indizar dicha columna y, a continuación, aplicar el filtro Fecha de vencimiento es igual a [Hoy].
  • Actualizaciones del panel de discusión – Para crear una vista únicamente con las discusiones actualizadas el último mes, puede indizar la columna Última actualización en un panel de discusión, crear una nueva vista Asunto y, a continuación, aplicar el filtro Última actualización es mayor que [Hoy]-30.
  • Personas y grupos – Si tiene muchas personas que visitan el sitio, puede mejorar el rendimiento de las páginas Todos los grupos y Todas las personas indizando la columna Tipo de contenido para la Lista de información del usuario.

 

Identificarte como un usuario diferente en SharePoint

Cuando tu estas haciendo pruebas de un sitio SharePoint, es necesario probar con diferentes perfiles de usuario, para probar por ejemplo los permisos, tanto a nivel de contenido como de estructura… para ello, podemos hacer el cambio de usuario, desde la opción de menú superior: “Sign in as Different User” que nos provee el control de usuario “Welcome”.

Ahora el problema viene cuando se requiere ocultar el Ribbon, y a consecuencia ocultamos este control de usuario. ¿Como cambiamos de usuario ahora? Se me ocurren varias opciones, pero la mas sencilla es crear un enlace (hyperlink) que nos lleve a esta pagina con el siguiente parámetro:

/_layouts/AccessDenied.aspx?loginasanotheruser=true

Esto lo que hará es finalizar la sesión del usuario actual y lanzar la ventana de dialogo, en la que te solicita usuario y contraseña para identificarte como un nuevo usuario… al ser una pagina que esta dentro de /_layouts/ te aseguras que se podrá acceder desde cualquier colección de sitio.

Configuración del elemento cache en SharePoint 2010

Esta configuracion es valida no solo para aplicaciones SharePoint 2010 / 2007, sino para cualquier aplicación ASP.NET… En uno de mis proyectos con SharePoint, hemos abusado del objetos en cache y para que el servidor recolector de basura vaya limpiando los objetos que tenemos en la cache a nivel de aplicación Web, se ha tenido que modificar la configuración del objeto Cache.

Esta configuración puede definirse a nivel de:

  • Machine.config
  • Web.config del nivel de raíz
  • Web.config del nivel de aplicaciones

La configuración que trae por defecto el Framwork 2.0 es la siguiente:


Lo que se ha modificado es el valor de la propiedad percentagePhysicalMemoryUsedLimit, bajándolo al 80%, lo que hace que la maquina no ocupe tanta memoria con objetos en cache y vaya liberando antes…

Script para habilitar CollectSPRequestAllocationCallStacks en SharePoint 2010

Una tarea que ha de realizar cualquier desarrollador de SharePoint 2010 es la labor de revisar los logs en los diferentes entornos de los que se cuenta…

Revisando los logs de ULS con la aplicación ULS Viewer (verdaderamente útil), me he encontrado con este mensaje de error relacionado con un memory leak (perdida de memoria):

An SPRequest object was not disposed before the end of this thread.
To avoid wasting system resources, dispose of this object or its
parent (such as an SPSite or SPWeb) as soon as you are done using it.
This object will now be disposed.  Allocation Id:
{646667A7-73BC-4DDD-B0FB-6EDFC315CCE7}  To determine where this
object was allocated, set
Microsoft.SharePoint.Administration.SPWebService.ContentService.CollectSPRequestAllocationCallStacks = true.

Este es un mensaje que no nos da mucha información sobre el objeto que esta generando la perdida de memoria al no ser liberado… para obtener mas información lo que debemos hacer es ver la pila de llamadas actual.

Para ello y como se especifica en la descripción del error, lo que debemos hacer es activar la propiedad CollectSPRequestAllocationCallStacks, para ello, lo mas sencillo es usar un script de PowerShell:

$contentService = [Microsoft.SharePoint.Administration.SPWebService]::ContentService
write-host "Actual: " $contentService.CollectSPRequestAllocationCallStacks
$contentService.CollectSPRequestAllocationCallStacks = $true
$contentService.Update()
write-host "Nuevo: " $contentService.CollectSPRequestAllocationCallStacks

Una vez hayamos realizado el cambio podemos volver a revisar los logs de ULS y ahora comprobaremos que nos muestra toda la información de la pila sobre el objeto que no esta siendo liberado.

 

No es posible retirar/eliminar/desplegar una solución Sharepoint 2010

Esto es lo que me ocurrió el día de ayer en uno de mis entornos de SharePoint 2010, al intentar actualizar una versión de una solución (.wsp)… después de intentar retirar la solución con PowerShell, veo que el proceso se queda indefinidamente en “Retracting”.

Intento realizar el mismo proceso desde la Administración Central, pero ocurre lo mismo 🙁

Así que después de un rato esperando… recuerdo que en SharePoint 20007 había un comando que forzaba la ejecución de todos los trabajos (timer jobs) llamado execadmsvcjobs, con lo que desde una consola de PowerShell ejecuto lo siguiente:

stsadm -o execadmsvcjobs

Tras la ejecución del comando, veo que SharePoint comienza a ejecutar todos los trabajos que tenia pendiente (entre ellos el “retract” de mi solución)…

Aquí lo dejo para que mi compañero @Raul Gilabert siempre lo tenga como referencia 🙂

Mas información sobre este comando, aquí.

Uso de SPBasePermissions para verificar o establecer permisos en diversos objetos de SharePoint

En este post, añado una lista de algunas de las propiedades y métodos que devuelven el enumerador  SPBasePermissions, y algunos métodos que toman como parámetro SPBasePermissions para comprobar si un usuario tiene ciertos derechos sobre un objeto en SharePoint.

Los siguientes son algunos de los componentes más comunes de SharePoint que se puede utilizar para obtener o establecer los permisos, o comprobar si son eficaces ciertos permisos para un usuario sobre el objeto:

Obtener o establecer los permisos de la base de una definición de función en un objeto SPWeb:

  • SPWeb.RoleDefinitions.BasePermissions 

Obtener los permisos del usuario actual o especificado tiene los permisos especificados sobre un objeto:

  • SPSite.EffectiveBasePermissions
  • SPSite.GetEffectiveRightsForAcl (SPReusableAcl)
  • SPWeb.EffectiveBasePermissions 
  • SPWeb.GetUserEffectivePermissions (Nombre de usuario String)
  • SPList.EffectiveBasePermissions 
  • SPList.EffectiveFolderPermissions 
  • SPList.GetUserEffectivePermissions (Nombre de usuario String)
  • SPFolder.EffectiveRawPermissions 
  • SPFile.EffectiveRawPermissions 
  • SPListItem.EffectiveBasePermissions 
  • SPListItem.GetUserEffectivePermissions (Nombre de usuario String)

Comprobar si el usuario actual o especificado tiene los permisos especificados y lanza UnauthorizedAccessException si no:

  • SPSite.CheckForPermissions (SPReusableAcl, SPBasePermissions) 
  • SPWeb.CheckPermissions (SPBasePermissions) 
  • SPList.CheckPermissions (SPBasePermissions) 
  • SPListItem.CheckPermissions (SPBasePermissions)

Devuelve verdadero/falso indicando si el usuario tiene el permisos específicos:

  • SPSite.DoesUserHavePermissions (SPReusableAcl, SPBasePermissions) 
  • SPSite.DoesUserHavePermissions (SPReusableAcl, SPBasePermissions, SPWeb) 
  • SPWeb.DoesUserHavePermissions (SPBasePermissions) 
  • SPWeb.DoesUserHavePermissions (String, SPBasePermissions) 
  • SPList.DoesUserHavePermissions (SPBasePermissions) 
  • SPList.DoesUserHavePermissions (SPUser, SPBasePermissions) 
  • SPListItem.DoesUserHavePermissions (SPBasePermissions) 
  • SPListItem.DoesUserHavePermissions (SPUser, SPBasePermissions) 

Diseño de páginas base – Permisos necesarios para acceder a una LayoutPageBase

  • LayoutsPageBase.RightsRequired 
  • LayoutsPageBase.DefaultLayoutsRights 

Recortar contenido de una página (Obtener o establecer permisos)

  • SPSecurityTrimmedControl.Permissions 

Permisos base asociados a un objeto SPPermission

  • SPPermission.BasePermissions 

Obtener los permisos base necesarios para utilizar un objeto o ConsoleAction ConsoleNode

  • ConsoleAction.UserRights 
  • ConsoleNode.UserRights 

Obtener los permisos necesarios para ver el Panel de Control de desarrolladores

  • SPDeveloperDashboardSettings.RequiredPermissions 

Obtener o establecer los permisos para una Aplicación Web

  • SPWebApplication.RightsMask 
  • SPSite.ApplicationRightsMask 

Permisos necesarios para acceder a una página móvil

  • SPMobilePage.RightsRequired 

Botón de la barra de menú

  • ToolBarMenuButton.CallbackVisibilityPermission 

Otros:

  • SPSecurableObject.GetUserEffectivePermissions (Nombre de usuario String) 
  • SPRibbon.Permissions 
  • MenuItemTemplate.Permissions 
  • SPUserCustomAction.Rights
De una forma gráfica, una manera de entender las dependencias de permisos que maneja SharePoint por defecto, es esta (pincha sobre ella para verla en grande):
Muy al hilo de esta información, creo que es de recomendada lectura el siguiente articulo de Microsoft: User permissions and permission levels (SharePoint Server 2010), donde se trata el tema de los permisos mas a fondo.