Flexi2XML lze použít také jako konverzní nástroj pro převod dat z/do ABRA Flexi. Umí otevřít soubor, převést jej do XML, aplikovat na něj konverzní nástroje a zapsat opět XML. To umí oběma směry.
Složitější konverze z XLS do Flexi
Flexi má v sobě základní možnosti importu z XLS (Excelu). Pro složitější případy je nutné použít nástroj Flexi2XML.
Konverze z Excelu
Nástroj Flexi2XML zatím umí přímo načítat XLS soubory (a tím pádem i REST API). Mějme takovýto XLS:
Ceník | Odběratel | Cena |
8593026341407 | FLEXI | 1000.0 |
8593026341407 | ARIT | 900.0 |
8593026341407 | VFH | 1050.0 |
8593026341407 | ABRA | 1100.0 |
Konverze z XLS do XML
Abychom mohli provést další zpracování, je nutné vytvořit XML takto (na Linux/Mac OS X je nutné místo znaku ; použít „;“):
flexibee2xml --from-xls soubor.xls --evidence odberatel --to-xml soubor.xml
Výsledkem je XML:
<?xml version="1.0" encoding="utf-8"?> <winstrom version="1.0"> <odberatel> <Ceník>8593026341407</Ceník> <Odběratel>FLEXI</Odběratel> <Cena>1000.0</Cena> </odberatel> <odberatel> <Ceník>8593026341407</Ceník> <Odběratel>ARIT</Odběratel> <Cena>900.0</Cena> </odberatel> <odberatel> <Ceník>8593026341407</Ceník> <Odběratel>VFH</Odběratel> <Cena>1050.0</Cena> </odberatel> <odberatel> <Ceník>8593026341407</Ceník> <Odběratel>ABRA</Odběratel> <Cena>1100.0</Cena> </odberatel> </winstrom>
Kdyby názvy sloupců v XLS souboru přímo odpovídaly názvům atributů ve FlexiXML, byli bychom hotovi (přesně takto funguje práce s CSV a XLS ve FlexiBee REST API). Nyní je nutné připravit konverzí skript, který upraví XML. K tomu používáme standardní XSL Transformace (XSLT).
Konverze z XML do XML (XSLT)
Transformace XSL (XSLT) jsou standardizovaným nástrojem. Nicméně někdy bývají v implementacích odlišnosti, a proto poskytujeme nástroj Flexi2XML, který je postaven na stejném jádře jako Flexi. Tím je zaručena maximální kompatibilita.
Připravme konverzní skript (odberatel-in.xslt):
<?xml version="1.0" encoding="utf-8"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:java="http://xml.apache.org/xalan/java" version="1.0" exclude-result-prefixes="java"> <xsl:output method="xml" indent="yes" encoding="utf-8"/> <xsl:template match="/winstrom"> <winstrom version="1.0"> <xsl:apply-templates select="odberatel"/> </winstrom> </xsl:template> <xsl:template match="odberatel"> <odberatel> <firma>code:<xsl:value-of select="java:flexibee.Tool.toUpper(Odběratel)"/></firma> <cenik>code:<xsl:value-of select="java:flexibee.Tool.toUpper(Ceník)"/></cenik> <prodejCena> <xsl:value-of select="Cena"/> </prodejCena> </odberatel> </xsl:template> </xsl:stylesheet>
V XSLT je možné iterovat (<xsl:for-each/>
), podmiňovat (<xsl:if/>
), indexovat obsah (<xsl:key/>
). Nicméně se nejedná o klasické iterativní programování. Víme, že XSLT má své rezervy, ale pro tyto účely se nám jeví jako ideální.
Pak použijeme příkaz:
flexibee2xml --from-xml soubor.xml --run-xslt odberatel-in.xslt --to-xml vysledek.xml
Nebo jedním příkaz s přeskočením mezikroku:
flexibee2xml --from-xls soubor.xls --evidence odberatel --run-xslt odberatel-in.xslt --to-xml vysledek.xml
Výsledek lze pak naimportovat přes Flexi buď přímo a nebo pomocí dávkového zpracování Flexi2XML.
Několik poznámek závěrem
Výslednou XSLT transformaci lze uložit jako Uživatelskou transformaci nebo jí přímo integrovat do Flexi (musíte nám ji poslat e-mailem). Lze tak Flexi naučit snadno produkovat nebo konzumovat XML z jiných systémů. Použití uživatelské (nebo integrované) XSLT transformace je popsáno v dokumentaci REST-API.
Lze zpracovávat i více souborů najednou – to používáme pokud máme jedno CSV/XLS s hlavičkami faktur a druhé s položkami.
Flexi2XML lze použít pro rozsekání velkého XML na mnoho malých a jejich následné postupné nahrávání.