¡Saludos a toda la Comunidad de SharePoint y Azure en toda Latinoamérica! Hoy quiero compartir un mecanismo MUY FÁCIL para copiar archivos que se suben en una librería de SharePoint Online (SPO) hacia una carpeta de archivos de un Azure Web App.

¿Cuál es problema?

Tenemos un Sitio Web corporativo implementado en un Azure Web App donde se requiere mostrar unas imágenes que un grupo de usuarios suben en una librería de SPO, en principio, lograr esto no es complicado ya que hay varias formas de hacerlo, menciono algunas de ellas:

  • El administrador del Azure Web App puede:
    • Bajar las imágenes de la librería de SPO y mediante web deploy o ftp deploy subir las imágenes al Web App. Para más información de los métodos de deploy ver aquí.
    • Ir a la consola de Kudu, ubicar la(s) carpeta(s) donde se desea subir las imágenes y arrastrar y soltar las imágenes a esas carpetas. Para más información pueden ver un video de 5 minutos donde se explica muy bien la consola de Kudu.

Las dos opciones anteriores requieren algunas actividades manuales, que, aunque sencillas, consumen tiempo. Entonces, ¿cómo podemos automatizar este requerimiento?

¡La Solución!

Dado ese espíritu de desarrollador que todavía vive en mí, la primera opción que se me ocurrió fue crear un script en PowerShell que lea los archivos de la librería de SPO y luego los suba a la estructura de carpetas del Azure Web App, mmmm pero digamos que el espíritu de desarrollador sigue ahí pero está algo dormido ;). De todas maneras, para lo que les guste arremangarse las mangas y hacer un script desde cero, en este artículo podrán encontrar un buen punto de partida.

El reto entonces era encontrar una forma automática de satisfacer el requerimiento, pero sin desarrollar algún script en PowerShell (o un Azure Function también puede servir). Así, que la opción más natural que se me ocurrió fue explorar Microsoft Flow y ver si me ofrecía algo interesante.

¿Qué es Microsoft Flow? Aunque no es el tema de este artículo, en resumen, se puede decir que Microsoft Flow es un motor de Flujos de Trabajo que sin la necesidad de desarrollar y mediante el uso de conectores, acciones y operaciones lógicas se puede automatizar el flujo de información entre varios sistemas.

Lo que más me gusta de Flow es que Microsoft está constantemente colocando nuevos conectores y acciones y añadiendo más funcionalidad a las ya existentes, permitiendo así, que cada vez más los flujos creados en Flow sean más poderosos y a la vez flexibles, integrando múltiples sistemas de diferentes proveedores. Si quieres conocer más de Microsoft Flow por favor ir aquí.

Y en efecto, mediante los conectores de SharePoint y FTP que vienen incluidos en Microsoft Flow puedes crear RAPIDAMENTE un SENCILLO flujo de trabajo que copie imágenes (y realmente cualquier archivo) que se suba a una librería de SPO hacia una carpeta de un Azure Web App.

A continuación, les describo los pasos:

Paso 1:

Crear el Microsoft Flow.

Al ser éste un servicio de Office 365 y aunque tal vez suene obvio escribirlo, debes tener un usuario creado en Office 365 con el servicio de Flow habilitado para tu usuario (y para el contexto de este artículo, también con el servicio de SPO habilitado).

En mi caso creé mi Flow directo desde la librería de SPO, otro escenario pudo haber sido crear el Flow desde el portal de Microsoft Flow (https://flow.microsoft.com/), en este segundo escenario, el usuario debe contar con permisos en el sitio y en particular en la librería, realmente al final es el mismo resultado.

Dentro de la librería de SPO, seleccionar la opción de Create a flow.

 

Paso 2:

Al seleccionar Create a flow tienes la opción de iniciar la creación de Flow utilizando una plantilla o crear el Flow desde cero, en mi caso seleccioné la siguiente plantilla:

 

 

 

Paso 3:

Inmediatamente después de seleccionar la plantilla, serás re direccionado al portal de Microsoft Flow y verás la siguiente pantalla.

 

Dado que la creación del Flow se inició desde la librería de SPO, Microsoft Flow automáticamente utilizará tu usuario para hacer la conexión a SPO.

Paso 4:

Al presionar en el botón de Continuar, serás redirigido a la página de creación/edición de Flows y dado que nos basamos en una plantilla, podrás ver una Acción del conector de SharePoint llamada When a file is created (properties only) precargada con los datos de tu site en SPO y de tu librería, así:

 

Nota: Al precargarse los datos, Flow utiliza el GUID de la librería en lugar de su nombre.

Paso 5:

Dado que el Flow se va a disparar cada vez que se suba una nueva imagen a la librería, las siguientes acciones capturan la información de la imagen, así:

  • Se usa la Acción Get file metadata del conector de SharePoint para obtener la metadata de la imagen.

 

  • Se usa la Acción Get file content del conector de SharePoint para obtener el contenido binario de la imagen.

 

Paso 6:

Una vez se obtiene la imagen se procede a copiarla en la carpeta dentro del Azure Web App, para ello utilizaremos un conector de FTP que viene por defecto en Microsoft Flow. Para usar este conector necesitas tres datos requeridos, estos son:

  • La dirección de FTP a la cual nos debemos conectar para entrar en la estructura de carpetas del Azure Web App.
  • Usuario
  • Password

Esta información la conseguimos en el Publish Profile del Azure Web App, para ello ve al Portal de Azure (https://portal.azure.com), localice tu Web App, selecciona a la opción de Overview y presiona el botón de Get publish profile, así:

 

 

 

De vuelta en el portal de Microsoft Flow, incluya la Acción de FTP llamada Create File, una vez incluida, si no tienes una conexión FTP creada, es lo primero que tendrás que crear, así:

 

Tip: Una vez creada la conexión, no podrás editarla en el portal de Microsoft Flow (bug? Falla de diseño? No lo sé). Para editarla debes ir al portal de Power Apps (https://powerapps.microsoft.com/), tanto Apps como Flow comparten las mismas conexiones.

Luego de crear la conexión, procede a completar la información para la creación del archivo en la carpeta del Azure Web App, así:

 

 

Donde:

  • Folder parth: Es la ruta donde se va a crear el archivo, noten que en un Azure Web App la ruta /site/wwwroot siempre existe, a efectos de este artículo se complementa como ejemplo la carpeta "img".
  • File name: El nombre del archivo que en este caso se toma del contenido dinámico proveniente de SharePoint
  • File content: El archivo binario que se obtiene de la Acción Get file content explicada en el Paso 5

Paso 7:

Finalmente, estamos listos para probar nuestro Flow, para ello, selecciona la opción de Test (extremo superior derecho) y luego seleccione la opción I'll perfom the trigger action, así:

 

 

Seguidamente, sube una imagen en la librería de SPO desde donde se creó el Flow, regresé al portal de Microsoft Flow y vea como se ejecuta el Flow, al terminar, si se siguieron correctamente todos los pasos, deberían obtener un mensaje de éxito, así:

 

Por último, verifique que el archivo de la imagen haya sido creado en la ruta especificada, para ello, utiliza la consola de Kudu para conectarte a la estructura de carpetas de su Azure Web App.

Espero que este artículo sea de utilidad para toda la comunidad, si quieres saber más de SharePoint y/o Azure y quieres un entrenamiento oficial Microsoft, por favor consulta nuestros cursos en nuestro portal de EIGO Academy, o si quieres que trabajemos juntos en un proyecto, por favor contáctanos a través de nuestro portal de EIGO Corp.

¡Éxitos!