jueves, 29 de septiembre de 2016

Colección de sitios en read-only no se puede desbloquear, en estado "Lock"

Hoy vino un paciente con depresión que no avanzaba en su estado mental y se obsesionaba con lo mismo: estar bloqueado.



Si una colección de sitios de SharePoint aparece en Read-Only y no hay forma de desbloquearla ni mediante la Central de Administración en "Application Management" -> "Site Collections" -> "Site Collection Quotas and Locks" (donde todos los controles aparecen inactivos) ni mediante un comando de PowerShell Set-SPSite con opción "Unlock", existen al menos un par de soluciones eficaces:

1.)
$admin =  new-object Microsoft.SharePoint.Administration.
SPSiteAdministration('http://sitiobloqueado')
$admin.ClearMaintenanceMode()
$site.MaintenanceMode


2.) Utilizando reflection para evitar crear objetos que quizás no estén disponibles en 1.)
$site = Get-SPSite http://urltofreakinlockedsite/
$site.GetType().GetProperty("MaintenanceMode").GetSetMethod($true).Invoke($site, @($false))

miércoles, 21 de septiembre de 2016

SharePoint Designer: Pasar un Workflow de un sitio web a otro.


En este caso perdimos a un paciente.

Bueno, no lo perdimos, digamos que vio la ventana abierta de la habitación del hospital, y como estaba en un bajo se escapó por ella y no lo volvimos a ver.

Menos mal que teníamos a su hermano gemelo desplegado en otro sitio y pudimos hacer un clon de él.

Para pasar un workflow hecho con SharePoint Designer de un sitio a otro haremos lo siguiente:

1. En el sitio donde está el workflow hacemos clic en exportar a Visio, elegimos una ubicación.

2. Vamos a la carpeta donde lo hemos guardado y encontraremos un archivo de tipo vwi.

3. Cambiamos la extensión de vwi a zip y descomprimimos los archivos.

4. Eliminamos el archivo de tipo .xoml.wfconfig.xml y comprimimos los restantes a zip, ni a rar ni a cualquier otra cosa, debe ser a zip.

5. Volvemos a SharePoint Designer y en el sitio donde queremos rescatar el workflow hacemos clic en importar desde Visio.

6. Seleccionamos el archivo anterior y configuramos como deseemos, en nuestro caso era un workflow reutilizable asociado a un tipo de contenido, pero puede ser de lista en otros casos.

¡A partir de ahora vigilaremos mejor las ventanas abiertas para que nuestro paciente no vuelva a tirarse!

viernes, 2 de septiembre de 2016

Depurar un sitio de SharePoint Online si no es de desarrollador. Sideloading of apps is not enabled in this site.

A veces pasa, tienes que hacer las cosas sin ver y guiándote más por la intuición porque el equipo de tu hospital está anticuado o incompleto.

Ya vale!

En este caso teníamos un sitio de SharePoint Online de tipo Project en el cual teníamos que depurar una app desarrollada en Visual Studio, de aquí inferimos que no podemos depurar nuestro desarrollo en un sitio para Project por el claro motivo de que el sitio de desarrollador no puede serlo a la vez de Project.

Ya suponemos querido lector que has configurado en Azure tu ServiceBus y has puesto su cadena de conexión correctamente en las propiedades del proyecto de SharePoint App, pues bien, al darle a F5 para iniciar tu depuración te aparece el siguiente mensaje como error:

Error en el paso de implementación 'Instalar aplicación para SharePoint': La instalación de prueba de aplicaciones no está habilitada en este sitio.

O bien en inglés, no marginemos a la lengua de Shakespeare:

Sideloading of apps is not enabled in this site.

Lo cual quiere decir que este sitio no es de desarrollador, si no que está pensado para hacer funciones de otro tipo de entorno.

¿Cómo actuar en este caso que tenemos que utilizar un sitio que no es desarrollador para desarrollar?

Habilitando la característica Sideloading en el sitio.

Primero, si no lo has hecho ya, instala la herramienta de PowerShell para Azure con sus módulos.

Después abre un PowerShell ISE o una ventana de PowerShell Azure, a gusto del consumidor, y ejecuta el siguiente script:

$programFiles = [environment]::getfolderpath("programfiles")
add-type -Path $programFiles'\SharePoint Online Management Shell\Microsoft.Online.SharePoint.PowerShell\Microsoft.SharePoint.Client.dll'
Write-Host 'To enable SharePoint app sideLoading, enter Site Url, username and password'
$siteurl = Read-Host 'Site Url'
$username = Read-Host "User Name"
$password = Read-Host -AsSecureString 'Password'
$outfilepath = $siteurl -replace ':', '_' -replace '/', '_'
try
{
    [Microsoft.SharePoint.Client.ClientContext]$cc = New-Object Microsoft.SharePoint.Client.ClientContext($siteurl)
    [Microsoft.SharePoint.Client.SharePointOnlineCredentials]$spocreds = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($username, $password)
    $cc.Credentials = $spocreds
    Write-Host -ForegroundColor Yellow 'SideLoading feature is not enabled on the site:' $siteurl
    $site = $cc.Site;
    $sideLoadingGuid = new-object System.Guid "AE3A1339-61F5-4f8f-81A7-ABD2DA956A7D"
    $site.Features.Add($sideLoadingGuid, $true, [Microsoft.SharePoint.Client.FeatureDefinitionScope]::None);
    $cc.ExecuteQuery();
    Write-Host -ForegroundColor Green 'SideLoading feature enabled on site' $siteurl
}
catch
{
    Write-Host -ForegroundColor Red 'Error encountered when trying to enable SideLoading feature' $siteurl, ':' $Error[0].ToString();
}
En nuestro caso, la ruta de la dll Microsoft.SharePoint.Client estaba en C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.dll

Ahora prueba tu código con Visual Studio, deberías poder depurar sin que te de el anterior error, basta un F5 teniendo como proyecto de inicio el proyecto de SharePoint con el ServiceBus configurado correctamente.

Cuando termines de depurar y quieras dejar todo como estaba, sustituye la línea $site.Features.Add($sideLoadingGuid, $true, [Microsoft.SharePoint.Client.FeatureDefinitionScope]::None);
por
 $site.Features.Remove($sideLoadingGuid, $true);

Gracias: http://www.alexandervanwynsberghe.be/debugging-apps-for-sharepoint-online/