Inherits Cloud

Loving Microsoft Cloud, specially Office 365

Categoría: Office365 (página 1 de 2)

Liberada la Release de Marzo 2017 del PnP

Como es habitual por estos días de mes, el equipo del PnP ha liberado una nueva versión, en la que una vez más, he podido colaborar.

Leer articulo completo…

Provisionando una Modern News Page desde código

En la próxima release de Marzo del PnP, el equipo nos ha confirmado que tendremos una Extension para crear Modern Pages desde código. De hecho, parte de ese código ya podemos verlo en este artículo:

Pues bien, si le damos una vuelta más al código, podemos crear “Modern News pages”. El siguiente snippet me ha funcionado en mis pruebas, y supongo que en breve tendremos algo parecido en el propio PnP

Leer artículo completo…

[SPFx] Añadiendo dependencias a Tareas de Gulp Workaround 2

Rápida entrada para explicar un segundo “workaround” a la hora de añadir dependencias a una tarea custom (te recomiendo que leas el post anterior, para tener un mayor contexto del escenario).

Como os decía en el post anterior, he contado con la ayuda de 3 MVPs, y gracias a Waldek, hemos encontrado otra forma de anyadir dependencias, que aunque tampoco es perfecta (es un poco trampa, luego os cuento por qué), sí que está más integrada con el propio sistema de Build del SPFx. Os dejo el propio snippet the Waldek: https://gist.github.com/waldekmastykarz/6726fcfec2d4ccbaeb454c367716a125

El truco esta en usar el metodo “getBundleTask“, del objeto “build.rig“, que nos va a dar la definición de la tarea Bundle del propio spfx. A partir de aqui, podemos ejecutar nuestra tarea despues del bundle, tal y como vemos en el snippet, o incluso podríamos hacer uso de las funciones “serial” o “parallel” para ejecutar varias tareas como dependencia, tal y como os contaba en este otro post.

¿Y por qué este método no es del todo perfecto? Pues porque hacemos uso de un método protegido “getBundleTask” de la clase “SPWebBuildRig” tal y como podemos ver en su definición.

Pero bueno, la “magia” de JavaScript nos deja acceder a ese método protegido.

Con este nuevo workaround, podemos hacer que nuestra tarea custom que sube los assets a una biblioteca de documentos de SharePoint (configurada como CDN), se ejecute con una dependencia en el bundle por defecto del SPFx.

Espero que os sirva.

@luismanez

 

 

[SPFx] Añadiendo dependencias a Tareas de Gulp

En el post anterior, vimos como extender la ToolChain del SPFx para crear nuevas tareas de Gulp, usando el propio sistema de build del SPFx. El siguiente paso que podría ser interesante, sería añadir dependencias a las nuevas Tasks, por ejemplo, en este post del gran Elio Struyf, tenemos una task para provisionar los assets JS del webpart a un CDN de SharePoint Online. No estaría bien que esa task, tuviera una dependencia en la task del sfpx que hace el bundle del webpart (gulp bundle –ship)? De este modo, al ejecutar gulp upload-to-sharepoint, previamente se haría el bundle, y no habría que lanzarlo a mano.

Pues bien, desafortunadamente, no hay una buena solución para hacer algo así. He tenido la suerte de contar con la ayuda de 3 genios del spfx, como son el propio Elio StruyfWaldek Mastykarz y  Stefan Bauer, y hemos llegado a la conclusión de que no es viable lo que queremos, siguiendo el propio sistema de build. Sin embargo, os voy a dar un posible workaround que cubre ciertos escenarios, aunque no termina de encajar dentro del sistema propio de Build del SPFx.

El sistema que te ofrece SPFx para añadir tareas al sistema de Build, lo que hace es que tu task personalizada, se ejecute en cada Build, bien al inicio, o al final. Tenéis el detalle en la propia documentación del SPFx:

Sin embargo, no es esto lo que queremos, ya que no queremos que el upload-to-sharepoint se ejecute en cada build, queremos lo contrario, que con el upload-to-sharepoint, primero se ejecute el Bundle. La única alternativa es la siguiente:

Primero, tenemos que definir nuestra task siguiendo el formato habitual de Gulp. Algo como:

Luego, haremos uso de la lista de Tasks del objeto Gulp. Ojo! que en esta lista de tasks, no encontrarás las tasks definidas por el SPFx, sólo las tasks que has creado tú con gulp.task. De la lista de tasks, cogemos nuestra task Hello, y le añadimos una dependencia a la task “bundle” (curiosamente, la dependencia a una task propia del SPFx si que la va a reconocer):

Si ahora sacamos el árbol de tares con “gulp –tasks“, veremos que Hello tiene una dependencia en Bundle:

Ahora, ya podemos ejecutar nuestra task Hello, y vemos como primero se ejecuta el Bundle del spfx (la imagen no recoge toda la ejecución del Bundle, pero es suficiente para ver que hace primero el bundle y luego nuestra task Hello):

Nada más, de momento parece que es la única alternativa que tenemos para ejecutar tareas custom de Gulp con dependencias en tareas del propio SPFx. Supongo/Espero que tengamos mejores soluciones en las próximas versiones del SPFx.

Espero que os sirva!

@luismanez

 

[SPFx] Extendiendo Gulp y ejecutando tareas en serie (o en paralelo)

Como seguramente ya sabréis, el nuevo SharePoint framework hace uso de Gulp para todas las tareas de “compilación”: bundle de archivos JavaScript, generar el package file, etc. Sin embargo, a la hora de crear tus propias tareas de Gulp, no sigue el mecanismo “normal” de Gulp, por lo que no podemos simplemente agregar una nueva “Task” en el “Gulpfile.js”:

image

Para agregar una tarea de Gulp personalizada, tenemos que pasar por el sistema propio de build, y que está definido en el package “@microsoft/sp-build-web

image

image

El objeto build, nos permite llamar a una función “task” y pasar la definición de nuestra tarea. Sería un esqueleto parecido a:

image

Digamos sin embargo, que lo que nos interesa es ejecutar un par de Tasks, pero hacerlo de forma secuencial. Entonces, tenemos que usar las función “serial” del mismo objeto build. El siguiente snippet de codigo ejecuta las tareas “task-1” y “task-2” conjuntas, y de forma secuencial:

Si ejecutamos la tarea, vemos como el resultado es el esperado:

Si lo que nos interesa es ejecutar las tareas en paralelo, el mecanismo es identico, pero utilizando la funcion, “parallel” del objecto build.

Espero que os sirva!

@Luismanez

PnP Provisioning Extensibility Handler para configurar Search Navigation

Desde una de las ultimas release del PnP, ya es posible configurar la Navigation de un site, tanto Estructural, como Managed:

image

Sin embargo, sigue sin poder configurarse la navegación del Search.

image

Para ello podemos crear nuestro propio Provisioning Extensibility Handler.

Primero de todo, veamos como utilizar el Provider desde una template del PnP:

image

Como vemos, estamos definiendo nuestro propio XML para definir los diferentes Search links que queremos provisionar en nuestro site. Además, le decimos al PnP que clase queremos utilizar como custom Provisioning Handler.

Ahora definamos la clase que implementa la interfaz del PnP IProvisioningExtensibilityHandler

image

Como vemos estamos implementando el método Provision, donde lo que hacemos es, primero, deserializar el XML que viene de la template, y lo convertimos a un objeto de negocio SearchNavigation. Esta es una clase custom también, y que definimos como:

image

Para la deserializacion tenemos el siguiente codigo:

image

Finalmente, y haciendo uso de una extension del propio PnP Core que nos permite insertar links a la Search Navigation, tenemos el siguiente código:

image

De esta manera podemos configurar la navegación del search desde una template del PnP.

Espero que os sirva.

 

@luismanez

Provisionando XsltListViewWebPart especificando la View usando el PnP

Todo el merito de este post es para el autor de esta PR del PnP Core, pero lo copio aquí porque me ha parecido muy útil y no quiero perderlo.

https://github.com/SharePoint/PnP-Sites-Core/issues/584

El framework de provisioning del PnP nos permite provisionar un XsltListViewWebPart en cualquier pagina. Sin embargo, hasta hace poco siempre era un problema el querer aplicar una vista especifica para el Webpart provisionado, en realidad no estaba soportado, y habia que hacer algo custom. Yo ya trate con algo así en mi ejemplo del PnP para provisionar Publishing Pages usando un Extensibility Provider, asi que se que es bastante infierno. Por suerte, ahora ya lo podemos hacer directamente con el PnP-Core.

El gran Mikael Svenson explica como hacerlo en este post: https://techcommunity.microsoft.com/t5/SharePoint-Developer/Specify-view-for-XsltListViewWebPart-using-PnP-Provisioning/m-p/37612#M1148

Basicamente, basta con añadir cualquiera de estos parámetros:

  • ViewId (guid of view)
  • ViewGuid (guid of view)
  • ViewName (display name of view)
  • ViewUrl (server relative url of view)

Por ejemplo:

<property name=”ViewName” type=”string”>Sales reports</property>

Espero que os sirva.

@luismanez

SharePoint / Office Dev Patterns & Practices – Liberada la Release de Enero 2017

Como supongo sabréis, soy gran fan del programa SharePoint PnP, así que quería haceros eco de la versión de Enero 2017. Tenéis toda la información detallada en el blog oficial:

 

https://dev.office.com/blogs/pnp-january-2017-release

 

Algunas de las novedades que a mi me parecen mas destacadas:

 

  • Diferentes fixes dentro del framwork de Provisioning
  • Nuevo ejemplo del SP Framework de como llamar a una custom WebAPI securizada con Azure AD desde un webpart del SPFx
  • Posibilidad de exportar la navegacion estructural para sitios de no-publishing
  • PnP JS library usa ahora webpack para el bundle a pnp.min.js
  • Nuevos comandos PowerShell para tratar con la RecycleBin
  • Nuevo comando PowerShell para añadir Image Renditions: Add-PnPPublishiningImageRendition

 

Y entre todas las novedades, este nuevo ejemplo me ha parecido muy interesante react-generic-app ya que muestra como usar el “modern web stack” sin utilizar el nuevo Framework, muy interesante ahora mismo si tienes que empezar un proyecto de SharePoint On Premises.

Nada mas, os animo a descargar la ultima version y empezar a utilizarlo.

 

Saludos!

 

@luismanez

Provisionando Image Renditions con PnP Core y PnP Schema

Una duda bastante recurrente alrededor del framework PnP, es si podemos desplegar/provisionar Image Renditions desde el PnP. La respuesta es si (no hay opción de desplegar una Rendition en concreto, pero podemos usar un “workaround” para desplegar todas las Renditions que necesitemos).

Internamente, cuando se define una Image Rendition en SharePoint, este, simplemente crea un nuevo nodo en un fichero XML, que podéis encontrar en la Master Page Gallery. El nombre del fichero es: PublishingImageRenditions.xml y su contenido es algo como:

 

image

 

Básicamente tenemos un nodo ImageRendition por cada Rendition que queremos definir, con Ancho y Alto de la Rendition.

 

Nota: Cuidado con el nodo NextId, ya que si editamos el fichero a mano, tendremos que darle el valor adecuado, que no es otro que el siguiente ID a asignar en caso de que se agregue posteriormente otra Rendition desde la interfaz de SharePoint.

 

Teniendo en cuenta que las renditions se gestionan desde este fichero, y que el PnP tiene la opción de provisionar ficheros a bibliotecas de SharePoint, el siguiente paso es hacer uso del nodo File dentro del PnP Schema, para desplegar este fichero XML en la Master Page Gallery, para ello, podemos usar el siguiente snippet XML:

 

image

 

El atributo Src define la ubicacion local del fichero, mientras que Folder define la ubicación en SharePoint (en este caso hacemos uso del token ~masterpagecatalog, que el PnP resolvera cuando se aplique la template). Ademas, debemos de especificar el Tipo de Contenido del fichero, que para el caso del fichero de Renditions, es el ID: 0x01010012BCF119622FF14793A8A38D5831F25C.

 

Con todo esto en nuestra PnP template, podremos provisionar nuestras Images Renditions.

 

Espero que os sirva!

 

@luismanez

Que hace MS Teams en mi tenant de Office 365

A principios de mes Microsoft liberó Teams, en sus propias palabras “the chat-based workspace in Office 365” (https://blogs.office.com/2016/11/02/introducing-microsoft-teams-the-chat-based-workspace-in-office-365/).

En este post no hablaremos de Teams, ni puedo daros mucha luz sobre que herramienta utilizar en cada caso, podéis leer este post y veréis que todos andamos algo confundidos “

Dear Microsoft: I’m Confused. Can You Help Me Collaborate Well?”. En este post simplemente os quiero comentar como afecta el uso de Teams a nuestra Tenant de Office 365 y SharePoint.

 

Cada Team es un Group de Office 365

Probablemente ya lo sabéis, pero cuando se crea un Team en MS Teams, un nuevo grupo de Office 365 es creado. De hecho, cuando creas un Team, tienes la opción de decirle que utilice un grupo existente de Office 365.

 

image

 

En principio, parece que solo tienes esa opción cuando el grupo es “Private”, y eres el administrador del grupo.

Podéis ver que los teams creados en Teams, son en realidad grupos de Office 365

 

image image

Cada Team es una Site Collection en SharePoint

Ademas de un grupo de Office 365, cada Team es una site collection de SharePoint, ya que la Tab “Files”, usa SharePoint para almacenar los archivos. Por ejemplo, hay una site collection para el team “Sales group”

 

image

 

Curiosamente, estas Site Collections creadas desde Teams, no son visibles desde el listado de Site Collections del portal de Admin de SharePoint Online, ni tampoco se pueden listar usando CSOM. La verdad es que no se porque no se pueden listar desde CSOM, pero debe ser que MS ha incluido algun filtro en la parte servidor, para no devolverlas en codigo. Sin embargo, si especificais la URL, podeis conectar a la site collection usando CSOM. Yo he trazado con Fidler la respuesta SP al listado de site collections desde CSOM, y la respuesta a cargar una site collection creada con Teams, y la unica diferencia que veo que podria server como filtro desde el servidor, es la propiedad “Status” o “Web template”. Comparando ambos JSON (solo por frikear, ya se que no sirve de nada Smile):

 

image

 

Cada channel de un Team, es un folder en la Documents library

Volviendo a la site collection que se crea con un Team, podemos ver que con cada “Channel” de un Team, se crea un folder en la biblioteca Documents de la site collection:

 

image

 

image

 

Que hay “Searchable” de Teams en SharePoint?

Entonces, quizá os estáis preguntando como yo: Y esta información es “Searchable” en SharePoint? pues hasta donde he visto, NO. Es decir, cuando se crea un Team desde MS Teams, el grupo de Office 365 asociado, se crea como “Private”, y al parecer, no puede ser indexado por el Search, por lo que no aparece nada en los resultados de búsqueda. Sin embargo, un grupo de Office 365 creado como Public, si que aparece en los resultados de la búsqueda, el problema es que, como os decía antes, no se puede crear un Team asociado a un grupo Publico. La siguiente imagen es el resultado de una query a la api search de SP, filtrando por Web Template: Group, y en los resultados solo aparecen los grupos Publicos.

 

image

 

Me parece una limitación importante que el contenido de un Team no sea “discover-able” desde el search de SP (al fin y al cabo, si un usuario pertenece a un Team, deberia poder ver los documentos de ese Team tb como resultados de búsqueda de SharePoint). Igual esto cambie mas adelante, o haya algún oscuro workaround (si lo encuentras compártelo!)

 

Hasta el proximo post!

Saludos.

@Luismanez

Antiguas entradas

© 2017 Inherits Cloud

Tema por Anders NorenArriba ↑