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 version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:java="http://xml.apache.org/xalan/java" 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í.

Našli jste odpověď?