Obsah
Veľká časť importu/exportu sa dá zabezpečiť pomocou XML komunikácie, ktorú si najskôr odporúčam prejsť.
Najvhodnejšie je vytvoriť vlastného užívateľa na strane Pohody, ktorému povolíte XML komunikáciu a prístupy do agiend, ktoré sú potrebné pre export/import údajov. V prípade, ak by sa niekto dostal k tomuto užívateľovi (zneužitie údajov), tak by nevedel v programe nič vykonať. Napríklad, ak vytvoríte užívateľa pre XML komunikáciu v Nastavenie>Prístupové práva>Užívatelia a povolíte mu len agendu zásoby a zvolíte práva len na čítanie, tak dokáže pozrieť len zásoby, ale nič iné s nimi nevie vykonať (upraviť/vymazať).
e-shop (php)
Najskôr musí e-shop vedieť spracovať požiadavku z Pohody. Tu je príklad scriptu, ktorý vytvorí súbor zásoby.xml a následne z neho číta údaje. V tomto príklade vykoná import do databázy do tabuľky zásoby. Príkaz je napísaný v jazyku php. Toto môžete využiť napríklad pre Všeobecný internetový obchod.
<?php
$file = 'stocks.xml';
$content = file_get_contents("php://input");
file_put_contents($file, $content);
if (!is_file($file)) {
echo 'No file';
return;
}
if (!empty($content)) {
$xml = simplexml_load_file("stocks.xml");
$ns = $xml->getDocNamespaces();
$data = $xml->children($ns['rsp']);
$list = $data->children($ns['lStk']);
$items = $list->children($ns['lStk']);
foreach ($items as $item) {
$stock = $item->children($ns['stk'])->children($ns['stk']);
$id = $stock->id;
$ean = $stock->EAN;
$code = $stock->code;
$name = $stock->name;
$unit = $stock->unit;
$count = $stock->count;
$price = $stock->sellingPrice;
$pridat = $mysqli->query("INSERT INTO stocks (ID, EAN, Code, Name, Unit, Count, Price)
VALUES
('".$id."','".$ean."', '".$code."', '".$name."', '".$unit."', '".$count."', '".$price."')");
}
}
// odpoveď do Pohody, vrátanie elementu ResponsePack s atribútom state = ok
header("Content-Type: text/xml; charset=UTF-8");
echo '<?xml version="1.0" encoding="UTF-8"?>
<rsp:responsePack xmlns:rsp="http://www.stormware.cz/schema/version_2/response.xsd" note="Odpoveď z e-shopu" application="havri.eu"
state="ok" id="00000001" version="2.0" > </rsp:responsePack>';
?>
Pohoda
Na najčastejšie prepojenie sa používa Pohoda mServer. Pohoda mServer je jednoduchý HTTP server Pohody, ktorý funguje lokálne na PC, kde je nainštalovaná Pohoda. Táto jednoduchá aplikácia dokáže prijať a spracovať požiadavky. Ale na to, aby Pohoda mServer dokázal prijať a spracovať požiadavku tak musí byť:
- priamo prepojený s e-shopom (napr. pomocou VPN alebo Port Forwarding), kde priamo E-shop dokáže poslať požiadavku (napr. na export zásob) do Pohody, čiže z webu e-shopu viete odoslať rovno požiadavku na mServer. Napríklad to funguje tak, že v momente, keď zákazník vytvorí objednávku na e-shope, tak e-shop ju pošle priamo na mServer do Pohody
- aplikácia tretej strany / vlastná aplikácia, ktorá beží lokálne na PC, kde beží aj Pohoda mServer; aplikácia vykonáva sprostredkovanie komunikácie medzi e-shopom a mServerom.

Tu si ale treba uvedomiť, že to nie je vždy v aktuálnom čase, ale synchronizácia prebieha v nejakom intervale (napr. každých 15 minút)
V prípade, ak sa rozhodnete vytvoriť vlastnú aplikáciu na prepojenie e-shopu a Pohody, tak odporúčam do aplikácie zabudovať mServer komunikáciu, taktiež by som odporúčal rátať s +1 licencou, vyhradenou len vyslovene pre XML komunikáciu/mServer.
Moje odporúčania – vlastná aplikácia na prepojenie (c#)
Teória
Ak budete tvoriť vlastnú aplikáciu, tak aplikáciu zamerajte na mServer. Obrázky zásob a PDF súbory budete sťahovať z lokálneho disku PC cez FTP smerom na web. Aby ste odľahčili FTP komunikáciu, tak si vytvoríte nejaké logovanie v aplikacií, ktorá bude zaznamenávať odoslané súbory na web a bude ich porovnaváť s lokálnymi súbormi pri prenose na web, kde prenesie len tie zmenené alebo nové (sledovať si môžete napr. veľkosť súboru a dátum zmeny).
Príklad v C# (vlastná aplikácia na úrovni OS)
Aplikácia bude komunikovať metódou POST cez HTTP protokol. Najskôr si aplikácia stiahne prijaté objednávky z e-shopu a z Pohody následne vygeneruje XML zásoby a odošle ich smerom na e-shop.
Vytvorenie funkcie, ktorá odosiela XML súbory smerom na mServer (request):
private void OdoslaniePOST(string file, string agenda, string ResponseUrl, string ResponseFile)
{
try
{
// IP adresa / názov a port mServera
string mServerAddress = "http://localhost:4444";
// Meno a heslo užívateľa na strane Pohody
string UsernamePohoda = "Admin";
string PasswordPohoda = "heslo1";
// Transformácia do Base64 kódovania, ktoré vyžaduje autentizácia Pohody
byte[] Post64Pohoda = System.Text.Encoding.UTF8.GetBytes(UsernamePohoda + ":" + PasswordPohoda);
var PostNamePass = Convert.ToBase64String(Post64Pohoda);
using (var client = new WebClientWithResponse())
{
client.Headers.Add("Content-Type", "application/Pohoda");
client.Headers.Add("STW-Instance", agenda);
client.Headers.Add("STW-Authorization", "Basic " + PostNamePass);
client.Headers.Add("User-Agent", "User-Agent: STORMWARE HTTP client. http://www.stormware.cz");
using (var requestStream = client.OpenWrite(new Uri(mServerAddress + "/xml"), "POST"))
{
using (var fileStream = File.OpenRead(file))
{
fileStream.CopyTo(requestStream);
}
}
var bytes = client.Response;
string mServerResponse = System.Text.Encoding.GetEncoding(1250).GetString(bytes);
File.WriteAllText(ResponseFile, mServerResponse, Encoding.GetEncoding(1250));
using (var requestStream = client.OpenWrite(new Uri(ResponseUrl), "POST"))
{
using (var fileStream = File.OpenRead(ResponseFile))
{
fileStream.CopyTo(requestStream);
}
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message.ToString(), agenda);
}
}