Flexi2XML lze použít jako konverzní nástroj pro převod dat z ABRA Flexi i do ní. Umí otevřít soubor, převést jej do XML, aplikovat na něj konverzní skript a zapsat výsledek — a to oběma směry. Jak nástroj získat, popisuje článek Stažení Flexi2XML.
Složitější konverze z XLS do Flexi
ABRA Flexi má v sobě základní možnosti importu z XLS (Excelu). Pro složitější případy — kdy názvy sloupců neodpovídají vlastnostem evidence, je potřeba hodnoty přepočítat nebo poskládat z více souborů — je nutné použít nástroj Flexi2XML.
Konverze z Excelu
Nástroj načítá soubory XLS i XLSX. Mějme takovýto sešit:
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í, převedeme sešit na XML:
flexibee2xml --from-xls soubor.xls --evidence odberatel --to-xml soubor.xml
Výsledkem je XML, kde se z názvů sloupců stanou názvy elementů:
<?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>
</winstrom>
ℹ️ Parametr --evidence určuje jen název elementu řádku. Když jej vynecháte, každý řádek se zabalí do obecného <row>.
⚠️ Na Linuxu a macOS uzavřete středník do uvozovek — --delimeter ";". Bez nich jej shell považuje za oddělovač příkazů a část příkazu zahodí. (Přepínač se skutečně jmenuje --delimeter, s tímto překlepem.)
Kdyby názvy sloupců přímo odpovídaly názvům vlastností ve Flexi XML, byli bychom hotovi — přesně tak funguje práce s CSV a XLS v REST API. Obvykle je ale potřeba XML ještě upravit, a k tomu slouží XSL transformace.
Konverze z XML do XML (XSLT)
XSL transformace jsou standardizovaným nástrojem, v jednotlivých implementacích ale bývají odlišnosti. Flexi2XML je proto postavený na stejném jádře jako ABRA Flexi — tím je zaručená 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 — například Kompletní průvodce XSLT nebo úvod Jirky Koska. V XSLT je možné iterovat (<xsl:for-each/>), podmiňovat (<xsl:if/>) i indexovat obsah (<xsl:key/>); nejedná se ale o klasické iterativní programování.
Transformaci pak spustíme:
flexibee2xml --from-xml soubor.xml --run-xslt odberatel-in.xslt --to-xml vysledek.xml
Nebo jedním příkazem 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 do ABRA Flexi naimportovat buď přímo, nebo pomocí dávkového zpracování.
Přehled přepínačů
Úplný seznam vypíše nástroj sám s parametrem --help. Vstupní a výstupní formát se kombinují libovolně — nástroj tedy zvládne i převod mezi dvěma tabulkovými formáty bez zásahu do dat.
Přepínač | Význam |
| Vstupní soubor a jeho formát. |
| Výstupní soubor a jeho formát. |
| Název elementu řádku ve výsledném XML; bez něj se použije |
| Aplikuje na data XSL transformaci. |
| Volitelné parametry pro XSLT nebo pro dávkové nahrávání. |
| Oddělovač, kódování a potlačení hlavičkového řádku u CSV. |
| Název souboru MEMO u formátu DBF. |
| Odstraní duplicitní záznamy. |
| Rozdělí velké XML na menší soubory. |
| Dávkové nahrávání podle konfiguračního souboru — viz Dávkové zpracování. |
| Vypíše verzi nástroje a přehled přepínačů. |
💡 Na rozdíl od REST API, které neznámé parametry mlčky ignoruje, nástroj překlep v názvu přepínače ohlásí jako Unrecognized option a skončí. Chyba se tak pozná hned.
Několik poznámek závěrem
Výslednou XSLT transformaci lze uložit jako uživatelskou transformaci přímo do firmy, a používat ji pak i z REST API parametrem
format. Chcete-li ji mít zabudovanou přímo ve Flexi, obraťte se na naši podporu.Zpracovávat lze i více souborů najednou — to se hodí, když máte jedno CSV nebo XLS s hlavičkami faktur a druhé s položkami.
Flexi2XML lze použít i pro rozsekání velkého XML na mnoho malých a jejich následné postupné nahrávání.
