• No se han encontrado resultados

XXIII Javascript. Exportar datos de todas las tablas.

N/A
N/A
Protected

Academic year: 2022

Share "XXIII Javascript. Exportar datos de todas las tablas."

Copied!
13
0
0

Texto completo

(1)

Página 1

XXIII Javascript.

Exportar datos de todas las tablas.

En este capítulo vamos a ver la forma de incluir código javascript en nuestros programas Velneo. Hay momentos en que la programación sólo con las herramientas de Velneo se queda corta y puede ser necesario el uso de javascript.

No se trata de un curso de javascript sino de ver la forma de incorporarlo a Velneo.

Vimos en capítulos anteriores la exportación/importación del contenido de las tablas a ficheros de texto. Con la programación nativa en Velneo deberemos hacer un programa para cada tabla.

En este capítulo vamos a diseñar un programa que nos permitirá la exportación de los datos de cualquier tabla del proyecto o de los proyectos heredados.

Básicamente su funcionamiento consiste en una rejilla que nos muestra todas las tablas. Al seleccionar una de ellas nos pide confirmación y realiza la exportación.

(2)

Página 2 Podemos trabajar sobre un proyecto ya creado pero en este caso empezaremos creando un proyecto de aplicación y otro de datos:

Es fundamental que todos los proyectos implicados tengan un alias.

En el proyecto de datos añadiremos a las tablas que haya, una más, a la que le vamos a llamar TABLAS y cuya descripción es:

(3)

Página 3 Como podemos ver sólo tiene un código, un campo con el nombre de la tabla y otro para guardar el nombre del proyecto y la tabla de la forma ALIAS/NOMBRETABLA tal y como puede verse en la primera ilustración.

En mi caso y para pruebas e incluido un par más de tablas. Tú puedes hacer lo mismo o heredar algún proyecto.

En dichas tablas he colocado campos texto, numéricos y de fecha que son los que en principio exportaremos con el programa. Los campos objeto, imagen etc no los abordaremos.

En nuestro proyecto de aplicación colocaremos los elementos siguientes:

(4)

Página 4 Lo primero crearemos una búsqueda:

Luego el formulario TABLA_EXPORTAR:

Más tarde volveremos sobre él para añadir un manejador de evento en el botón aceptar.

Creamos a continuación la rejilla sobre la tabla TABLAS:

(5)

Página 5 En formulario de modificación ponemos el formulario creado anteriormente.

Pasamos ahora, a crear el formulario EXPORTAR que contendrá una vista de datos.

(6)

Página 6 Creamos ahora una acción que PROVISIONALMENTE colocaremos en el menú de la aplicación para comprobar que vemos el formulario EXPORTAR:

Más tarde esta acción la cambiaremos de sitio.

Bueno. Llegados a este punto vamos a crear un proceso en javascript que va a hacer dos cosas. Primero localizar en que proyecto se encuentra la tabla TABLAS y después grabar en ella los nombres de todas las tablas de nuestro proyecto.

Para ello vamos a la ventana de inspectores y en la solapa Scripts creamos un nuevo fichero

Usando F2 le damos el nombre

Pulsa 2 veces sobre el nombre y escribe dentro del fichero el código siguiente:

(7)

Página 7 //Localizamos donde se halla la tabla TABLAS

var proyecto = theApp.mainProjectInfo();

var alias_proyectoTablas="";

var resultado = proyectos_info( proyecto );

//REPETIMOS el proceso anterior buscando las tablas de todos // los proyectos y grabamos su alias/nombre y nombre en TABLAS var proyectoencurso;

proyecto = theApp.mainProjectInfo();

var reg = new VRegister( theRoot );

reg.setTable(alias_proyectoTablas+"/TABLAS");

var resultado = proyectos_info_otravez( proyecto );

function proyectos_info( proyecto ) {

// Se analiza si el proyecto tiene otros proyectos heredados var num_pry_heredados = proyecto.legacyProjectCount();

// Por cada proyecto heredado se ejecuta la función de forma reentrante // hasta procesar todos los proyectos

for ( var x=0; x<num_pry_heredados; x++ )

{

var proyecto_heredado = proyecto.legacyProjectInfo( x );

proyectoencurso=proyecto_heredado;

localizar_tablas(proyecto_heredado);

resultado = proyectos_info( proyecto_heredado );

}

}

function localizar_tablas( miproyecto ) {

for( var nIndex=0; nIndex < miproyecto.tableCount(); nIndex++ ) {

var infortabla = miproyecto.allTableInfo( nIndex );

if(infortabla.id()=="TABLAS"){

alias_proyectoTablas=proyectoencurso.alias();

}

} }

function proyectos_info_otravez( proyecto ) {

var num_pry_heredados = proyecto.legacyProjectCount();

for ( var x=0; x<num_pry_heredados; x++ )

{

var proyecto_heredado = proyecto.legacyProjectInfo( x );

proyectoencurso=proyecto_heredado;

localizar_todas_lastablas(proyecto_heredado);

resultado = proyectos_info_otravez( proyecto_heredado );

}

}

function localizar_todas_lastablas( miproyecto ) {

//obtenemos las tablas

for( var nIndex=0; nIndex < miproyecto.tableCount(); nIndex++ ) {

var infortabla = miproyecto.allTableInfo( nIndex );

if ( theRoot.beginTrans( "Alta " + nIndex ) )

{

var infortabla = miproyecto.allTableInfo( nIndex );

nombre=infortabla.id();

aliast=miproyecto.alias()+"/"+nombre;

reg.setField( "NAME", nombre );

reg.setField( "NOMBRE_COMPLETO", aliast );

reg.addRegister();

theRegisterListOut.append( reg );

theRoot.commitTrans();

}

} }

(8)

Página 8 Como siempre el código se puede depurar un poco más, pero este funciona.

Nos quedará algo así (no pongo en la imagen todo el código):

Creamos ahora un proceso indicando que será en javascript y le asignamos nuestro fichero en las propiedades:

Ahora creamos un nuevo proceso llamado EXPORTAR con el siguiente contenido:

(9)

Página 9 Quitamos del menú principal la acción VER_TABLAS y la sustituimos por la siguiente:

Si ahora ejecutamos nuestro programa deberíamos obtener una rejilla con las tablas de nuestro proyecto y los heredados. En mi caso tras heredar alguna caja para probar queda esto:

(10)

Página 10 Al pulsar dos veces sobre una fila obtendremos:

Solo nos queda incorporar un manejador de evento en Javascript en el formulario TABLA_EXPORTAR que se dispare al pulsar el botón Aceptar y pase los registros de la tabla seleccionada a un fichero de texto.

Vamos allá:

(11)

Página 11 El código será el siguiente:

importClass( "VFile" );

importClass( "VTextFile" );

//Accedemos al root del formulario en curso var formulario = theRoot.dataView();

var formu=theRoot.objectInfo();

// Accedemos al control del nombre de la tabla.

// Se resuelve con el identificador del control

mitabla = formulario.control("ED_NAME_COMPLETO");

nombretabla=mitabla.text;

//alert(nombretabla);

// Asociamos el contenido de la tabla a un VRegister var reg = new VRegisterList( theRoot );

reg.setTable(nombretabla);

reg.load("ID",[]);

//obtenemos el numero de registros y de campos numreg = reg.size();

var infortabla=reg.tableInfo();

numcampos=infortabla.fieldCount();

msg=nombretabla+" registros= "+numreg+" : \n"+numcampos+"\n";

//alert(msg);

// Se declara el objeto fichero var nf=nombretabla.replace("/","_");

var fi = new VTextFile("e:\\"+nf+".txt" );

// Se abre el fichero de escritura (si no existe se crea y si existe se limpia) if ( fi.open( VFile.OpenModeWriteOnly | VFile.OpenModeTruncate) ) {

//alert("abierto");

var linea;

for( var i=0; i < numreg; i++ ) {

var reg1 =reg.readAt( i );

linea="";

for( var c=0; c < numcampos; c++ )

{

msg=msg+infortabla.fieldName(c)+"="+reg1.fieldToString(c)+"\n";

linea=linea+reg1.fieldToString(c)+"|";

}

var l=linea.length;

l=l-1;

linea=linea.substring(0,l);

fi.write(linea+"\n");

}

//alert(msg);

fi.close();

alert("fichero generado con: "+numreg+" registros");

} else {

// Si no ha sido posible abrir el fichero se muestra error

alert( "No se pudo abrir el ficher " + fi.fileName() + ", error " + fi.error(), "Error" );

}

theRoot.dataView().accept();

En este caso le he dicho que cree el fichero en el disco E: (línea en rojo).

Sólo queda conectar el botón ACEPTAR con el manejador.

(12)

Página 12 Guardamos el proyecto y ejecutamos

En mi caso si escojo la tabla TABLAS obtengo:

El fichero creado visto con el WordPad es:

(13)

Página 13 Mi TABLA1 con el contenido

Queda así.

Referencias

Documento similar

Estos planes de recolo- cación deben garantizar a las personas despedi- das un servicio continuado durante un periodo mínimo de seis meses que incluya medidas de formación

This Bachelor’s Thesis explains the early development of the game Star Quest: Treasure Time, a multiplayer metroidvania starring two main characters with various different

Entre nosotros anda un escritor de cosas de filología, paisano de Costa, que no deja de tener ingenio y garbo; pero cuyas obras tienen de todo menos de ciencia, y aun

o Si dispone en su establecimiento de alguna silla de ruedas Jazz S50 o 708D cuyo nº de serie figura en el anexo 1 de esta nota informativa, consulte la nota de aviso de la

Dicho esto, para el Sistema Salón de Actos se empleará un sistema todo-aire con ventilación conectada a las unidades interiores, con recuperador de calor y recirculación

Este estudio servirá de base para que el técnico designado por la empresa adjudicataria de la obra pueda realizar el Plan de Seguridad y Salud en el Trabajo en el que se

El diseño preliminar de la instalación de puesta a tierra se realiza basándose en las configuraciones tipo presentadas en el Anexo 2 del método de cálculo de

Toda exploración debe contar con un Estudio de Impacto Ambiental (EIA), con el objeto de conocer el potencial impacto ambiental de su puesta en operación. En el EIA se