A estas alturas todos sabemos que manejar ficheros desatendidamente desde Business Central SaaS, esto es, sin que nadie le pulse al botón de cargar el fichero, es muy diferente a cuando trabajamos en un on-premise. La razón es obvia: el servidor está en la nube y NO tenemos acceso a sus carpetas.
Como podemos leer o guardar ficheros desatendidamente en Business Central.
Para salvar este pequeño problema disponemos de Azure. Los desarrolladores de Navision de la vieja escuela se tienen que actualizar. Tienes que adaptarte a los nuevos tiempos. O te aclimatas o... Y estos tiempos te llevan a Azure, Power Apps, Power Automate y Power BI.
Azure Storage
Azure Storage es una cuenta de almacenamiento en la nube. Lo más parecido a un disco duro en la nube, con toda la seguridad de Azure (accesos, redundacia, copias de seguridad,...). Es verdad que tiene costes, pero realmente no es un producto caro.
- File Storage: Nos permite gestionar ficheros en la nube, de forma que podamos usarlo como si fuese una unidad de disco de nuestro equipo on-premise, cumpliendo el protocolo Server Message Block (SMB)
- Queue Storage: Permite almacenar mensajes y acceder a ellos desde cualquier parte mediante llamadas HTTP o HTTPS. Los mensajes pueden ser de hasta 64Kb.
- Table Storage: Este servicio permite almacenar datos no estructurados en la nube.
Para trabajar con Business Central, nosotros usaremos Blob Storage, fundamentalmente por tener comandos especÃficos dentro del lenguaje AL para manejarlos.
Crear una cuenta de almacenamiento como sFTP
Esta funcionalidad, está en preview a dÃa de escribir este post, pero lo que yo he probado funciona perfectamente.
Para crear un sFTP debemos de crear un recurso de cuenta de almacenamiento (Azure Storage) desde el portal de Azure (portal.azure.com)
Rellenaremos los campos que habitualmente nos pide:
Suscripcion: Suscripción a la que estará vinculado el recurso.
Grupo de recursos: En que grupo de recursos meteremos esta cuenta. Esto nos sirve para poder gestionar todos los recursos juntos, por ejemplo borrarlos todos juntos.
Nombre de la cuenta de almacenamiento: El nombre único que le daremos a nuestra cuenta. Es importante para identificar o poder usar nuestros ficheros mediante http.
Como hemos comentado anteriormente, de los cuatro tipos de almacenamiento disponibles, usaremos Blob Storage para usarlo como FTP y para acceder desde Business Central. Por tanto una vez creado el recurso, lo que haremos será crearnos un contenedor para almacenar nuestros ficheros.
Como nivel de acceso, le diremos que es privado sin acceso anónimo. Es decir, que solamente se puede acceder identificándote o bien mediante claves de acceso compartido.
Al pinchar crear, nos agrega el contenedor businesscentral:
Agregando usuarios al sFTP
El siguiente paso, será dar acceso a los diferentes usuarios que nos interesen al servidor de ficheros sFTP. Para ello localizamos en el menú la opción de SFTP y creamos los usuarios:
El acceso serÃa por "Contraseña SSH". Es decir, que necesitamos introducir una contraseña para acceder mediante un cliente sFTP como FileZilla.
Al pinchar sobre el botón de agregar, nos aparece la clave que usaremos para acceder desde el exterior. Recuerda guardarla, puesto que no la podremos volver a visualizar:
Configurando un cliente de sFTP para acceder a Blob Storage
Terminada la configuración de la cuenta de almacenamiento de Azure, podemos ir a un cliente de sFTP para poder usarlo. Los datos que debemos suministrar al posible usuario de nuestro FTP serán:
- Protocolo: El protocolo usado será sFTP
- Servidor: será el <nombre de la cuenta de almacenamiento>.blob.core.windows.net
En mi ejemplo: msdyn365bces.blob.core.windows.net
- Usuario: corresponderá a la <cuentaDeAlmacenamiento>.<NombreUsuario>
En mi ejemplo: msdyn365bces.rcorella
- Contraseña: La contraseña que nos ha generado Azure al crear al usuario.
Configurando esto en nuestro cliente de Ftp FileZilla, ya podemos acceder a la cuenta de almacenamiento y en función de los permisos dados al usuario, crear o leer ficheros:
Gracias por compartir tus conocimientos, me surge una duda, con tu funcionalidad de Gestion de ficheros en azure storage, ¿se podrÃa leer directamente todos los archivos de una ruta especifica sin necesidad de interactuar con el usuario? es decir, es obligatorio usar la lÃnea siguiente? UploadIntoStream('Importa fichero', '', 'Todos los ficheros|*.*', filename, inStreamFile); ¿No existe una forma de descargar los ficheros en un Instream sin solicitar al usuario la ruta? Gracias por tus comentarios.
Hola, puedes usar los comandos de AL para gestionar ficheros directamente en ese sFTP creado o bien en un Azure Storage. Desatendidadmente. Sin necesitar escribir la ruta, pero no en el equipo local, tiene que ser en Azure Storage. Puedes ver el video https://youtu.be/G9L_Yewul_A donde te explica los comandos de AL que puedes usar.
2 comentarios:
Gracias por compartir tus conocimientos, me surge una duda, con tu funcionalidad de Gestion de ficheros en azure storage, ¿se podrÃa leer directamente todos los archivos de una ruta especifica sin necesidad de interactuar con el usuario? es decir, es obligatorio usar la lÃnea siguiente? UploadIntoStream('Importa fichero', '', 'Todos los ficheros|*.*', filename, inStreamFile);
¿No existe una forma de descargar los ficheros en un Instream sin solicitar al usuario la ruta? Gracias por tus comentarios.
Hola, puedes usar los comandos de AL para gestionar ficheros directamente en ese sFTP creado o bien en un Azure Storage. Desatendidadmente. Sin necesitar escribir la ruta, pero no en el equipo local, tiene que ser en Azure Storage. Puedes ver el video https://youtu.be/G9L_Yewul_A donde te explica los comandos de AL que puedes usar.
Publicar un comentario