Esportare in un file XML

In questo esempio vedremo come esportare una fattura all’interno di un file xml. Questo script sarà un’azione all’interno della scheda della fattura.

Gruppo Script

Scheda

Evento

Valore in modifica


documento = program.newxmldocument()

Creiamo il nostro documento xml vuoto.

nodoprincipale = documento.createelement("p","FatturaElettronica","http://ivaservizi.agenziaentrate.gov.it/docs/xsd/fatture/v1.2")

documento.appendchild("xml-stylesheet",'type="text/xsl" href="fatturapa_v1.2.xsl"')


attributo_nodo = documento.createattribute("xmlns:ds")

attributo_nodo.setvalue("http://www.w3.org/2000/09/xmldsig#")

nodoprincipale.appendattribute(attributo_nodo)

attributo_nodo1 = documento.createattribute("xsi","schemaLocation","http://ivaservizi.agenziaentrate.gov.it/docs/xsd/fatture/v1.2 fatturaordinaria_v1.2.xsd")

nodoprincipale.appendattribute(attributo_nodo1)

attributo_nodo = documento.createattribute("xmlns:xsi")

attributo_nodo.setvalue("http://www.w3.org/2001/XMLSchema-instance")

nodoprincipale.appendattribute(attributo_nodo)

In questo segmento dello script abbiamo inserito i dati richiesti per la fattura elettronica. Questo è solo un esempio per vedere come nidificare i nodi e assegnare gli attributi.

ProgressivoInvio = documento.createelement("ProgressivoInvio")

ProgressivoInvio.setvalue(dataview.getvalue("numero"))

nodoprincipale.appendchild(ProgressivoInvio)

Iniziamo a creare i nodi che servono e impostiamo il valore recuperandolo dalla scheda che, in questo caso, è il numero della fattura. Ricordate che la creazione degli elementi parte sempre del documento, ma poi occorre “agganciare” il nodo al padre.

tabellarighe = dataview.getatable("fattura_rows")

nrighe = tabellarighe.countrows()

righe = tabellarighe.getrows()

Estrapolo le righe che compongono la fattura.

DettaglioLinee = documento.createelement("DettaglioLinee")


for i = 1,nrighe do

valore_linea_codicearticolo = righe[i].getvalue("codice")

valore_linea_qta = utility.formatnum(righe[i].getvalue("qta"),5)

utility.formatnum(righe[i].getvalue("qta"),5)

linea = documento.createelement("Linea")

linea_codicearticolo = documento.createelement("CodiceArticolo")

documento.createelement("CodiceArticolo")

linea_codicearticolo.setvalue(valore_linea_codicearticolo)


linea_qta = documento.createelement("Qta")

linea_qta.setvalue(valore_linea_qta)


linea.appendchild(linea_codicearticolo)

linea.appendchild(linea_qta)

DettaglioLinee.appendchild(linea)

end

nodoprincipale.appendchild(DettaglioLinee)

Creiamo un nodo di nome Linea che conterrà i dati di ogni singola riga e inseriamo codice e quantità. Questo nodo sarà poi collegato a un nodo padre chiamato DettaglioLinee che a sua volta verrà collegato al nodo principale.

documento.appendchild(nodoprincipale)

nomefile = paese_nomefile .. idfiscale_nomefile .. "_" .. ProgressivoInvio.getvalue()

cartella_fatture = utility.openfolderdialog()


if (cartella_fatture~="") then

if nomefile ~= "" then

nomefile = cartella_fatture .. "\\" ..nomefile .. ".xml"

documento.save(nomefile)

dataview.showconfirm("File fattura elettronica creato con successo")

end

end

Per concludere, colleghiamo il nodoprincipale al documento, impostiamo il nome del file e chiediamo all’utente in quale cartella dovrà essere salvato.

Come si può notare il nodoprincipale è stato utilizzato per tutto lo script, ma soltanto alla fine è stato collegato al documento. Tuttavia ai fini dello script non cambia se il nodo viene collegato all’inizio o alla fine, l’importante è che questa operazione venga eseguita prima dell’effettivo salvataggio del file xml.