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:
Zboží | 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>
<Zboží>8593026341407</Zboží>
<Odběratel>FLEXI</Odběratel>
<Cena>1000.0</Cena>
</odberatel>
<odberatel>
<Zboží>8593026341407</Zboží>
<Odběratel>ARIT</Odběratel>
<Cena>900.0</Cena>
</odberatel>
<odberatel>
<Zboží>8593026341407</Zboží>
<Odběratel>VFH</Odběratel>
<Cena>1050.0</Cena>
</odberatel>
<odberatel>
<Zboží>8593026341407</Zboží>
<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>
Existuje mnoho úvodů do XSLT (1, 2, …).
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í.