Exportar a un archivo XML

En este ejemplo, veremos cómo exportar una factura dentro de un archivo xml. Este script será una acción dentro de la ficha de factura.

Grupo ScriptEvento
FichaValor en modificación
document = program.newxmldocument()

Vamos a creamos nuestro documento xml vacío.

mainnode = document.createelement("p","FatturaElettronica","http://ivaservizi.agenziaentrate.gov.it/docs/xsd/fatture/v1.2")
    
document.appendchild("xml-stylesheet",'type="text/xsl" href="fatturapa_v1.2.xsl"')

attribute_node = document.createattribute("xmlns:ds")
attribute_node.setvalue("http://www.w3.org/2000/09/xmldsig#")
mainnode.appendattribute(attribute_node)
    
attribute_node1 =  document.createattribute("xsi","schemaLocation","http://ivaservizi.agenziaentrate.gov.it/docs/xsd/fatture/v1.2 fatturaordinaria_v1.2.xsd")
mainnode.appendattribute(attribute_node1)
    
attribute_node = document.createattribute("xmlns:xsi")
attribute_node.setvalue("http://www.w3.org/2001/XMLSchema-instance")
mainnode.appendattribute(attribute_node)   

En este segmento del script, hemos ingresado los datos necesarios para la facturación electrónica italiana. Este es solo un ejemplo para ver cómo anidar nodos y asignar atributos.

progessivesending = document.createelement("ProgressivoInvio")
progessivesending.setvalue(dataview.getvalue("numero"))
mainnode.appendchild(progessivesending) 

Comenzamos a crear los nodos que necesitamos y establecemos el valor recuperándolo de la ficha que, en este caso, es el número de factura. Se recuerda que la creación de los elementos siempre comienza desde el documento, pero luego es necesario "enganchar" el nodo al padre.

table_rows = dataview.getatable("invoice_rows")
nrows = table_rows.countrows()
rows = table_rows.getrows()

Extrapolo las líneas que componen la factura.

DetailLines= document.createelement("DetailLines")

for i = 1,nrows do
        value_line_itemcode = rows[i].getvalue("code")
        value_line_qty = utility.formatnum(rows[i].getvalue("qty"),5)
        utility.formatnum(rows[i].getvalue("qty"),5)
        
        line = document.createelement("Line")
        line_itemcode = document.createelement("ItemCode")
        document.createelement("ItemCode")
        line_itemcode.setvalue(value_line_itemcode)

        line_qty = document.createelement("Qty")
        line_qty.setvalue(value_line_itemcode)

        line.appendchild(line_itemcode)
        line.appendchild(line_qty)
        detaillines.appendchild(line)
end
mainnode.appendchild(detaillines)

Vamos a crear un nodo llamado Line que contendrá los datos de cada línea e insertará código (code) y cantidad (qty). Este nodo se conectará a un nodo padre llamado DetailLines que a su vez se conectará al nodo principal.

document.appendchild(mainnode)
filename = country_filename .. idfiscal_filename .. "_" .. progessivesending.getvalue()
folder_invoices = utility.openfolderdialog()

if (folder_invoices~="") then
        if filename ~= "" then
               filename = folder_invoices .. "\\" .. filename .. ".xml"
               document.save(filename)
               dataview.showconfirm("File invoice electronics successfully created")
        end
end

Para concluir, conectamos el mainnode al documento, establecemos el nombre del archivo y preguntamos al usuario en qué carpeta debe guardarse.

Como puede ver, el mainnode se utilizó para todo el script, pero solo al final se vinculó al documento. Sin embargo, a los efectos del script, no cambia si el nodo está conectado al principio o al final, lo importante es que esta operación se realice antes del almacenamiento real del archivo xml.