• 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