jueves, 9 de julio de 2015

Limpiar la cache de Office Web Apps 2013

Office Web Apps automaticamente cachea los documentos dentro de un determinado tiempo configurado en el servicio. Cuando actualizas un documento, y necesitas refrescar la cache de OWA para que el documento actualizado se vea reflejado de forma online, tienes que realizar los siguientes pasos:

Abrir una consola con permisos de admin, y ejecutar

Stop-Service wacsm

image

A continuación ejecutar el siguiente comando: Get-OfficeWebAppsFarm

Hay dos parámetros que nos interesan: CacheLocation y RenderingLocalCacheLocation

image

En este caso borro todo el contenido de la carpeta Working.

D:\Data\Cache\OfficeWebApps\Working

image

A continuación ejecuto el siguiente comando: Start-Service wacsm

image

Automáticamente crea las carpetas, y cuando accedamos al documento que queriamos que se actualice, ya aparecerá la nueva versión.

image

Deletion Policies Sharepoint Online (Centro de directivas de eliminación de documentos) mediante Compliance Center

Ingresar a la sección de Compliance de nuestro Office 365 Admin Center.

image

Seleccionar “Manage Document deletion…..”

image

A continuación seleccionar “Directivas de eliminación”

image

 

image

image

image

Una vez que tengo creada la directiva, tengo dos posibilidades, asignarles esta directiva a un template de sitio, Ej: a todos mis sitios que usan la plantilla Team Site les asigno esta política.

image

image

image

Otra posibilidad es asignar directivas a un site collection específico.

image

A continuación buscas el site collection

image

A continuación agregas las políticas.

image

Pueden pasar hasta 24 horas para que las asignaciones de directivas nuevas o actualizadas se hagan efectivas o que los administradores de sitios de SharePoint las puedan ver.

image

 

Más información en el siguiente link:

https://technet.microsoft.com/en-us/library/dn792008.aspx

https://channel9.msdn.com/Events/SharePoint-Conference/2014/SPC267

sábado, 6 de junio de 2015

Problemas al enviar un mail en un workflow de Sharepoint 2013 (u Sharepoint Online)

Los workflows quedaban en un estado suspendido cuando ejecutaba una acción de envió de mail en un workflow.

image

El mensaje de error que lanzaba era: Se está reintentando la última solicitud. Próximo intento programado después de: 03/06/2015 14:04. Detalles de la última solicitud: HTTP Unauthorized a https://tenantName.sharepoint.com/sites/urlSiteCollection/_api/sp.utilities.utility.SendEmail, Id. de correlación: 610bf69b-f54b-8e29-a894-96a47cd758cb, Id. de instancia: 87ae92b3-26ad-4a93-be71-83e0e76b76ca
Acceso denegado. No tiene el permiso necesario para realizar esta acción o tener acceso a este recurso.

El problema era que se estaba enviando a un grupo, el cual tenía seteada la visualización del grupo de forma limitada (“Integrantes del Grupo”). La solución fue cambiar la configuración para que todos los usuarios puedan ver los integrantes del grupo

image

domingo, 3 de mayo de 2015

Application Insights para Sharepoint

Microsoft liberó hace unas semanas el producto “Application Insights” que permite agregar el tracking o ver la performance de sitios webs o apps.

Voy a mostrar un ejemplo de cómo integrarlo con Sharepoint (en este caso Sharepoint Online, pero se puede hacer lo mismo para Sharepoint on-premise mientras el cliente tenga acceso a internet)

Ingreso al portal nuevo de Azure (https://portal.azure.com) y creo un servicio de “Application Insights”. Seleccionar en el tipo de aplicación “Aplicación web ASP.NET”

image

image

image

Una vez creado el servicio hago click en el icono de inicio rápido.

image

Después selecciono “Obtener código para supervisar mis páginas webs”

image

Copio el código, y voy a una página de Sharepoint, agrego un web part de código (Script Editor).

image

Y pego el código

image

Después de un tiempo de navegar la página, vemos que ya tenemos resultados

image

image

image

image

Podemos agregar custom eventos, por ejemplo: Qué usuario estaba logueado

appInsights.trackEvent("UsuarioLogueado:christianazcon");

image

En la página lo veremos así

image

Para tomar el usuario loguedo en Sharepoint podemos usar la siguiente variable de javascript “_spPageContextInfo.userLoginName”. Esta variable no siempre está disponible, ya que depende del tipo de página y feature que se tiene habilitada. Por ello también podés usar REST o JSOM.

image

Al revisar en Azure cómo quedo el evento vemos esto.

image

Cómo podemos hacer para que se deploye en cada página de Sharepoint? Tenés dos opciones: agregar el código en la master page, o utilizar inject JavaScript (javascript embed). El último es más recomendado, ya que es más mantenible.

En otro post mostraré cómo podemos usar esta funcionalidad en nuestros servidores on-premise descargando el cliente para Windows Server

image

Más información:

http://azure.microsoft.com/en-us/documentation/articles/app-insights-web-track-usage/

Azure Services Bus (Events Hubs) con Sharepoint

Event Hubs es un servicio de Azure que permite agregar y procesar millones de eventos por segundo. Es muy útil para almacenar datos en tiempo real o de forma batch.

image

Hace un tiempo se liberó el sdk para trabajar vía Javascript (+ REST) con Event Hubs. https://github.com/ddobric/ServiceBusJavaScriptSdk

En este post lo usaremos para hacer un custom analytics para sitios de Sharepoint o para evaluar en tiempo real quién se conecta al sitio. Hace algunas semanas Microsoft libero Azure Insights para hacer el tacking del uso en sitios (http://azure.microsoft.com/en-us/services/application-insights/). La idea es mostrar cómo se podría hacer con Azure Event Hubs, y tener tu propio Azure Insights.

image

image

image

el sdk requiere algunos parámetros

var queuePath = "sharepointanalytics";
var ehClient = new EventHubClient(
            {
                'name': queuePath,
                'devicename': 'urlsitio', // es la especificación para “partition key”
                'namespace': "sharepointanalytics-ns",
                'sasKey': "gIAsGZEd3kObjQN9gvnx7wRjm3Hf97aBmFyXWbszBtQ",
                'sasKeyName': "RootManageSharedAccessKey",
                'timeOut': 10,
            });

‘queuePath’ es el nombre del Event Hub

image

'devicename' se usa cómo key de partición, ver el siguiente link: https://msdn.microsoft.com/en-us/library/azure/dn836025.aspx

'namespace': es el nombre del service bus

image

'sasKey': es el nombre de la policy de acceso del service bus, 'sasKeyName': es la primary key de la policy de acceso.

image

image

Ej: Endpoint=sb://sharepointanalytics-ns.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=gIAsGZEd3kObjQN9gvnx7wRjm3Hf97aBmFyXWbszBtQ=

En el sdk, hay un archivo llamado EventHubSamples.html, lo edito y

image

Agrego el siguiente código html (lo importante en amarillo)

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
          "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>  
    <title>Service Bus JavaScrcipt SDK QueueClient Test Page</title>

   <link rel="stylesheet" href="css/main.css" type="text/css" />
    <script type="text/javascript" src="http://code.jquery.com/jquery-latest.js"> </script>
    <script src="Scripts/servicebusjssdk-1.2.min.js"></script>
    <script type="text/javascript">
        $(document).ready(function () {

           var queuePath = "sharepointanalytics";
            var ehClient = new EventHubClient(
            {
                'name': queuePath,
                'devicename': 'urlsitio', // This is by specification partition key.
                'namespace': "sharepointanalytics-ns",
                'sasKey': "gIAsGZEd3kObjQN9gvnx7wRjm3Hf97aBmFyXWbszBtQ=",
                'sasKeyName': "RootManageSharedAccessKey",
                'timeOut': 10,
            });

            $("#btnSend").click(function () {

                var eventBody = { "Horario": "22/02/2015 10:00 am", "Pagina": "Home.aspx", "sitio": "http://contoso.com", "usuario": "christianazcon"   };

                var msg = new EventData(eventBody);               

                ehClient.sendMessage(msg, function (messagingResult) {
                    $("#result").html(messagingResult.result);
                    $("#eventData").html(JSON.stringify(eventBody));
                });
            });

        });
    </script>
</head>
<body>
     <button id="btnSend">Send</button>
    <div class="message-wrapper">
                <p>Event Data:</p>
                <div id="eventData">
                </div><br />
                <p>Message Body:</p>
                <div id="result">
                </div><br />
      </div> <!-- END: .message-wrapper --></body>
</html>

En la página se ve así:

image

Presiono Send, me retorna “Sucess”

image

Ahora abro Service Bus explorer, https://code.msdn.microsoft.com/windowsazure/Service-Bus-Explorer-f2abca5a

Y veo que ya aparece el mensaje que envie

image

image

Ahora tendrás que revisar en que partición cayó el mensaje, ej: 5

image

Presiono Start

image

image

Cómo pueden ver, aparece el texto del mensaje.{"Horario":"22/02/2015 10:00 am","Pagina":"Home.aspx","sitio":"http://contoso.com","usuario":"christianazcon"}

Esto nos permite agregar un montón de eventos a las páginas mediante javascript y guardarlas en un Event Hub, y procesarlos a posteriori.

Por ejemplo para tomar el usuario logueado, puedo usar el siguiente script: https://lixuan0125.wordpress.com/2013/05/10/sharepoint-2013-get-current-user-loginname-using-jsom-rest/

Ej:

  • Eventos que realiza el usuario (donde hace click, cuanto tiempo está en cada página, etc)
  • Información de navegadores
  • etc