Flexi2XML možno použiť aj ako konverzný nástroj na prevod dát z/do ABRA Flexi. Dokáže otvoriť súbor, previesť ho do XML, aplikovať naň konverzné nástroje a znova zapísať XML. To zvláda v oboch smeroch.
Zložitejšia konverzia z XLS do Flexi
Flexi má v sebe základné možnosti importu z XLS (Excelu). Pre zložitejšie prípady je potrebné použiť nástroj Flexi2XML.
Konverzia z Excelu
Nástroj Flexi2XML zatiaľ dokáže priamo načítavať XLS súbory (a tým pádom aj REST API). Majme taký XLS:
Cenník | Odberateľ | Cena |
8593026341407 | FLEXI | 1000.0 |
8593026341407 | ARIT | 900.0 |
8593026341407 | VFH | 1050.0 |
8593026341407 | ABRA | 1100.0 |
Konverzia z XLS do XML
Aby sme mohli vykonať ďalšie spracovanie, je potrebné vytvoriť XML takto (na Linux/Mac OS X je nutné namiesto znaku ; použiť „;"):
flexibee2xml --from-xls soubor.xls --evidence odberatel --to-xml soubor.xml
Výsledkom 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>
Keby názvy stĺpcov v XLS súbore priamo zodpovedali názvom atribútov vo FlexiXML, boli by sme hotoví (presne takto funguje práca s CSV a XLS vo FlexiBee REST API). Teraz je potrebné pripraviť konverzný skript, ktorý upraví XML. Na to používame štandardné XSL Transformácie (XSLT).
Konverzia z XML do XML (XSLT)
Transformácie XSL (XSLT) sú štandardizovaným nástrojom. Niekedy však bývajú v implementáciách rozdiely, a preto poskytujeme nástroj Flexi2XML, ktorý je postavený na rovnakom jadre ako Flexi. Tým je zaručená maximálna kompatibilita.
Pripravme 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é iterovať (<xsl:for-each/>), podmieňovať (<xsl:if/>), indexovať obsah (<xsl:key/>). Nejde však o klasické iteratívne programovanie. Vieme, že XSLT má svoje rezervy, ale na tieto účely sa nám javí ako ideálne.
Potom použijeme príkaz:
flexibee2xml --from-xml soubor.xml --run-xslt odberatel-in.xslt --to-xml vysledek.xml
Alebo jedným príkazom s preskočením medzikroku:
flexibee2xml --from-xls soubor.xls --evidence odberatel --run-xslt odberatel-in.xslt --to-xml vysledek.xml
Výsledok možno následne importovať cez Flexi buď priamo, alebo pomocou dávkového spracovania Flexi2XML.
Niekoľko poznámok na záver
Výslednú XSLT transformáciu možno uložiť ako Používateľskú transformáciu alebo ju priamo integrovať do Flexi (musíte nám ju zaslať e-mailom). Takto možno Flexi naučiť jednoducho produkovať alebo konzumovať XML z iných systémov. Použitie používateľskej (alebo integrovanej) XSLT transformácie je popísané v dokumentácii REST-API.
Možno spracovávať aj viacero súborov naraz – to využívame, keď máme jedno CSV/XLS s hlavičkami faktúr a druhé s položkami.
Flexi2XML možno použiť na rozdelenie veľkého XML na mnoho malých a ich následné postupné nahrávanie.
