miércoles, 10 de julio de 2013

Error <nativehr>0x80070003</nativehr><nativestack></nativestack> al restaurar una colección de sitios

Hace algunos días intentando restaurar una colección de sitios desde un respaldo generado en otra granja, me encontré con el siguiente error:


<nativehr>0x80070003</nativehr><nativestack></nativestack> At line:1 char:1 + Restore-SPSite http://webapplication:12345/sites/sitecollection_name -Pat ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~ + CategoryInfo : InvalidData: (Microsoft.Share...dletRestoreSite: SPCmdletRestoreSite) [Restore-SPSite], DirectoryNotFoundException + FullyQualifiedErrorId : Microsoft.SharePoint.PowerShell.SPCmdletRestoreSite
La instrucción de PowerShell que estaba utilizando era algo como lo siguiente

Restore-SPSite -Identity http://server_name/sites/sitecollection -Path c:\temp\site_name.bak


Buscando un poco en la web se encuentran algunas referencias de dos posibles razones y formas de corregir este error:

1.- Managed Path incorrecto. Esto en caso de que el managed path "sites" no estuviera registrado como un path valido en el web application, la solución evidentemente es agregarlo. No era mi caso

2.- Permisos. Ejecutar el comando de Restore-SPSite con un usuario sin permisos; la solución obviamente es ejecutar el comando con un usuario administrador de la granja de SharePoint. Desafortunadamente tampoco era mi caso.

La forma en que yo pude realizar satisfactoriamente la restauración de la colección de sitios en la granja de destino fue a partir de un backup realizado desde la base de datos de contenido, a continuación enumero los pasos a seguir para realizar este workaround.

1.- Identificar la base de datos de contenido que contiene la coleccion de sitios que deseamos restaurar en la granja destino.
2.- Realizar un full backup de esta base de datos mediante SQL Server Management Studio (o mediante t-sql).
3.- Mover el respaldo realizado a una ubicacion que pueda ser accedida desde la base de datos de la granja destino.
4.- Restaurar la base de datos de contenido en una nueva base de datos dentro de la instanacia de SQL Server de la granja de SharePoint destino.
5.- Montar la base de datos con el siguiente comando de PowerShell:

Mount-SPContentDatabase "Nombre_de_la_base_de_datos_de_contenido_restaurada"  -WebApplication http://webapplication_destino

Por ultimo es importante recordar que una base de datos de contenido puede contener mas un site collection por lo que si este es su caso, desafortunadamente tendrán que borrar manualmente las colecciones de sitios que no utilicen.

Referencias:
Restore-SPSite
Mount-SPContentDatabase

Happy Coding!

viernes, 28 de junio de 2013

SkyDrive Pro app para Windows 8 e iOS

Tal como lo dice el titulo de este post, el día de ayer Microsoft libero la app de SkyDrive Pro para Windows 8 y para iOS, las cuales pueden ser descargadas desde sus respectivos stores.


Desafortunadamente estas apps solo funcionan para suscriptores de Office 365 que utilizan SharePoint Online (SPO), pero esperemos que en un futuro cercano Microsoft agregue soporte para deployments on-premises

Happy testing!

sábado, 22 de junio de 2013

Listar folders utilizando la API REST de SharePoint Online

En ocasiones es necesario navegar programáticamente a través de la estructura de carpetas de una librería de documento o de una carpeta en específico, esta actividad es bastante sencilla realizándola mediante la API de servidor de SharePoint con la que hemos venido trabajando los últimos años.

Sin embargo a partir del nuevo paradigma de desarrollo de apps para SharePoint 2013, nos enfrentamos a nuevas formas de realizar los que antes ya hacíamos con API del servidor utilizando y nos lleva a utilizar métodos mucho más estándares y que son compatibles con el nuevo modelo de apps, me refiero a utilizar la API REST de SharePoint 2013.

En esta ocasión voy a ejemplificar como cumplir con la tarea de listar las carpetas de una librería de documentos mediante la api REST, lo primero que necesitamos en comenzar a construir la consulta REST a utilizar contra una librería de documentos, en principio la siguiente consulta nos mostraría la información de una librería de documentos:

https://myportal.sharepoint.com/_api/web/GetFolderByServerRelativeUrl('/Folders%20Library')

Donde “Folders Library” es el nombre de la librería de documentos de la cual quiero mostrar sus carpetas. Noten el uso del método GetFolderByServerRelativeUrl que se encuentra a nivel del “objeto” Web y el cual nos permite abrir un folder en particular, en este caso la librería de documentos en si misma.


Lo siguiente es utilizar la opción $expand para acceder a la “propiedad” Folders de la librería de documentos, algo como lo siguiente: https://myportal.sharepoint.com/_api/web/GetFolderByServerRelativeUrl('/Folders%20Library')?$expand=Folders


Por ultimo solo usamos la opción $select para seleccionar los campos que necesitamos, recuerden que siempre debemos limitar la cantidad de información que solicitamos al servidor, solo para fines de optimizar nuestro desarrollo, la url de consulta final:

https://myportal.sharepoint.com/_api/web/GetFolderByServerRelativeUrl('/Folders%20Library')?$select=Folders/name,Folders/ServerRelativeUrl,Folders/ItemCount&$expand=Folders

Una vez que tenemos lista la consulta solo agrego un código de ejemplo que pinta las carpetas que se encuentran dentro de la librería de documentos como un listado, Show me the money!

El script:









El resultado:

Happy Coding!

miércoles, 5 de junio de 2013

Recomendaciones para despliegue SharePoint 2013

Recientemente me he embarcado en un proyecto que implica el despliegue de una granja de SharePoint 2013 con 16  servidores, si, como lo leyeron… 16 servidores!

Dado que el propósito de esta arquitectura será servir como un repositorio central de una gran cantidad de documentos, es decir Archiving, se ha diseñado una arquitectura que a grandes rasgos es integrada por los siguientes servidores:

3 servidores Web Front End
2 Servidores de Aplicación
11 Servidores dedicados para el servicio de búsqueda

Sin lugar a dudas más adelante estaré comentando como me ha ido con este despliegue de SharePoint, por el momento comparto algunos de los enlaces que a mí me han servido bastante para dimensionar y diseñar este monstruo de granja:


Adicionalmente, y dado que es un proyecto que estamos realizando en conjunto con MCS (Microsoft Consulting Services) el equipo de soporte premier me ha recomendado instalar los siguientes fixes liberados hasta el momento, tómenlos en cuenta para sus implementaciones:



Happy Configuring!

miércoles, 29 de mayo de 2013

SharePoint 2013 - Recuperar imagenes de libreria de imagenes mediante REST

En estos últimos días me he estado jugando un poco con la API REST para crear funcionalidad para SharePoint Online en donde, como todos ustedes ya saben, no se puede desplegar soluciones full trust.

La API REST de SharePoint es tan fácil de usar que combinándola con un poco de JavaScript y utilizando alguno de los frameworks más populares como jQuery, Knockout, JsRender, etc, etc, se pueden lograr cosas bastante funcionales y sobre todo muy visuales.

En esta ocasión voy a compartir un ejemplo de cómo recuperar las Urls de las imágenes que se encuentran en una librería de imágenes para mostrarlas en una WebPart.

Lo primero que debemos hacer y tal vez lo más “difícil” es construir la consulta ODATA que recupere los metadatos que necesitamos para obtener las urls de las imágenes.

En mi ejemplo la librería de imágenes se llama “Car Images” y se encuentra dentro de un subsitio WXYZ (el nombre de sus subsitio), por lo que la url podría quedar como la siguiente:

https://sitioprincipal/subsitio/_api/web/Lists/getbytitle('Car%20Images')/items?$Expand=File&$select=File/ServerRelativeUrl

La parte fundamental es la que esta marcada en negro, con esa consulta podemos recuperar las urls de las imágenes, sin embargo existe el inconveniente de que las urls que recuperamos pertenecen a las imágenes originales y que pueden ser muy grandes (como en mi caso) por lo que lo ideal es recuperar las imágenes pequeñas o thumbnails que se crean automáticamente cuando los archivos de imágenes se cargan en la biblioteca. Para lo anterior se debe modificar un poco la consulta para acceder a la carpeta “_t” que es en donde se encuentran esas imágenes miniatura, y quedaría de la siguiente manera:

https://sitioprincipal/subsitio/_api/web/GetFolderByServerRelativeUrl('Car%20Images/_t')?$Expand=Files&$select=Files/ServerRelativeUrl

Noten el uso de la función GetFolderByServerRelativeUrl para acceder a la carpeta “_t” y enumerar las imágenes miniatura. Una vez que ya tenemos la consulta lo siguiente es escribir un Html muy sencillo en el que se ejecute esta consulta y se pinten las imágenes en el HTML. Algo como lo siguiente podría funcionar:






Y si ponemos este Html dentro de un content editor...funciona!

Nótese que en este caso por simplicidad solo concateno texto para formar el HTML, algo que podría hacerse mucho mas elegante con Knockout por ejemplo, pero eso sera en un siguiente post.

Happy coding!

Etiquetas

SharePoint 2010 (38) Microsoft (32) Desarrollo SharePoint (31) Gerardo Reyes Ortiz (27) SharePoint (20) SharePoint 2013 (18) Errores SharePoint (12) México (10) PowerShell (9) Silverlight (8) Visio Services (7) Features (6) MVP (6) Silverlight 3 (6) WebCast (6) Workflows (6) Configuracion SharePoint 2010 (5) D.F. (5) API REST (4) Configuracion SharePoint 2010; (4) Troubleshooting (4) Visual Studio 2010 (4) Visual studio (4) WSS (4) Web parts (4) Apps (3) Comunidad SharePoint (3) Configuración SharePoint 2013 (3) ODATA (3) SharePoint Server (3) SharePoint; Instalación SharePoint; Troubleshooting; Search Service (3) Silverlight 3.0 (3) Silverlight Toolkit (3) WebParts (3) javascript (3) jquery (3) Eventos SharePoint (2) Office 2010 (2) PeoplePicker (2) REST (2) SQL Server (2) Scripting (2) Search Service Application (2) SharePoint Designer (2) UPA (2) UPS (2) Workflows SharePoint (2) host header (2) Apps Development (1) Big Bang (1) CAS (1) CSOM (1) Codeplex (1) CompartiMOSS (1) Configuracion SharePoint 2010; Errores SharePoint (1) Configuracion SharePoint 2010; SharePoint 2010 (1) Custom Actions (1) Custom Editor Parts (1) Delegate Controls (1) Deployment (1) DisableLoopbackCheck (1) Document Library (1) Entrevista (1) Examenes de Certificación (1) Extract WSP (1) FBA (1) FS4SP (1) Fakes (1) Fast Search Server 2010 For SharePoint (1) Fiddler (1) HTTP.SYS (1) HTTPS (1) JSON (1) Language Pack's (1) Latam (1) MAXDOP (1) MCSM (1) MSExpertos (1) MVC (1) Microsoft México (1) Microsoft; Codeplex; Screencast; (1) My Sites (1) SQL Server 2012 (1) SQL Server Reporting Services (1) Screencast (1) Screencast; (1) Service Applications (1) Service Pack (1) SharePoint 2007 (1) SharePoint 2010 SP 1 (1) SharePoint API (1) SharePoint Conference (1) SharePoint Emulators (1) SharePoint Farm (1) SharePoint Health Analyzer (1) SharePoint Magazine (1) SharePoint Online (1) SharePoint Search (1) SharePoint Test (1) SharePoint; Desarrollo SharePoint (1) Shims (1) Simposio (1) Simposio Latinoamericano (1) SkyDrive Pro (1) Soporte Microsoft (1) Templates (1) Tip (1) VSeWSS (1) Virtual Machine (1) Visual Studio 2012 (1) WCF (1) WSS; IIS 7 (1) Web API (1) Web Content Management (1) Web Services (1) Windows 8 (1) Windows Live ID (1) Xml (1) appcmd (1) iOS (1) jqGrid (1) onload function (1)