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

martes, 31 de diciembre de 2013

Caso Práctico:Depurando las dependencias no migradas en SharePoint 2010

Una de las plantillas encontradas en SharePoint 2007 que no todas pueden ser migradas a 2010 y mucho menos a 2013 son las plantillas de los 40 fantásticos, sino sabe de lo que hablo posiblemente no tiene de que preocuparse.

Las plantillas de los 40 fantásticos es una historia triste, ya que Microsoft no las adopto para las versiones posteriores de SharePoint y aunque algunas se adaptaron para 2010 estas no están disponibles para 2013.  Estas plantillas en el proceso generan muchos errores.   Si desea saber mas de las plantillas puede consultar los siguientes enlaces:

http://technet.microsoft.com/en-us/sharepoint/bb407286.aspx

http://blogs.technet.com/b/tothesharepoint/archive/2010/08/18/sharepoint-2010-products-upgrade-and-the-fabulous-40-application-templates.aspx

Para este caso vamos asumir que ya sea que sean plantillas de los 40 fantásticos o bien otras dependencias que no se lograron migrar de 2007 a 2010.  Si la migración reporto errores pero terminó y deseamos depurar las dependencias faltantes. Entonces ya hemos migrado de 2007 a 2010 una base de datos de contenido con varios errores de dependencias que no tenemos instaladas en la granja 2010 pero deseamos depurar los errores. Dependiendo de cada error se toman diferentes caminos (para más información puede ver el siguiente enlace:http://kancharla-sharepoint.blogspot.com/2013/08/resolving-missing-references-when.html) pero para este caso vamos a sumir que los sub-sitios que dieron error porque no están las plantillas instaladas eliminaremos dichos sub-sitios, para luego crear una nueva base de datos y allí migrar el contenido sin errores.  El procedimiento es el siguiente:

1. Crear una nueva aplicación Web (para operar cómodamente el contenido depurado)

New-SPWebApplication -ApplicationPool <String> -Name <String> [-DatabaseName <String>] [-DatabaseServer <String>] [-HostHeader <String>] [-Path <String>] [-Port <UInt32>] [-ServiceApplicationProxyGroup <SPServiceApplicationProxyGroupPipeBind>]

http://technet.microsoft.com/en-us/library/ff607931.aspx

Ejemplo: New-SPWebApplication –ApplicationPool “Nueva App Pool” –Name “SharePonit Web App temporal” –DatabaseName “wss_content_NuevoContenido” –HostHeader “” –Path “c:\temporal\Web4444” -Port 4444

2. Exportar el contenido al sistema de archivos

Export-SPWeb [-Identity] <SPWebPipeBind> -Path <String> [-IncludeUserSecurity <SwitchParameter>] [-IncludeVersions <LastMajor | CurrentVersion | LastMajorAndMinor | All>] [-NoFileCompression <SwitchParameter>]

http://technet.microsoft.com/en-us/library/ff607895.aspx

Ejemplo: Export-SPWeb –Idendity http://miwebmigrada –path “c:\temp\contenidodepurado” –IncludeUserSecurity – IncludeVerions All – NoFileCompression

3. Importar el contenido en la nueva aplicación Web

Import-SPWeb [-Identity] <SPWebPipeBind> -Path <String> [-IncludeUserSecurity <SwitchParameter>] [-NoFileCompression <SwitchParameter>] [-UpdateVersions <Append | Overwrite | Ignore>]

http://technet.microsoft.com/es-es/library/ff607613.aspx

Ejemplo: Import-SPweb –Identity “http://hostname:4444” –Path “c:\temp\contenidodepurado” –NoFileCompression –UpdateVerions Overwrite

4. Desmontar la base de datos de contenido de la aplicación Web nueva creada y de la migrada

Dismount-SPContentDatabase [-Identity] <SPContentDatabasePipeBind>

http://technet.microsoft.com/en-us/library/ff607764.aspx

Ejemplo: Dismount-SPContentDatabase –Identity “wss_content_NuevoContenido”

5. Montar la base de datos depurada en la aplicación web deseada

Mount-SPContentDatabase [-Name] <String> [-WebApplication] <SPWebApplicationPipeBind>

http://technet.microsoft.com/en-us/library/ff607581.aspx

Ejemplo: Mount-SPContentDatabase –Name wss_content_NuevoContenido –WebApplication “http://miwebmigrada

SharePoint4Fun!,

Juan Manuel Herrera Ocheita

sábado, 28 de diciembre de 2013

Tips para el proceso de migración de SharePoint 2007 a 2013

Primero lo primero no se puede pasar de SharePoint 2007 a 2013 de un solo con el procedimiento de base de datos acoplada o Attach data base, con herramientas de terceros es posible pero es un proceso lento y no esta libre de errores.  En 2007 hay dos procesos soportados In Place y Attached data base.  Pero el último es el adoptado y único para versiones posteriores, por lo que mantendremos esta tendencia desde 2007.

Para realizar la migración debemos de contar por lo menos con dos granjas una de SharePoint 2010 y otra de SharePoint 2013.

No es recomendado realizar un downgrade es decir una reducción de versión en el proceso de migración.  por ejemplo:  Tenemos una granja SharePoint 2007 Edición Enterprise y deseamos convertirla a SharePoint 2013 Edición Standard o a SharePoint Foundation. 

Lo contrario si es válido y posible, es decir hacer un upgrade o mejora de versión.  Por ejemplo de WSS 3.0 a SharePoint 2013 Enterprise o Standard.

A continuación una tabla de la ruta de migración posible del 2007 al 2013 en sus diferentes ediciones:

image

A continuación una tabla de la ruta de migración recomendada (en color amarillo):

image 

La recomendación se basa en que se utilice la misma edición de 2007 y hasta el final se utilice la edición deseada.  Abajo una tabla de las rutas no soportadas en las cuales se suponen escenarios de color rojo donde erróneamente se escoge una ruta de upgrade en el intermedio (en la versión 2010) y luego se decide equivocadamente hacer un downgrade, esto acarreará muchos errores en la etapa de migración de 2010 a 2013 que puede incluso impedir la migración.

image

Debemos de recordar el idioma en que esta instalado el SharePoint debe de ser el mismo a migrar o bien contar con el paquete de idioma instalado en las granjas de SharePoint a migrar que en este artículo hablamos de 2010 y 2013.

La configuración de las granjas es algo que no debe de tomarse a la ligera ya que esto puede desembocar en un proceso rápido y efectivo o lento y frustrante.

La configuración de Hardware debe de analizarse desde el misma granja de SharePoint 2007, ya que podemos contar con imprevistos como el que no se haya instalado 2007 en una base de datos de SQL Server sino a través de la versión incrustada o embedded y esto hará el proceso de extracción de la base de datos más doloroso y complicado.  Esto sucede cuando instalamos el SharePoint de forma solitaria o Stand Alone, instalación solamente diseñada para demostración y nunca recomendada para un ambiente de producción.  La sorprendente es encontrar empresas que tienen así instalado su SharePoint en modo stand-alone.

La otra configuración importante es la de SharePoint 2010 que a pesar que sea una granja “puente” ya que solo se instalará para migrar el contenido de 2007 a 2010 y de 2010 a 2013.  Debemos de asignar recursos adecuados para que el proceso de migración para que sea exitoso y eficiente.  Esta granja posiblemente no cuente con muchos recursos pero debemos prestar atención a la RAM y espacio en disco y en los servicios y contenido que estamos migrando.

A continuación la configuración mínima y recomendada por Microsoft para SharePoint 2007 Front End en sus diferentes ediciones

image

image

A continuación mi recomendación práctica para una migración para la versión SharePoint 2007

image

image

Para el servidor Puente o sea el servidor SharePoint 2010 las recomendaciones son las siguientes:

image

En la medida de disponer de mayor cantidad de RAM se garantiza un proceso más rápido de migración.  Y el espacio en disco se basa en el requerimiento de SharePoint de 5 veces el tamaño de la memoria RAM partiendo del mínimo recomendado de 80 GB + 5 Veces la RAM.  Se asume por ser un servidor puente que solo será un servidor, pero esto dependerá de la granja de SharePoint 2007 de origen cuantos servidores tienen ya que no solo se migrará contenido sino servicios también.

A continuación la recomendación mínima de una granja de SharePoint 2013 y un servidor de SQL Server 2012 en sus diferentes ediciones:

image

Comandos útiles para la migración de base de datos de contenido adjunta:

image

image

Bueno eso es todo por este artículo espero lo encuentren útil.

Hasta la próxima, SharePoint4Fun!,

Juan Manuel Herrera Ocheita