Los últimos 2 días de trabajo, correspondientes al jueves 15 y viernes 16, fueron los días mas productivos que hemos tenido.
La pagina web fue finalizada su totalidad, esto correspone a cambios esteticos minimos y la creacion de un menú de ajustes, se creó la BD con sus respectivas tablas, y se hicieron los stored procedures para conectar todo, además se finalizó el parseo de los archivos xml.
Respecto a la creación de los procedures para hacer los CRUD, no hubo muchas complicaciones, como ya antes habíamos hecho pruebas con una Bd de prueba, crear las versiones finales de los procedures se redujo a simplemente crearlos siguiendo la plantilla dada por el profesor, e ir modificándolos según cada tabla. se puede ver nuestro repositorio de GitHub para notar que prácticamente ya son creadas en sus versiones finales, y son modificadas solo para hacer correcciones menores.
La lectura de los xml si tuvo varios problemas, si bien la version creada pot el compañero era perfectamente funcional, personalmente no me gustaba que el path a el xml debía modificarse del procedure cada vez que se debía ejecutar, es decir, que el procedure solo serviría en una computadora y en un archivo en un directorio especifico, y en caso de querer hacerlo en otro lugar, habría que modificarlo.
Por eso mismo yo tomé la misión de investigar sobre como hacer que el path se diera como una variable al llamar al procedure, esto no fue algo sencillo, principalmente por que habría que hacer una linea de Código de forma dinámica, investigando encontré los siguientes materiales:
https://www.youtube.com/watch?v=ByzqtSep8G0
En dicho video explican como crear dicha linea de código de forma dinámica y como ejecutarla, mi problema es que si bien eso ayudaba, al estar trabajando con xmls no era tan sencillo como el video mostraba, luego de trabajar un tiempo llegue tener una version en donde no daba errores, pero las tablas no eran modificadas, como si el xml nunca fuera cargado, investigando encontré que la razón era que la variable con el xml que era creada de forma dinámica, era eliminada justo después de haber ejecutado el programa, al parecer el código que se ejecuta de eat forma esta encapsulado dentro de si mismo, como si fuera un procedure distinto.
Con esto pensé que la solución lógica sería hacer que hubiera un valor de salida, y obtenerlo, y para eso use el siguiente material:
https://stackoverflow.com/questions/803211/how-to-get-sp-executesql-result-into-a-variable
Con esto obtenía el xml parseado desde el output del xml creado de forma dinámica. y finalmente se logró parsear el xml, llenar las tablas, y tener todo el trabajo prácticamente terminado, el codigo final de la carga se ve de esta forma:
Pero de nuevo pensé, que si bien ya no había que modificar el código cada vez que se introducía un archivo distinto, no era muy amigable con el usuario pedirle la ruta a un archivo, por lo que decidí ponerme a implementar una forma de cargar los xml desde la pagina web, primero usé estos tutoriales para recibir los archivos:
https://blog.miguelgrinberg.com/post/handling-file-uploads-with-flask
https://stackoverflow.com/questions/82831/how-do-i-check-whether-a-file-exists-without-exceptions
Y luego desde el código, solamente le enviaba la ruta del archivo que se acaba de subir, al procedure que carga los xml, de esta forma la carga de los XML, que ya funcionaba desde un inicio, fue implementada de una forma mas elegante. (aunque aún así yo hubiera implementado el parse de una forma distinta, en vez de cargarlos en SQL, yo hubiera cargado el archivo en capa lógica y desde ahí enviar los tuplos a la base de datos, de forma similar a como funciona el insertar en la pagina web)
Código final para la carga de archivos desde la pagina:
El día siguiente cuando nos dieron la version final de los catálogos en xml, hubo que modificar un poco el código, tuvimos que eliminar algunas columnas que iban a quedarse sin usar, (por lo tanto modificar los procedures) y modificar la carga del xml debido a que la estructura de los nodos era distinta a como estaba en el ejemplo, pero luego de trabajar en esto, y hacer unos cambios mínimos en la pagina web, se dió por terminado el trabajo.
- Oswaldo (aprox 8 horas entre los 2 dias)
Comentarios
Publicar un comentario