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 ScriptEvento
SchedaValore 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.