[Office 365] Tip para refrescar referencias a fichero JavaScript

En estas últimas semanas hemos estado algo atareados en la implementación de una Intranet en Office 365, y debido a que en algunos aspectos estamos bastantes acostumbrados a trabajar Onpremise pasamos por alto diversas utilidades que nos hacen mucho más rápido nuestro trabajo (bueno más bien que no nos hacen perder tiempo). 

Problema

Añadimos unas referencias JavaScript a una página haciendo uso del WebPart de Inserción de HTML y la primera vez que lo llamamos funciona perfectamente. Ahora bien hacemos cualquier modificación en el fichero “JS” y ese cambio no se veía reflejado. Incluso eliminando el fichero el aplicativo seguía funcionando.

¿Qué?

Las primeras veces, pensamos que el entorno en la nube se había rallado o funcionaba mal, y nuestro primer pensamiento es cierro y abro el navegador y problema resuelto. Algunas veces esto funcionaba pero la gran mayoría no. Entonces claro siempre esta la gracia/broma de turno vamos a hacer un IIS jejej Si espera que vamos al DataCenter este que esta en la vuelta de la esquina y lo reiniciamos jejje Partiendo de esta base nos vamos a un entorno OnPremise e intentamos repetir el mismo procedimiento. y observamos que su funcionamiento es el mismo que el que esta ocurriendo en Office 365. Claro aquí reiniciamos el IIS y acto seguido funciona (pero si sumamos el tiempo de que se levante SharePoint, tengamos otra vez listo el entorno y continuemos el hilo por donde lo habiamos dejado pues se nos puede ir 15 minutos fácilmente, si le sumamos que estamos desarrollando en JavaScript y que cuando subimos el JavaScript al no ser un lenguaje que el editor nos lo valide al instante como en .Net es más que posible que tengamos algún fallo tonto. Con lo cual es un infierno 

¿Porque este funcionamiento?

Lo que esta ocurriendo, como habeís podido deducir es que estamos teniendo un problema con la cache (pero no la cache del navegador) sino la cache del propio SharePoint y que si tu me has pedido un fichero y este fichero lo tengo en mi cache pues no hace falta que lo vuelva a consultar a la Base de Datos y te lo envió yo directamente. Este funcionamiento es lo normal por mucho que a nosotros ahora nos este molestando.

¿Como solucionarlo?

Como todo problema o casi todo problema tiene solución, y cual es su solución pues con dos letras se soluciona este problema si a la referencia JavaScript le añadimos el número de versión a nuestra petición y este número lo incrementamos cada vez que realizamos una petición. Lo que estamos haciendo a que como no coincide la versión con la que tiene cacheada el IIS pues la vuelve a  consultar y nos vuelve a enviar el fichero con los cambios realizados. Para ello basta con añadir la siguiente referencia:

<script type=”text/javascript” src=”../Documents/js/job.js?v=84″></script>

Desde aquí darle las gracias a mi compañero Miguel Alberto que dado su perfeccionamiento y buen hacer encontró la solución a este “problema”. y nos hizo la vida un poco más sencilla en este proyecto.

Os adjunto una pantalla de la solución que hemos implementado, mucho HTML5, consumo de la API Rest y una interfaz gráfica espectacular, en la que funciona el drag and drop, y conseguimos subir elementos a una biblioteca de SharePoint de una manera muy sencilla (tal y como explique en este post

 


[SharePoint 2013] Asignar Permisos mediante flujos de Trabajo

Introducción

Uno de los grandes potenciales que trae consigo SharePoint “out-of-the-box” son los flujos de trabajo. De una forma que en anteriores versiones hacer cualquier flujo con cierta complejidad requería bien una herramienta de terceros como pueda ser Nintex ahora mismo tanto la interfaz gráfica como las acciones que vienen por defecto son prácticamente iguales. (En la versión Online de Nintex han añadido unas mejoras en el apartado social impresionantes con la posibilidad de comunicación con las principales redes sociales). 

A la hora de implementar flujos de trabajo tenemos dos opciones:

 

  1. SharePoint Designer, para flujos relativamente simples y sin mucha complejidad. No por el motivo de que no esten soportados sino más bien porque Designer es una herramienta cuya finalidad es Diseñar no implementar y por lo tanto su comportamiento es un tanto impredecible además de que no es reutilizable.
  2. Visual Studio 2012/2013 Ahora tiene un aspecto visual mucho más sencillo y simple y eso hace que plantearse realizar un flujo no sea una obra del escorial o algo que sólo lo más elegidos pueden hacer. Tiene una interfaz gráfica muy sencilla y muy simple.

 

Manos a la obra

Una vez somos conscientes de las opciones que hay, vayamos a un caso de uso básico:

– Una vez el usuario introduce un elemento en esta lista, queremos que otro usuario/grupo se le asigne esa tarea. Por decirlo en cristiano tenemos una lista de tareas que contiene descripción de la tarea y departamento que va a realizar esta tarea, lo que queremos es que cuando se asigne una tarea solamente los miembros de este departamento puedan ver la tarea. Aclaración partimos de la base de que cada departamento que se muestra en la lista es un grupo de SharePoint. 

Dado esta petición tenemos varias opciones de hacerlo :

 

  1. Mediante un EventReceiver: que cada vez que se añada un elemento que se modifique los permisos.
  2. Mediante un Flujo de Trabajo

 

La ventaja de hacerlo con un EventReceiver es que si en un futuro se piden más requisitos tiene un grado mayor de personalización, sin embargo su implementación es bastante más costosa. 

¿Como hacerlo fácilmente?

1.- Abrir SharePoint Designer

2.- Crear un flujo de trabajo en la lista en cuestión

3.- Hacer un Paso de Suplantación

4.- Quitar los permisos que tiene por defecto

5.- Asignar los permisos al departamento en cuestión

6.- Guardar y Publicar

Conclusión

Muchas veces SharePoint nos complica la vida, o bueno quizás somos nosotros que elegimos la opción más difícil. Pero antes de plantearnos una solución faraonica conviene mirar lo que viene de serie y en caso de que no llegue (que serán en muchas ocasiones) pues entonces extendemos su comportamiento.

 

 

Material WebCast Comunidad Office 365 Desarrollando con Yammer

El pasado Jueves 14 tuve el placer de impartir un WebCast dentro de la serie de WebCast de la Comuidad de Office 365  sobre Desarrollo con Yammer.  Aquí os dejo la presentación:

 

Y desde el siguiente link os podéis descargar las diferentes demos que realice:

1.- Uso del SDK de Yammer

2.- Creación de una APP en la Office Store haciendo uso de Yammer

3.- Creación de una APP de Windows Phone 8 usando Yammer

4.- Creación de una APP en Modo Consola para obtener datos de Yammer

A todos los asistentes MUCHÍSIMAS GRACIAS por haber asistido y si alguien no pudo asistir y lo quiere visualizar lo puede hacer registrándose en este link y descargándose la grabación.

Saludos,

WebCast Comunidad Office365: Introducción al desarrollo con Yammer

Dentro de la serie de WebCast impartidos por la Comunidad de Office 365, a llegado mi turno y  tengo el placer de dar un WebCast tiulado Desarrollo sobre Yammer

Los contenidos del mismo serán los siguientes:

  • ¿Que es una APP de Yammer?
  • Como Autentificarnos contra Yammer
  • Uso del SDK de Yammer
  • API Rest
  • API Rest de Yammer vs API Social de SharePoint
  • SDK Windows Phone
  • Demos

 

Queréis acompañarme?  Pues apuntar esta fecha jueves 14 a las 18:00  e inscribiros en el siguiente enlace https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032562827&Culture=es-ES&community=0

 

SharePoint 2013: Modificar la Fecha de un elemento mediante el modelo de objeto de JavaScript

Si no me he vuelto loco, algo tan sencillo como añadir/modificar un valor de un campo de tipo fecha en una lista personalizada puede convertirse en una odisea utilizando el modelo de objetos de JavaScript.

En primer lugar intente introducir una fecha introduciéndole el mismo formato que en el modelo de objetos de servidor es decir con el formato ISO8601 es decir yyyy-mm-ddThh:mm:ssZ tras un primer intento me da el error que el formato de fechas no es correcto.

El segundo intento voy a probar a crearme un objeto new Date() de JavaScript e intentar asignarlo directamente al campo que quiero modificar de la siguiente forma:

var year=2013;

var month= 09;

var day= 10;

var fecha= new Date(year, month, day);

Este caso es todavía mucho más curioso porque funciona en algunos navegadores por ejemplo en Google Chrome funciona perfectamente y en Internet Explorer y Mozilla no funciona. Intento depurar un poco y ver si el problema lo tengo en que la variable Date me da un valor diferente según el navegador. Tras comprobar el valor devuelve la función Date y comprobar que es el mismo en los tres navegador. Tengo todavía muchas curiosidad del porque. 

Bueno pues tras mirar mucho lo que esta ocurriendo es que SharePoint 2013 esta esperando la fecha en formato UTC y sino esta en este formato pues falla. Para solucionarlo en un primer lugar tenemos que crearnos la fecha tal y como hemos creado en el anterior caso y convertimos este valor obtenido en formato UTC de la siguiente forma:

function addBrowserUtcOffset(date) {
    var utcOffsetMinutes = date.getTimezoneOffset();
    var newDate = new Date(date.getTime());
    newDate.setTime(newDate.getTime() - (utcOffsetMinutes*60*1000));

    return newDate;
}

La verdad es que no se porque motivos SharePoint en esta versión se comporta de forma diferente dependiendo del modelo de objetos que se utiliza, es algo que no lo entiendo y que puede causar un tanto de confusión en los programadores. Que conste que me parece bien que se adapte, pero que se adapte para lo bueno tambien. Por ejemplo en la API Rest es algo tedioso que nos devuelvan campos que no vamos a utilizar nunca, que se haga una API más para el uso de los desarrolladores.

Pero bueno sabiendo la solución se puede poner remedio 🙂

Configurando los WebParts de Búsqueda de SharePoint 2013

Una de las grandes mejoras que trae la versión 2013 de SharePoint, es la integración total de Fast como un elemento de la plataforma. De esta integración surge una modificación en los WebParts de búsqueda y es que ahora la potencia que tienen estos son mucho mayores ya que ahora tienes muchas más posibilidades de configuración. 

Una mala configuración (más bien no hace ninguna configuración) hace que se muestren en el resultado elementos internos de SharePoint que no se deberían mostrar a un usuario final. Para ello deberemos quitar:

  1. Quitar el acceso a los links de tipo de contenido externo (BCS)
  2. Quitar las carpetas de los resultados 
  3. Quitar el resultado de todos los items (AllItems.aspx)
  4. Quitas los enlaces a los elementos de la lista
  5. Quitas los links de la lista
  6. Quitar la vista “explorer”

Para ello una vez añadimos el WebPart tenemos que pulsar sobre el botón “Change Query”

:

 

Quitar el acceso a los links de tipo de contenido externo (BCS): 

Carpetas


Alltems.aspx

Enlaces a los Items de la Lista

Enlaces a las Listas

Vista Explorador

 

Conclusión

El buscador introducido en esta versión de SharePoint es una de las grandes mejoras introducidas y como todo poder lleva implicita una gran responsabilidad. El servicio de búsqueda hay que saber configurar lo, optimizarlo y aprovecharlo en nuestros desarrollos. Una mala configuración del servicio de búsqueda pueda hacer que nuestro SharePoint se ralentice en exceso. El no configurar lo como toca también hace que se puedan consultar datos que no correspondan. Este configuración del búscador es solo un aperitivo de todo lo que se puede realizar con las Búsquedas en SharePoint 2013.