# VXmlWriter

Nos permite generar un fichero XML con el contenido de una lista de registros.

Para empezar hay que importar la clase con importClass y construir el objeto VXmlWriter con new pasándole como parámetro un objeto de la clase [VRegisterList](https://doc.velneo.com/34/velneo-vdevelop/scripts/lenguajes/javascript/clases/vregisterlist).

El codec por defecto es "UTF-8". Para cambiarlo por ejemplo a UTF-16, llamar a la función setCodec( "UTF-16" ). Hay una lista de los codes disponibles más abajo.

Si no se usa la función setDocType(“mytype”) no se incluirá la cabecera opcional .

Por defecto el texto es formateado con saltos de linea e indentación. Para cancelarlo usar la función setAutoFormatting( false ). Con la función setAutoFormattingIndent( n ) ajustamos el numero de espacios o tabs de indentación. Si usamos valores positivos para n representan espacios y si son negativos tabs. Por defecto la indentación son 4 espacios.

Con la función addInitialTag( “tag”) le añadimos uno o varios tags, llamando varias veces a la función, que envuelven a los registros de la lista. Lo normal es usar una con el nombre de la tabla.

Con la función setRowTag( “tag” ) le decimos la etiqueta que ha de envolver a cada registro. Si no se usa por defecto es “row”.

A continuación con las funciones addField( “tagCol”, “IDCOMPUESTOCAMPO”) y addFormula( “tagCol”, “Formula” ) le añadimos tantas columnas como queramos por registro.

Y ya solo nos queda llamar a la función writeFile( “file.xml” ); para que nos lo escriba en disco.

## Indice de funciones

### **Constructor**

VXmlWriter [VXmlWriter](#vxmlwriter)( VRegisterList registerList )

### **Inicialización**

void [addField](#addfield)( String szTag, String szIdCampoCompuesto )

void [addFormula](#addformula)( String szTag, String szFormula )

void [addInitialTag](#addinitialtag)( String szTag )

void [setAutoFormatting](#setautoformatting)( Boolean bSet )

void [setAutoFormattingIndent](#setautoformattingindent)( Number nSpacesOrTabs )

void [setCodec](#setcodec)( String szCodecName )

void [setDocType](#setdoctype)( String szType )

void [setRowTag](#setrowtag)( String szTag )

### **De operaciones**

Boolean [writeFile](#writefile)( String szPath )

String [writeToString](#writetostring)()

### **De información**

void [codec](#codec)()

## Enumeraciones

**Codec names**

* Apple Roman
* Big5
* Big5-HKSCS
* CP949
* EUC-JP
* EUC-KR
* GB18030-0
* IBM 850
* IBM 866
* IBM 874
* ISO 2022-JP
* ISO 8859-1 to 10
* ISO 8859-13 to 16
* Iscii-Bng, Dev, Gjr, Knd, Mlm, Ori, Pnj, Tlg, and Tml
* JIS X 0201
* JIS X 0208
* KOI8-R
* KOI8-U
* MuleLao-1
* ROMAN8
* Shift-JIS
* TIS-620
* TSCII
* UTF-8
* UTF-16
* UTF-16BE
* UTF-16LE
* UTF-32
* UTF-32BE
* UTF-32LE
* Windows-1250 to 1258
* WINSAMI2

## Documentación de funciones

### Constructor

#### VXmlWriter VXmlWriter( VRegisterList registerList ) <a href="#vxmlwriter" id="vxmlwriter"></a>

Crea una instancia de objeto de la clase VXmlWriter.

Parámetros:

* registerList: objeto de lista de registros que alimentará el objeto.

Requiere importar la clase previamente: importClass("VXmlWriter").

Ejemplo:

var rss = new VXmlWriter(listaNoticias);

### Inicialización <a href="#ini" id="ini"></a>

#### void addField( String szTag, String szIdCampoCompuesto ) <a href="#addfield" id="addfield"></a>

Permite añadir tantas columnas como campos definamos.

Parámetros:

* szTag: string que contiene la etiqueta de la columna (Por ejemplo el ID del campo).
* szIdCampoCompuesto: string que contiene el identificador del campo de la tabla o de las relacionadas.

#### void addFormula( String szTag, String szFormula ) <a href="#addformula" id="addformula"></a>

Permite añadir tantas columnas como fórmulas definamos.

Parámetros:

* szTag: string que contiene la etiqueta de la columna.
* szFormula: string que contiene la fórmula del valor.

#### void addInitialTag( String szTag ) <a href="#addinitialtag" id="addinitialtag"></a>

Añade uno o varios tags, llamando varias veces a la función. Estos tags envuelven los registros de la lista. Lo normal es usar una etiqueta con el nombre de la tabla.

Parámetros:

* szTag: string que contiene la etiqueta (normalmente el nombre de la tabla).

#### void setAutoFormatting( Boolean bSet ) <a href="#setautoformatting" id="setautoformatting"></a>

Fija si se aplica o no formato automático. Por defecto el texto es formateado con saltos de linea e indentación. Por defecto la indentación son 4 espacios.

Parámetros:

* bSet: booleano que indica el valor true para aplicar autoforma y false para cancelarlo.

#### void setAutoFormattingIndent( Number nSpacesOrTabs ) <a href="#setautoformattingindent" id="setautoformattingindent"></a>

Ajusta el número de espacios o tabs de indentación.

Parámetros:

* nSpacesOrTabs: number que indica el número de espacios o tabuladores. Si usamos valores positivos para nSpacesOrTabs representan espacios. Si usamos valores negativos para nSpacesOrTabs representan tabs.

#### void setCodec( String szCodecName ) <a href="#setcodec" id="setcodec"></a>

Establece la codificación que se aplicará al fichero. Debemos aplicar esta función sobre el objeto [VTextFile](https://github.com/velneo/documentacion-de-velneo/tree/c9b0a763081be854a33d8ab459aa288833ea168d/vtextfile.md) creado antes de escribir. Por defecto se crea con el codec UTF-8.

Parámetros:

* szCodecName: string que indica el codec que se usará (literales entrecomillados). Ver enum de Codec names.

#### void setDocType( String szType ) <a href="#setdoctype" id="setdoctype"></a>

Establece el tipo de documento.

Parámetros:

* szType: string que identifica el tipo de documento XML.

#### void setRowTag( String szTag ) <a href="#setrowtag" id="setrowtag"></a>

Establece la etiqueta que envuelve a cada registro. Si no se aplica esta función el valor por defecto de la etiqueta es "row".

Parámetros:

* szTag: string que indica la etiqueta (por defecto "row").

### Funciones de operaciones

#### Boolean writeFile( String szPath ) <a href="#writefile" id="writefile"></a>

Graba en disco el fichero XML. Devuelve true si la generación ha finalizado correctamente.

Parámetros:

* szPath: senda del fichero a generar.

#### String writeToString() <a href="#writetostring" id="writetostring"></a>

Devuelve el contenido XML generado.

### Funciones de información

#### void codec() <a href="#codec" id="codec"></a>

Devuelve la codificación que se aplicará al fichero XML.

## Ejemplos

### 1. Exportar una lista a xml

```javascript
////////////////////////////////////////////////////////////
// Exportar una lista de registros a xml

// Se importa la clase para usar sus funciones
importClass( "VQuery" );
importClass( "VXmlWriter" );

// Se crea el objeto búsqueda
var bus = new VQuery( theRoot );
bus.setQuery( "vbaseUsuariosApp/USR_GRP_NOM" );

// Se ejecuta la búsqueda
if ( bus.exec() )
{
    // Se crea el objeto XML con la lista de registros de entrada
    var xml = new VXmlWriter( bus.result() );

    // Se fija el tipo de documento
    xml.setDocType( "vXML" );

    // Se añade como etiqueta de documento, el nombre de la tabla
    xml.addInitialTag( "USR_GRP" );

    // Se añade la etiqueta de registro
    xml.setRowTag( "row" );

    // Se añaden los campos de la tabla
    xml.addField( "Código", "ID" );
    xml.addField( "Nombre", "NAME" );
    xml.addField( "Usuario alta", "ALT_USR.NAME" );

    // Grabar el fichero en disco
    xml.writeFile( theApp.rootPath() + "/USR_GRP" + ".xml" );
}

// Se muestra un mensaje confirmando la exportación
alert( "Se han exportado satisfactoriamente " + bus.result().size() + " grupos de usuarios", "Información" );
```

### 2. Exportar una lista de cualquier tabla con todos sus campos

```javascript
////////////////////////////////////////////////////////////
// Exportar a XML todos los campos de los registros buscados en una tabla 
//
// Este script es ejecutado desde otro proceso que le pasa la búsqueda a ejecutar (Variable local BUS)
// Una vez ejecutada la búsqueda se exportan todos los registros encontrados en la búsqueda
// Se exportan todos los campos de la tabla

// Se importa la clase para usar sus funciones
importClass( "VQuery" );
importClass( "VXmlWriter" );

// Se crea el objeto búsqueda
var bus = new VQuery( theRoot );
bus.setQuery( theRoot.varToString( "BUS" ) );

// Se ejecuta la búsqueda
if ( bus.exec() )
{
    // Se obtiene el VRegisterList de la búsqueda
    var lista = bus.result();

    // Se crea el objeto VTableInfo para obtener la información de la tabla
    var ti = lista.tableInfo();

    // Se crea el objeto XML con la lista de registros de entrada
    var xml = new VXmlWriter( lista );

    // Se añade como etiqueta de documento, el nombre de la tabla
    xml.addInitialTag( ti.id() );

    // Se añade la etiqueta de registro
    xml.setRowTag( "row" );

    // Se recorren los campos y se añaden las columnas al XML
    for ( col=0; col < ti.fieldCount(); ++col )
    {
        xml.addField( ti.fieldName( col ), ti.fieldId( col ) );
    }

    // Grabar el fichero en disco
    xml.writeFile( theApp.rootPath() + "/" + ti.id() + ".xml" );
}

// Se muestra un mensaje confirmando la exportación
alert( "Se han exportado satisfactoriamente " + lista.size() + "; " + ti.name(), "Información" );
```
