viernes, 31 de enero de 2014

Sin Perfiles de Usuario no hay gloria digo audiencias

La Importación de Perfiles de Usuarios del AD (Directorio Activo) es un tema que debe de planificarse y debe organizarse que Unidad Organizacional dentro del AD incluirá los usuarios que utilizarán SharePoint, ya que el AD contiene infinidad de cuentas de servicio que nada tienen que ver con usuarios reales de la red y cada cuenta representa un Licencia de Call de Usuario.  Por ello podemos dejar a posterior la creación de este servicio en el proyecto pero esto nos puede traer algunas implicaciones negativas, no el importar perfiles sino el no crear el servicio.

Las audiencias es un característica dentro de del servicio de Perfiles de Usuario que permite a nivel de toda la granja de SharePoint basado en reglas de uno o mas grupos del AD o bien de propiedades del AD que permitan reconocer cuentas de usuarios similares a diferencia de los grupos de SharePoint que solo están disponibles en la colección de sitios en que fueron creadas.  Pero las Audiencias traen consigo una propiedad para poder aplicar no solo audiencias, sino grupos del AD o de SharePoint en la navegación y en todos los elementos Web.  Esta característica solo esta disponible para las ediciones Standard y Enterprise.

Algo que no debemos de perder de vista es que si no creamos el servicio de Perfiles de Usuario, las casilla de audiencias en la navegación, le mostrará el siguiente error: An instance of an Object reference y en los elementos Web no le mostrará en la sección de Avanzado las Audiencias de destino.

image

image

Luego de crear el servicio de Perfiles de Usuario, aunque no importe ningún perfil del AD o inclusive la conexión de importación, porque lo que necesitamos es la infraestructura del servicio que incluye las audiencias.  Entonces luego de crear el servicio de Perfiles de Usuario, las audiencias aparecerán en los elementos Web.

Audiencias en los elementos Web

image

Y las búsquedas del People Picker funcionarán correctamente.

image

image

En este artículo vimos como nos puede impactar el no crear el servicio de perfiles de usuario en la aplicación de “audiencias” por lo que aunque no importemos los perfiles del AD si debemos de crear el servicio.

Hasta la próxima!,

Juan Manuel Herrera Ocheita

sábado, 18 de enero de 2014

403 Forbidden Error al intentar subir un documento o crear una carpeta en una biblioteca de My Site en SharePoint 2013

Este error esta ampliamente mencionado en un innumerable cantidad de blogs y foros, pero pocos mencionan el origen del error y la solución correcta para el problema.

 

image

La mayoría indica que es un error de permisos en el File System del directorio del sitio web del IIS, pero lo que no explican es porque del error.  En mi caso pude encontrar el origen del error y pueda que para algunos también coincida el origen del error.

Primero debemos establecer algunos conceptos básicos para comprender el origen del error:

1) El Worker Process o w3wp.EXE es el proceso del IIS encargado de atender las solicitudes o request de los usuarios en el IIS.  Este se ejecuta sobre una identidad, la cual es definida en el grupo de aplicaciones o Application Pool en el IIS.  Este permite asilar un sitio Web de otro en el mismo IIS por medio de reservar recursos del servicios para ese grupo de aplicaciones o Application Pool.  Los recursos de servidor reservados son Procesador, RAM y almacenamiento en disco. 

2) En SharePoint cuando se crea una Aplicación Web debe especificarse el nombre, el grupo de aplicaciones o Application Web, la cuenta con la que se ejecutará e inclusive la ubicación donde el IIS almacenará  el sitio Web porque SharePoint se encarga de crear tanto el sitio a Web como el grupo de Aplicaciones en el IIS.  Esto es importante saber ya que si hacemos una modificación a nivel del IIS, no hay forma que SharePoint se entere del mismo y por ende vamos a producir errores por falta de integridad entre SharePoint y el IIS, por lo que se recomienda no haga cambios en el IIS que puede hacerlos desde SharePoint.

Entonces el error mostrado no es un error de SharePoint sino de IIS es decir que no ha llegado a resolverlo SharePoint sino que esta ocurriendo en el IIS.  Las referencias en la web indican que es un error de permisos a nivel del Sitema de Archivos o File System en Windows donde esta creado el sitio Web del IIS por ejemplo c:\inetpub\wwwroot\wss\misitio.dominio.local80.  Pero al validar los permisos en dicho directorio estaban entonces cual era  el error?

El origen del Problema

Al revisar las cuentas que ejecutan el grupo de aplicaciones o Application Pool en el IIS y luego de revisar las cuentas registradas en los servicios de SharePoint evidentemente la de misio o My Site no coincidían.

La Solución

En el Central Administration haga lo siguiente:

1) Seleccione la opción Seguridad

2) Luego seleccione la opción Configurar Cuentas de Servicio o bien http://hostname:55555/_admin/FarmCredentialManagement.aspx

image

3) Seleccione el nombre de la aplicación Web Mi Sitio o My Site

image

4) Le mostrará la misma cuenta que no concuerda con el IIS entonces para actualizar el IIS solo debe de mantener la misma y presionar el botón Aceptar

image

Y Eso es todo!, con ello resolvemos el problema.

En este artículo vimos la importancia de mantener la integridad de SharePoint y el IIS debemos de modificar el IIS  a través de SharePoint, por lo menos las opciones que controla y afectan a SharePoint, de lo contrario estaremos provocando errores innecesarios en la plataforma de SharePoint.

Hasta la próxima, SharePoint4Fun!,

Juan Manuel Herrera Ocheita

viernes, 17 de enero de 2014

Error al intentar subir la foto de un usuario en My Site o Mi Sitio en SharePoint 2013

Al intentar subir una fotografía al Perfil de Usuario muestra el siguiente error:

clip_image002

Este error puede al principio parecer muy genérico y por ende difícil encontrar su origen.  Pero si nos detenemos a ver donde es que se depositan las imágenes de los perfiles de usuario nos daremos cuenta que esta lo instala en no en la colección de sitios de cada usuario sino en la colección de sitios de todos los perfiles de usuario que se encuentra de forma predeterminada antes del prefijo personal, por ejemplo: http://[hostname:port number]/_layouts/15/start.aspx#/User%20Photos/Forms/Thumbnails.aspx

image

Al revisar la biblioteca donde se suben las imágenes muestra el mensaje de la Cuota fue excedido o bien el limite de elementos que de forma predeterminada es de 5,000 elementos.  En la imagen de abajo se ha aumentado a 100,000 elementos para no preocuparse por este tema durante mucho tiempo.

image

Ahora la cuota del sitio este se debe de ver vía Central Administration o Power Shell de SharePoint 2013.

image

Aumente la cuota o bien deshabilítela aplicando la cuota individual.

image

Bueno en este artículo vimos como resolver este error y donde se originó.

Hasta la Próxima,

Juan Manuel Herrera Ocheita

lunes, 13 de enero de 2014

Error: “value does not fall within the expected range” cuando intentamos subir un archivo a una biblioteca desde código en SharePoint 2013

Este error existe desde WSS 3.0 y puede deberse a muchas razones dependiendo del contexto del error. En esta caso es sobre una biblioteca de documentos que estamos intentando subir un archivo con código utilizando el Modelo de Objetos de Servidor de SharePoint.

El código de servidor para subir archivos a una biblioteca podemos encontrar en dos métodos mostrados a continuación:

SPFolder myLibrary = oWeb.Folders[documentLibraryName];
y 

SPFolder myLibrary = oWeb.GetList(URL OR NAME);
Pero al ejecutar la línea siguiente da el error:

SPFile spfile = libFolder.Files.Add(fileName, fileStream); 
Ambos son válidos y ambos pueden marcar el mismo error.   Desde la perspectiva de rendimiento utilizar GetList() es más eficiente que Folders[] por el simple echo que uno es un método que localiza el nombre de la biblioteca y el otro un arreglo de todas las bibliotecas del sitio y que debe de recorrer secuencialmente.
Bueno y donde esta el error, recordemos que el error indica que el valor no cae dentro del rango esperado.   Esto quiere decir que el Método Files.Add() no le parece el valor ingresado.  
Para saber donde esta el problema tenemos que revisar la sintaxis del método Add.  Que según la documentación de MSDN es la siguiente:
public SPFile Add(
string urlOfFile,
byte[] file
)
Donde el string espera una dirección URL relativa del archivo.  Que al final si ya estamos ubicados en el biblioteca no podemos volver a repetir la dirección URL relativa de toda la colección de sitios donde nos ubicarnos porque estaríamos duplicando la dirección y SharePoint valida que podemos subir un archivo si es una URL válida con lo cual no es.  Ya que SharePoint construye la ubicación basado en la ubicación de la biblioteca.  Entonces deducimos que la dirección URL relativa a la que se refiere la documentación es relativa a la biblioteca únicamente, y esto nos lleva a concluir que lo que espera el método SPFiles.Add() es únicamente el nombre del archivo.
La solución final es la siguiente:
using (SPSite oSiteCollection = new SPSite("http://localhost"))
{
using(SPWeb oWebsite = oSiteCollection.AllWebs["MyWebSite"])
{
SPWebCollection collWebsites = oWebsite.Webs;
SPFile oFile = oWebsite.GetFile("MyDocLib/MyFile");
foreach (SPWeb oWebsiteNext in collWebsites)
{
SPFolder oFolder = oWebsiteNext.GetFolder("Shared Documents");
SPFileCollection collFiles = oFolder.Files;

string strDestUrl = oFile.Name;
byte[] binFile = oFile.OpenBinary();
collFiles.Add(strDestUrl, binFile);

oWebsiteNext.Dispose();
}
}
}
NOTA: El código de arriba deberá de reemplazar los valores locales utilizados y la lógica de su código lo importante de notar en el código es el orden y el valor esperado por SPFiles.Add(), por lo que deberá variar su código del mostrado arriba.
SharePoint4Fun!,
Juan Manuel Herrera Ocheita

jueves, 9 de enero de 2014

Planificando la seguridad dentro de las colecciones de sitios en SharePoint

En este artículo vamos a ver nivel de colección de sitios la estrategia de seguridad ya que es el contenedor lógico de contenido limítrofe o fronterizo para definir los permisos del contenido.  Esto quiere decir que cada colección de sitios no comparte con otras colecciones de sitios sus grupos, usuarios, permisos y contenido.

Los grupos definidos dentro de la misma colección de sitios si es compartida entre todos los sub-sitios, bibliotecas, listas y elementos.

La seguridad de SharePoint a nivel de colección de sitios no ha cambiado desde la versión 2007 y sigue vigente hasta SharePoint Online.   El Heredar los permisos en los niveles inferiores y el “romper” el vínculo de esta herencia (de permisos) siguen vigente en todas las versiones arriba mencionadas.

Abajo podemos ver un árbol de contenido de SharePoint que muestra desde la granja o conjunto de servidores, los servidores y sus roles, las aplicaciones Web, las bases de datos y dentro de cada base de datos por lo menos una o más colecciones de sitios.  Dentro de cada colección de sitios podemos encontrar sitios web o sub-sitios y dentro de ellos listas (o bibliotecas), dentro de cada lista, carpetas, dentro de cada carpeta elementos que pueden ser documentos, archivos, imágenes. Hasta a nivel de elemento puede definirse el permiso a un usuario o grupo de usuarios.

ContainerHierarchy

Una imagen habla mejor que mil palabras abajo un diagrama que muestra el plan de implementación de permisos dentro de una colección de sitios.  Los permisos deben de definirse de forma de un embudo o símbolo de filtro donde la parte más amplia es donde el contenido más público o de conocimiento general debe de ser expuesto y a medida que vamos definiendo los sub-sitios se va restringiendo el acceso a los usuarios.  La única forma para restringirlos los permisos ya que deforma predeterminada se heredan es rompiendo la herencia  en los niveles inferiores de ese modo nos garantizamos que un usuario puede navegar hasta el punto en el cual tiene acceso a colaborar o compartir información.

image

En el ejemplo de arriba podemos apreciar que el punto de entrada de una amplia cantidad de usuarios se ubica en la parte superior del portal es decir http://hostname y a medida que va descendiendo si es interrumpida la herencia hay posibilidad de disminuir la amplitud o el número de usuarios que tienen acceso a los recursos inferiores como sub-sitios.  Para explicar a detalle podemos decir que una amplia cantidad de usuarios tienen acceso a http://hostname y los sub-sitios subweb2 y subweb3 no así para el sub-sitio subweb1 que tiene interrumpida la herencia y que para el caso del sub-sitio subweb101 hereda la misma herencia del sitio superior subweb1 pero no así de la raíz http://hostname/ que es donde la mayoría de usuarios tienen acceso. El otro caso definido en la imagen de arriba es el sub-sitio subweb301 que se ha interrumpido la herencia de permisos y no contiene todos los permisos que su sitio superior hereda del sitio raíz.

La otra recomendación a tomar en cuenta al momento de definir los permisos en SharePoint es que a pesar que los permisos se pueden definir a nivel de usuarios no es una buena práctica sino por el contrario crear los grupos de SharePoint, adicionar los usuarios que pertenecen al grupo y luego asignar los grupos a los recursos de SharePoint.  Abajo una imagen donde se muestra los recursos a los cuales se le puede aplicar los permisos.

Y luego si la administración de la seguridad organizacionalmente se maneja a nivel de directorio activo se pueden definir grupos del AD y asignarlos a los grupos de SharePoint de tal forma que los usuarios se adicionen a nivel de AD y no de SharePoint, pero esto dependerá de las políticas de seguridad para el portal y la organización.  Abajo una imagen de ejemplifica esto.  Si decidimos administrar el Directorio Activo deberemos ir nos por la opción de crear los grupos en el AD y asociarlos a los grupos de SharePoint.  Si decidimos administrar directamente los usuarios desde SharePoint se aplicarán estos directamente a los grupos de SharePoint.

image

El procedimiento recomendado para asignar permisos en SharePoint es el siguiente:

1) Crea un Grupo en SharePoint desde People and Groups

image

2) Agregar los usuarios que pertenecen al grupo

image

3) Asignar el permisos algún recurso de SharePoint (Sitio, Lista/Biblioteca, Carpeta, Elemento) .  Para ello es necesario dejar de heredar los permisos y asignar el grupo creado. 

image

Selecciona la opción Conceder Permisos y aplicar el grupo creado

image

En resumen vimos la visión de como debemos de implementar la seguridad en una Colección de Sitios en SharePoint y la mejor practica para realizarlo.  Y a pesar que los imágenes de SharePoint pertenecen a la versión Online este aplica para 2013, 2010 y 2007.

Hasta la próxima,

Juan Manuel Herrera