Konvertor FlexiBee2XML

FlexiBee2XML lze použít také jako konverzní nástroj pro převod dat z/do FlexiBee. 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 Flexibee

FlexiBee má v sobě základní možnosti importu z XLS (Excelu). Pro složitější případy je nutné použít nástroj FlexiBee2XML.

Konverze z Excelu

Nástroj Flexibee2XML 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 FLEXIBEE 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>FLEXIBEE</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 FlexiBee XML, 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 FlexiBee2XML, který je postaven na stejném jádře jako FlexiBee. 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 FlexiBee buď přímo a nebo pomocí dávkového zpracování Flexibee2XML.

Několik poznámek závěrem

Výslednou XSLT transformaci lze uložit jako Uživatelskou transformaci nebo jí přímo integrovat do FlexiBee (musíte nám ji poslat e-mailem). Lze tak FlexiBee 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.

FlexiBee2XML lze použít pro rozsekání velkého XML na mnoho malých a jejich následné postupné nahrávání.