Inherits Cloud

Loving Microsoft Cloud, specially Office 365

Autor: lmanez (página 1 de 15)

SharePoint Saturday Madrid 2017 — Materiales de mi sesión

El pasado 20 de Mayo tuve la suerte de participar en el SharePoint Saturday Madrid, y además, lo hice muy bien acompañado por el gran Adrián Diaz (@AdrianDiaz81).

Continuar leyendo…

Solucionando problema con el PnP Partner Pack, Sub Sites y custom Extensibility Providers

Si estás familiarizado con el PnP Core, seguramente en algún momento te habrás creado un ExtensibilityProvider personalizado. Si además, estás usando el PnP Partner Pack (si no es así, te recomiendo que le eches un ojo), es posible que te hayas encontrado que tu ExtensibilityProvider personalizado no está funcionando cuando se invoca desde el PnP Partner Pack a la hora de crear un sub sitio.

Si es el caso, he publicado una Pull Request al proyecto de GitHub del PnP Partner Pack, solucionando el problema. Espero que se acepte y este disponible como parte del proyecto en la siguiente reléase. En cualquier caso, sigue leyendo y te explico porque fallaba y como se soluciona.

Leer articulo completo…

Office Development MVP

Bueno, parece que después de un par de días se ha confirmado que no he sido víctima del April’s fool, asi que me llena de felicidad anunciaros que he sido nombrado MVP en Office Development!!

Cuando algo así llega, después de muchos años en esto de la comunidad, solo puedo que dar las gracias a mucha gente que me ha ayudado:

Primero de todo, y como no espero que nadie llegue al final de este post ?quiero dar las gracias por encima de todo a mi mujer, por dejarme ser tan friki, y a mis padres, por haberme educado en los valores del esfuerzo. GRACIAS!

Gracias también a todas las empresas por las que he pasado y que me han hecho crecer como profesional. A Encamina, por confiar en aquel becario, (su CEO cuenta una leyenda urbana respecto a unas gafas de sol, pero no os creáis nada…). Gracias infinitas a mi empresa actual: ClearPeople, por su continuo empuje y facilidades para contribuir a la comunidad. Gracias a todos los compañeros de trabajo, porque todos me han enseñado algo, algunos incluso se han convertido en amigos.

Gracias a la comunidad en sí mismo (sois muy grandes), y a los Spanish SharePointers MVPs. A Juan Carlos por iniciarme en esto y permitirme conocer al mismísimo Gustavo Velez (maestro de maestros), a Alberto, Santi, David Martos (este tío marco un antes y un después en cómo desarrollar en SharePoint y temas de ALM, cuando el resto íbamos copiando dlls a la GAC. Además, el jodio es muy buen tío). Mención especial para Adrián Diaz, que me ha dado el empujón final para subirme al estrado. Gracias a la gente de SUG.Cat (Edin, Ruben y compañía), a la gente de SUG Madrid (grande Tabera).

Gracias a la gente de OfficeDev PnP, Vesa, Paolo y resto. A ellos hay que darles las gracias cada día por la excelente ayuda que nos están dando con el programa de Patterns and Practices en el que tengo la suerte de contribuir.

Ultimo agradecimiento, pero igual de importante, a Microsoft, por el programa MVP, y a nuestra MVP Lead Cristina.

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

Error importando un SPFX WebPart en el Workbench de SharePoint Online

Estabas desarrollando algun webpart en el nuevo SPFX, probándolo con esa maravilla que es el Workbench de SharePoint Online (/_layouts/15/workbench.aspx), y de repente, tras algún cambio insignificante, al importarlo en la pagina, te encuentras un error de importación parecido a este:

 

image

 

Supongo que el error puede variar en función de la Tenant, pero básicamente se queja de que alguna dependencia del propio SPFX parece que no se está cargando.

Pues bien, no sé exactamente por qué se produce el error, pero parece que el bundle no se está generando correctamente. Lo que si te puedo contar es el “workaround” que me ha funcionado a mi. Viendo que el bundle no se generaba bien (incluso creando un webpart de cero con la template de yeoman), he probado que el mismo código del webpart, pero haciendo el “gulp serve” desde otra maquina cliente, si que funcionaba bien, así que he recurrido al mejor recurso del Informático: re-instalar el paquete desde el npm:

npm i -g @microsoft/generator-sharepoint@latest

Y así, sin mas, y sin cambiar nada del webpart que antes no funcionaba, tras volver a hacer un “gulp serve”, todo ha vuelto a funcionar con normalidad. Si me vuelve a suceder intentare abrir un “issue” en el sitio de github, ya que tengo la sensación de que en determinadas circunstancias, el proceso de bundle que hace con Gulp, webpack, etc, no hace bien su trabajo, y ya no hay manera de que vuelva a funcionar bien si no re-instalas el paquete.

@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

Antiguas entradas

© 2024 Inherits Cloud

Tema por Anders NorenArriba ↑