SharePoint 2013: Como solucionar el error PerformancePoint Unexpected Error Occurred 11861!

Si os encontráis con este error “tan agradable” al trabajar con el Diseñador de Paneles, no os agobiéis que tiene solución como casi siempre que nos encontramos con errores de “este pelo” en SharePoint. Básicamente, antes de poner a crear un elemento de tipo Analytic Chart o Analytic Grid, acordaros de guardar el origen de datos de SQL Server Analysis Services que hayáis creado. Referencia:

Tras seguir el tip anterior, ya podréis trabajar con normalidad en el Diseñador de Paneles:

image

SharePoint Online: How to do a bulk creation of ODFB Sites using PowerShell!

One of the new features added by Microsoft over the past year to the client object model (CSOM) SharePoint is the possibility of doing massive and asynchronous provisioning of OneDrive To Business (ODFB) sites using the CreatePersonalSiteEnqueueBulk () method of the class ProfileLoader defined in Microsoft.SharePoint.Client.UserProfiles.dll assembly of the CSOM. This method simply requires an array of strings with the e-mails of the Office 365 users we want to be provision ODFB sites as you can see in the script that I created about:  How to do a bulk creation of OneDrive For Business sites in Office 365

############################################################################################################################################

#Script that allows to asynchronously provision OneDrive For Business for a set of users

# Required Parameters:

#  -> $sCSOMPath: Path for the Client Side Object Model for SPO.

#  -> $sUserName: User Name to connect to the SharePoint Online Site Collection.

#  -> $sPassword: Password for the user.

#  -> $sSiteUrl: SharePoint Online Administration Url.

#  -> $ODFBUser: Office 365 user .

############################################################################################################################################

 

$host.Runspace.ThreadOptions = "ReuseThread"

 

#Definition of the function that allows to provision ODFB for a set of users

function Create-ODFBSite

{

    param ($sCSOMPath,$sSiteUrl,$sUserName,$sPassword,$sODFBUsers)

    try

    {    

        Write-Host "----------------------------------------------------------------------------"  -foregroundcolor Green

        Write-Host "Getting the User Profile Information for current user" -foregroundcolor Green

        Write-Host "----------------------------------------------------------------------------"  -foregroundcolor Green

                    

        #Adding the Client OM Assemblies

        $sCSOMRuntimePath=$sCSOMPath +  "\Microsoft.SharePoint.Client.Runtime.dll"  

        $sCSOMUserProfilesPath=$sCSOMPath +  "\Microsoft.SharePoint.Client.UserProfiles.dll"        

        $sCSOMPath=$sCSOMPath +  "\Microsoft.SharePoint.Client.dll"             

        Add-Type -Path $sCSOMPath         

        Add-Type -Path $sCSOMRuntimePath

        Add-Type -Path $sCSOMUserProfilesPath

 

        #SPO Client Object Model Context

        $spoCtx = New-Object Microsoft.SharePoint.Client.ClientContext($sSiteUrl) 

        $spoCredentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($sUserName, $sPassword)  

        $spoCtx.Credentials = $spoCredentials        

        $spoUserProfilesLoader=[Microsoft.SharePoint.Client.UserProfiles.ProfileLoader]::GetProfileLoader($spoCtx)     

        $spoUserProfilesLoader.CreatePersonalSiteEnqueueBulk($sODFBUsers)

        $spoUserProfilesLoader.Context.ExecuteQuery()

        $spoCtx.Dispose()

    }

    catch [System.Exception]

    {

        write-host -f red $_.Exception.ToString()   

    }    

}

 

#Required Parameters

$sSiteUrl = "https://<SPO_Site_Url>/" 

$sUserName = "<SPOUser>@<SPO_Domain>.onmicrosoft.com" 

$sPassword = Read-Host -Prompt "Enter your password: " -AsSecureString

$sCSOMPath="<CSOM_Path>"

$sODFBUsers="<SPOUser1>@<SPO_Domain>.onmicrosoft.com","<SPOUser2>@<SPO_Domain>.onmicrosoft.com"

 

Create-ODFBSite -sCSOMPath $sCSOMPath -sSiteUrl $sSiteUrl -sUserName $sUserName -sPassword $sPassword -sODFBUsers $sODFBUsers

To verify that the ODFB sites have been provisioned I recommend the following post of Thomas Balkeståhl: http://blog.blksthl.com/2014/08/08/office-365-guide-series-verify-provisioned-onedrives-using-powershell/

SharePoint Online: Como provisionar de forma masiva ODFB para varios usuarios!

Una de las novedades que incorporó el modelo de objetos en cliente (CSOM) de SharePoint durante el año pasado es la posibilidad de realizar el provisionado masivo y asíncrono de sitios de OneDrive Para Empresas (ODFB) haciendo uso del método CreatePersonalSiteEnqueueBulk() de la clase ProfileLoader definida en el ensamblado Microsoft.SharePoint.Client.UserProfiles.dll del CSOM. Este método simplemente necesita un array de strings con las direcciones de e-mail de los usuarios de Office 365 para los que se va a provisionar ODFB como podéis ver en el script que he creado al respecto: How to do a bulk creation of OneDrive For Business sites in Office 365

############################################################################################################################################

#Script that allows to asynchronously provision OneDrive For Business for a set of users

# Required Parameters:

#  -> $sCSOMPath: Path for the Client Side Object Model for SPO.

#  -> $sUserName: User Name to connect to the SharePoint Online Site Collection.

#  -> $sPassword: Password for the user.

#  -> $sSiteUrl: SharePoint Online Administration Url.

#  -> $ODFBUser: Office 365 user .

############################################################################################################################################

 

$host.Runspace.ThreadOptions = "ReuseThread"

 

#Definition of the function that allows to provision ODFB for a set of users

function Create-ODFBSite

{

    param ($sCSOMPath,$sSiteUrl,$sUserName,$sPassword,$sODFBUsers)

    try

    {    

        Write-Host "----------------------------------------------------------------------------"  -foregroundcolor Green

        Write-Host "Getting the User Profile Information for current user" -foregroundcolor Green

        Write-Host "----------------------------------------------------------------------------"  -foregroundcolor Green

                    

        #Adding the Client OM Assemblies

        $sCSOMRuntimePath=$sCSOMPath +  "\Microsoft.SharePoint.Client.Runtime.dll"  

        $sCSOMUserProfilesPath=$sCSOMPath +  "\Microsoft.SharePoint.Client.UserProfiles.dll"        

        $sCSOMPath=$sCSOMPath +  "\Microsoft.SharePoint.Client.dll"             

        Add-Type -Path $sCSOMPath         

        Add-Type -Path $sCSOMRuntimePath

        Add-Type -Path $sCSOMUserProfilesPath

 

        #SPO Client Object Model Context

        $spoCtx = New-Object Microsoft.SharePoint.Client.ClientContext($sSiteUrl) 

        $spoCredentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($sUserName, $sPassword)  

        $spoCtx.Credentials = $spoCredentials        

        $spoUserProfilesLoader=[Microsoft.SharePoint.Client.UserProfiles.ProfileLoader]::GetProfileLoader($spoCtx)     

        $spoUserProfilesLoader.CreatePersonalSiteEnqueueBulk($sODFBUsers)

        $spoUserProfilesLoader.Context.ExecuteQuery()

        $spoCtx.Dispose()

    }

    catch [System.Exception]

    {

        write-host -f red $_.Exception.ToString()   

    }    

}

 

#Required Parameters

$sSiteUrl = "https://<SPO_Site_Url>/" 

$sUserName = "<SPOUser>@<SPO_Domain>.onmicrosoft.com" 

$sPassword = Read-Host -Prompt "Enter your password: " -AsSecureString

$sCSOMPath="<CSOM_Path>"

$sODFBUsers="<SPOUser1>@<SPO_Domain>.onmicrosoft.com","<SPOUser2>@<SPO_Domain>.onmicrosoft.com"

 

Create-ODFBSite -sCSOMPath $sCSOMPath -sSiteUrl $sSiteUrl -sUserName $sUserName -sPassword $sPassword -sODFBUsers $sODFBUsers

Para verificar que los sitios de ODFB han sido provisionados os recomiendo el siguiente post de Thomas Balkeståhl: http://blog.blksthl.com/2014/08/08/office-365-guide-series-verify-provisioned-onedrives-using-powershell/

SharePoint 2013: Uso de la API de Cliente para Flujos de Trabajo (I)!

Dentro de las distintas posibilidades que nos proporciona el Modelo de Objetos en Cliente de SharePoint 2013, tenemos la posibilidad de interactuar con los Flujos de Trabajo desplegados haciendo uso del ensamblado específico que para el Service Pack 1 (SP1) está disponible en la ruta: C:\Program Files\Common Files\microsoft shared\Web Server Extensions\16\ISAPI. En concreto, el ensamblado a utilizar es Microsoft.SharePoint.Client.WorkflowServices.dll. Como ejemplo de uso, el siguiente script permite obtener el estado de ejecución de todos los Flujos de Trabajo desplegados en un sitio de SharePoint 2013 OnPremises (para SharePoint Online, la idea sería la misma). El script, os lo podéis descargar desde la siguiente Url: How get the workflow execution status for all the workflows in a SharePoint Site

$host.Runspace.ThreadOptions = "ReuseThread"

 

#Definition of the function that gets the workflow execution status for all the workflows deployed to a SharePoint Site

function Get-SPSitesInSC

{

    param ($sSiteColUrl,$sUserName,$sDomain,$sPassword,$sCSOMPath)

    try

    {    

        Write-Host "-----------------------------------------------------------------------------------"  -foregroundcolor Green

        Write-Host "Getting the workflow execution status for all the workflows deployed in sSiteColUrl" -foregroundcolor Green

        Write-Host "-----------------------------------------------------------------------------------"  -foregroundcolor Green

     

        #Adding the Client OM Assemblies

        $sCSOMRuntimePath=$sCSOMPath +  "\Microsoft.SharePoint.Client.Runtime.dll"

        $sCSOMWorkflowPath=$sCSOMPath + "\Microsoft.SharePoint.Client.WorkflowServices.dll"

        $sCSOMPath=$sCSOMPath +  "\Microsoft.SharePoint.Client.dll"             

        Add-Type -Path $sCSOMPath         

        Add-Type -Path $sCSOMRuntimePath

        Add-Type -Path $sCSOMWorkflowPath

 

        #SharePoint Client Object Model Context

        $spCtx = New-Object Microsoft.SharePoint.Client.ClientContext($sSiteColUrl) 

        $spCredentials = New-Object System.Net.NetworkCredential($sUserName,$sPassword,$sDomain)  

        $spCtx.Credentials = $spCredentials 

 

        if (!$spCtx.ServerObjectIsNull.Value) 

        {

            $spWeb = $spCtx.Web

            $spLists = $spWeb.Lists

            $spCtx.Load($spLists);

            $spCtx.ExecuteQuery();

 

            $spWorkflowServicesManager = New-Object Microsoft.SharePoint.Client.WorkflowServices.WorkflowServicesManager($spCtx, $spWeb);

            $spWorkflowSubscriptionService = $spWorkflowServicesManager.GetWorkflowSubscriptionService();

            $spWorkflowInstanceSevice = $spWorkflowServicesManager.GetWorkflowInstanceService();

            

            Write-Host ""

            Write-Host "Getting all the Lists in $sSiteColUrl" -ForegroundColor Green

            Write-Host ""

 

            foreach ($spList in $spLists)         

            {   

                $spWorkflowSubscriptions = $spWorkflowSubscriptionService.EnumerateSubscriptionsByList($spList.Id);

                $spCtx.Load($spWorkflowSubscriptions);                

                $spCtx.ExecuteQuery();                

                foreach($spWorkflowSubscription in $spWorkflowSubscriptions)

                {            

                    Write-Host "**************************************************************************************"

                    Write-Host "List: "$spList.Title " - Workflow: "$spWorkflowSubscription.Name -ForegroundColor Green

                    Write-Host "***************************************************************************************"

                    Write-Host ""

 

                    $spCamlQuery = New-Object Microsoft.SharePoint.Client.CamlQuery

                    $spCamlQuery.ViewXml = "<View> <ViewFields><FieldRef Name='Title' /></ViewFields></View>";

                    $spListItems = $spList.GetItems($spCamlQuery);

                    $spCtx.Load($spListItems);

                    $spCtx.ExecuteQuery();

 

                    foreach($spListItem in $spListItems)

                    {

                        $spWorkflowInstanceCollection = $spWorkflowInstanceSevice.EnumerateInstancesForListItem($spList.Id,$spListItem.Id);

                        $spCtx.Load($spWorkflowInstanceCollection);

                        $spCtx.ExecuteQuery();

                        foreach ($spWorkflowInstance in $spWorkflowInstanceCollection)

                        {

                           Write-Host "List Item Title:"$spListItem["Title"] 

                           Write-Host "Workflow Status:"$spWorkflowInstance.Status 

                           Write-Host "Last Workflow Execution:"$spWorkflowInstance.LastUpdated

                           Write-Host ""

                        }

                    }                   

                    Write-Host ""

                }

            }

              

            $spCtx.Dispose() 

        }        

    }

    catch [System.Exception]

    {

        write-host -f red $_.Exception.ToString()   

    }    

}

 

#Required Parameters

$sSiteColUrl = "http://<SiteUrl>/" 

$sUserName = "<SharePointUser>" 

$sDomain="<OnPremisesDomain>"

$sPassword ="<Password>" 

$sCSOMPath="C:\Program Files\Common Files\microsoft shared\Web Server Extensions\16\ISAPI"

 

Get-SPSitesInSC -sSiteColUrl $sSiteColUrl -sUserName $sUserName -sDomain $sDomain -sPassword $sPassword -sCSOMPath $sCSOMPath

La salida por pantalla que se genera es la siguiente:

image

SharePoint Online: Como habilitar vínculos anónimos a documentos en sitios!

Al igual que sucede con documentos almacenados en OneDrive para Empresas, es posible habilitar vínculos anónimos a documentos almacenados en sitios de SharePoint Online siempre y cuando hayamos realizado unas configuraciones previas en el tenant:

  • En primer lugar, verificamos que el sitio de SharePoint Online está configurado para poder invitar a usuarios externos a través de la opción que permite crear vínculos anónimos: Allow both external users who accept sharing invitations and anonymous guest links
  • De esta forma, ya podremos generar vínculos para compartir cualquier documento del sitio bien para su lectura, bien para su lectura y edición.

image

image

Office 365: Review of available reports(II)!

Continuing the series of articles on reports available in Office 365, in this article we will review the reports available for SharePoint Online.

  • First, click the «REPORTS» section in the Office 365 Portal Administration. In the REPORTS page, you will see, among others, a SharePoint Online section where we have 3 reports for this service.
  • The Tenant Storage Metrics report provides storage information in SharePoint Online tenant according to the available data and displays the information allowing to filter by days, weeks or months period. Depending on the time period selected, we can see the evolution of storage in the tenant in the last 24 months.
image image
  • For example, in my case the evolution in storage in my tenant in the last 24 months has the look that you can see in the bellow screenshot.
  • The «Team deployed sites» report shows the number of deployed sites identifying active sites compared to non-active sites. In this case, you can display information on a weekly or monthly basis.
image image
  • Finally, the report «Team site storage» shows the evolution in the storage in the team sites available on the tenant. You can apply a weekly / monthly filter.

image

Office 365: Repaso a los informes disponibles (II)!

Siguiendo con la serie de artículo sobre informes disponibles en Office 365, en este artículo vamos a revisar los informes disponibles para SharePoint Online.

  • En primer lugar, accedemos a la sección “REPORTS” del Portal de Administración de Office 365. En la sección SharePoint Online podremos ver que contamos con 3 informes para este servicio.
  • El informe Tenant Storage Metrics nos proporciona el almacenamiento en el tenant de SharePoint Online de acuerdo a los datos disponibles y posibilitando mostrar la información por días, semanas o meses y en función del período de tiempo podemos acceder a la evolución del almacenamiento en el tenant en los últimos 24 meses.
image image
  • Por ejemplo, en mi caso la evolución en el almacenamiento del tenant los últimos 24 meses tiene el aspecto que se puede apreciar en la captura de pantalla.
  • El informe “Team sites deployed” muestra el número de sitios desplegados identificando sitios activos respecto a sitios no activos. En este caso, es posible mostrar información con periodicidad semanal o mensual.
image image
  • Finalmente, el informe “Team site storage” muestra la evolución en el almacenamiento de los sitios de grupo disponibles en el tenant. Se puede aplicar un filtro semanal / mensual.

image

[SUGES]: Disponibles para descarga los materiales de los últimos WebCasts!

Ya tenéis disponible para descarga los materiales de los dos últimos WebCasts que hemos realizado en SUGES. Agradecer de nuevo a los ponentes (Hans, Alberto Díaz y Adrián Díaz) el esfuerzo realizado y a los asistentes el interés mostrado en los temas tratados. Los materiales los podéis encontrar en el sitio web de SUGES:

image

SharePoint 2013: Como solucionar el error de BCS ‘Login failed for user ‘NT AUTHORITY\IUSR’.’!

Si al trabajar con BCS os encontráis que en el momento de mostrarse una lista externa aparece este estupendo error: Message from External System: ‘Login failed for user ‘NT AUTHORITY\IUSR’.’

image

Que no cunda el pánico ya que para entornos de desarrollo (No lo uséis en producción) hay un workaround muy rápido para solucionarlo si necesidad de crear un ID de Aplicación en el Servicio de Almacenamiento Seguro (Recomendación para entorno de producción) que podéis leer en el siguiente artículo: http://blogs.msdn.com/b/sridhara/archive/2014/05/05/bcs-login-failed-for-user-nt-authority-iusr.aspx. Básicamente, el truco pasa por editar el archivo web.config de la Aplicación Web que contiene el sitio dónde habéis creado la lista eterna y localizar en el mismo la propiedad aspnet:AllowAnonymousImpersonation que por defecto tiene un valor “true”:

image

Tras cambiar el valor a “false” para dicha propiedad, veréis como la lista externa se renderiza sin problemas:

image

SharePoint vNext: El camino hacía el que nos lleva Microsoft con los “Azure App Services”!

Aunque es pronto para empezar a hacer conjetura, cada vez está más claro el camino que Microsoft está marcando para productos como SharePoint que muy a mi pesar va a perder peso en favor de nuevas formas de crear soluciones y servicios sobre la plataforma, pero sin que nadie se acuerde de ella Triste. Una prueba de esto lo tenemos en las capas de funcionalidad y servicios que Microsoft ha creado sobre SharePoint Online en Office 365 como Delve, Office 365 Video y los nuevos portales de “nueva generación” que irán apareciendo a futuro. Y la otra prueba, la tenemos de la mano del reciente anuncio de las denominados Azure App Services (announcing the availability of Azure App Services y announcing Azure App Service) o lo que es lo mismo, proporcionar los medios para poder crear Aplicaciones multi-plataforma, multi-dispositivo y totalmente preparadas para la nube. Dentro de Azure App Services, me ha llamado especialmente la atención las denominadas Logic Apps, un tipo de Aplicaciones qué sobre la base de los Servicios de BizTalk permitirán fácilmente integrar y orquestar servicios Clouud y OnPremise lo que sin duda favorecerá el desarrollo de los escenarios híbridos Cloud – OnPremises de que se viene hablando tanto durante los últimos meses. Merece la pena darle una mirada a los siguientes recursos sobre Logic Apps:

Y finalmente, la guinda de todo el pastel: las Azure API Apps Tools for Visual Studio 2013 que acaba de anunciar hoy mismo Microsoft.