Preskoči na glavno vsebino

Konvertor Flexi2XML

Konverzný nástroj Flexi2XML na konverziu XML formátov

Avtor: Petr Pech

Flexi2XML možno použiť ako konverzný nástroj na prevod dát z ABRA Flexi aj do nej. Vie otvoriť súbor, previesť ho do XML, aplikovať na neho konverzný skript a zapísať výsledok — a to oboma smermi. Ako nástroj získať, popisuje článok Stiahnutie Flexi2XML.


Zložitejšia konverzia z XLS do Flexi

ABRA Flexi má v sebe základné možnosti importu z XLS (Excelu). Pre zložitejšie prípady — keď názvy stĺpcov nezodpovedajú vlastnostiam evidencie, je potrebné hodnoty prepočítať alebo poskladať z viacerých súborov — je nutné použiť nástroj Flexi2XML.


Konverzia z Excelu

Nástroj načítava súbory XLS aj XLSX. Majme takýto zošit:

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, prevedieme zošit na XML:

flexibee2xml --from-xls soubor.xls --evidence odberatel --to-xml soubor.xml

Výsledkom je XML, kde sa z názvov stĺpcov stanú názvy elementov:

<?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>

ℹ️ Parameter --evidence určuje len názov elementu riadku. Keď ho vynecháte, každý riadok sa zabalí do všeobecného <row>.

⚠️ Na Linuxe a macOS uzavrite bodkočiarku do úvodzoviek — --delimeter ";". Bez nich ju shell považuje za oddeľovač príkazov a časť príkazu zahodí. (Prepínač sa skutočne volá --delimeter, s týmto preklepom.)

Keby názvy stĺpcov priamo zodpovedali názvom vlastností vo Flexi XML, boli by sme hotoví — presne tak funguje práca s CSV a XLS v REST API. Zvyčajne je však potrebné XML ešte upraviť, a na to slúži XSL transformácia.


Konverzia z XML do XML (XSLT)

XSL transformácie sú štandardizovaným nástrojom, v jednotlivých implementáciách však bývajú odlišnosti. Flexi2XML je preto postavený na rovnakom jadre ako ABRA 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>

Existuje mnoho úvodov do XSLT — napríklad Kompletný sprievodca XSLT alebo úvod Jirku Koska. V XSLT je možné iterovať (<xsl:for-each/>), podmieňovať (<xsl:if/>) aj indexovať obsah (<xsl:key/>); nejde však o klasické iteratívne programovanie.

Transformáciu potom spustíme:

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 je potom možné do ABRA Flexi naimportovať buď priamo, alebo pomocou dávkového spracovania.


Prehľad prepínačov

Úplný zoznam vypíše nástroj sám s parametrom --help. Vstupný a výstupný formát sa kombinujú ľubovoľne — nástroj teda zvládne aj prevod medzi dvoma tabuľkovými formátmi bez zásahu do dát.

Prepínač

Význam

--from-xml, --from-json, --from-csv, --from-xls, --from-xlsx, --from-dbf

Vstupný súbor a jeho formát.

--to-xml, --to-csv, --to-xls, --to-xlsx, --to-dbf

Výstupný súbor a jeho formát.

--evidence

Názov elementu riadku vo výslednom XML; bez neho sa použije row.

--run-xslt

Aplikuje na dáta XSL transformáciu.

--params

Voliteľné parametre pre XSLT alebo pre dávkové nahrávanie.

--delimeter, --encoding, --no-header

Oddeľovač, kódovanie a potlačenie hlavičkového riadku pri CSV.

--memo

Názov súboru MEMO pri formáte DBF.

--deduplicate

Odstráni duplicitné záznamy.

--split

Rozdelí veľké XML na menšie súbory.

--load, --file, --id

Dávkové nahrávanie podľa konfiguračného súboru — pozri Dávkové spracovanie.

--help

Vypíše verziu nástroja a prehľad prepínačov.

💡 Na rozdiel od REST API, ktoré neznáme parametre mlčky ignoruje, nástroj preklep v názve prepínača nahlási ako Unrecognized option a skončí. Chyba sa tak spozná hneď.


Niekoľko poznámok na záver

  • Výslednú XSLT transformáciu je možné uložiť ako používateľskú transformáciu priamo do firmy a používať ju potom aj z REST API parametrom format. Ak ju chcete mať zabudovanú priamo vo Flexi, obráťte sa na našu podporu.

  • Spracovávať je možné aj viac súborov naraz — to sa hodí, keď máte jedno CSV alebo XLS s hlavičkami faktúr a druhé s položkami.

  • Flexi2XML je možné použiť aj na rozsekanie veľkého XML na mnoho malých a ich následné postupné nahrávanie.


Súvisiace

Ste s tem dobili odgovor na svoje vprašanje?