Etiquetado: filemanagement, importartxt, nav
- Este debate tiene 6 respuestas, 2 mensajes y ha sido actualizado por última vez el hace 8 años, 9 meses por
pedperpat.
-
AutorEntradas
-
6 octubre 2017 a las 08:02 #3112
pedperpat
ParticipanteBuenos días, tengo que importar un archivo .txt que contiene números de lotes de envasado, cada número de lote es una línea del archivo de texto.
Un ejemplo del archivo sería:
000001 000002 000003 000004Lo que necesito es importar el archivo y por lo que veo la mejor opción es la codeunit “File Management” para poder abrir la ventana y elegir el archivo que yo quiera subir.
A partir de ahí estoy muy perdido, he buscado información y según parece tengo que subirlo al servidor para trabajar con el archivo una vez esté en el servidor. El proceso es muy simple, sólo se trata de ir leyendo línea a línea para coger los lotes pero estoy atascado en el paso de subir el archivo al servidor.
Además he visto funciones como “UploadFileSilentToServerPath” y para ello necesito saber la ruta del archivo que estoy importando y además fijar la ruta TEMP en el servidor.
¿Alguna ayuda? Estoy ahora mismo algo perdido con lo que tengo que hacer.
6 octubre 2017 a las 08:17 #3113
Laura NicolàsSuperadministradorHola pedperpat,
La ruta del archivo lo vas a necesitar siempre, o no vas a poder cargar el fichero…
– Si tiene un nombre y una ruta fija, puedes hacer:
ClientFileName := 'C:\MiRuta\MiFichero.txt'; ServerFileName := FileMgt.UploadFileSilent(ClientFileName);Después tienes que trabajar siempre con el ServerFileName.
– Si no sabes dónde esta el fichero, se lo tendrás que pedir al usuario en la RequestPage, en el trigger OnAssitEdit del campo “ClientFileName”:
ClientFileName := FileMgt.OpenFileDialog(<Parametros>); ServerFileName := FileMgt.UploadFileSilent(ClientFileName);Salut!
Laura Nicolàs6 octubre 2017 a las 08:36 #3114pedperpat
ParticipanteMuchas gracias por tu respuesta y gracias por traer al español tantos conocimientos de NAV que desgraciadamente escasean por internet.
Lo estoy probando pero me salta ahora un mensaje de error en el que aparece lo siguiente:
No se ha cargado el archivo C:\Users\paperez\Desktop\lotes.txt
¿Quiere decir que la codeunit no gestiona los CLOSE del archivo que ha abierto?¿O igual es que no encuentra la ruta en el servidor?
El código que he puesto es el siguiente:
textFicheroLocal := cuFileManagement.OpenFileDialog('Importar fichero lotes', '*.txt',''); textFicheroEnServidor := cuFileManagement.UploadFileSilentToServerPath(textFicheroLocal, cuFileManagement.Magicpath);Según he entendido, con OpenFileDialog obtengo la ruta del archivo local y posteriormente con UploadFileServerSilent subo el archivo pasando la ruta local y especificando que quiero que en el servidor aparezca en el directorio temporal para que una vez procesado sea borrado el archivo.
6 octubre 2017 a las 08:39 #3115
Laura NicolàsSuperadministradorSi al leer el fichero tienes que hacer “manipulaciones” tendrás que escribir código y por eso hacerlo con un Report o un XMLport es una buena idea.
Si tienes que cargar datos tal cual están el fichero, también puedes usar la funcionalidad Rapid Start Services. Se usa para importar/exportar datos a nivel usuario y no necesitas escribir nada de código.
Para saber cómo funciona esta funcionalidad, puedes seguir el Curso Rapid Start Service.
Salut!
Laura Nicolàs6 octubre 2017 a las 08:42 #3116
Laura NicolàsSuperadministradorPrueba con la función UploadFileSilent, en lugar de UploadFileSilentToServerPath.
Es la que utilizo yo siempre y me funciona. También lo deja en la carpeta temporal.6 octubre 2017 a las 08:50 #3126
Laura NicolàsSuperadministradorDespués de tener el fichero subido al servidor, necesitas tener una variable tipo File y hacerle el OPEN.
Si sigues con dificultades, podrás poner después el .txt completo? Así te podré ayudar mejor.
Salut!
Laura Nicolàs6 octubre 2017 a las 10:14 #3147pedperpat
ParticipanteYa está conseguido, al final resultaba que no cogía bien la ruta. Aún así muchas gracias por toda la ayuda.
-
AutorEntradas
- Debes estar registrado para responder a este debate.