abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    dnes 18:11 | Nová verze

    Yocto Project byl vydán ve verzi 5.0. Její kódové jméno je Scarthgap. Yocto Project usnadňuje vývoj vestavěných (embedded) linuxových systémů na míru konkrétním zařízením. Cílem projektu je nabídnou vývojářům vše potřebné. Jedná se o projekt Linux Foundation.

    Ladislav Hagara | Komentářů: 0
    dnes 17:56 | Nová verze

    Operační systém 9front, fork operačního systému Plan 9, byl vydán v nové verzi "do not install" (pdf). Více o 9front v FQA.

    Ladislav Hagara | Komentářů: 0
    dnes 13:11 | Nová verze

    Svobodná webová platforma pro sdílení a přehrávání videí PeerTube (Wikipedie) byla vydána v nové verzi 6.1. Přehled novinek i s náhledy v oficiálním oznámení a na GitHubu. Řešeny jsou také 2 bezpečnostní chyby.

    Ladislav Hagara | Komentářů: 3
    dnes 12:33 | Zajímavý software

    Lennart Poettering na Mastodonu představil utilitu run0. Jedná se o alternativu k příkazu sudo založenou na systemd. Bude součástí systemd verze 256.

    Ladislav Hagara | Komentářů: 12
    včera 23:22 | Nová verze

    Hudební přehrávač Amarok byl vydán v nové major verzi 3.0 postavené na Qt5/KDE Frameworks 5. Předchozí verze 2.9.0 vyšla před 6 lety a byla postavená na Qt4. Portace Amaroku na Qt6/KDE Frameworks 6 by měla začít v následujících měsících.

    Ladislav Hagara | Komentářů: 11
    včera 21:44 | Komunita

    Ubuntu 24.10 bude Oracular Oriole (věštecká žluva).

    Ladislav Hagara | Komentářů: 11
    včera 20:22 | Nová verze

    Byla vydána nová verze 2.45.0 distribuovaného systému správy verzí Git. Přispělo 96 vývojářů, z toho 38 nových. Přehled novinek v příspěvku na blogu GitHubu a v poznámkách k vydání. Vypíchnout lze počáteční podporu repozitářů, ve kterých lze používat SHA-1 i SHA-256.

    Ladislav Hagara | Komentářů: 0
    včera 13:33 | IT novinky

    Před 25 lety, ve čtvrtek 29. dubna 1999, byla spuštěna služba "Úschovna".

    Ladislav Hagara | Komentářů: 0
    včera 01:00 | Nová verze

    Byla vydána nová verze 24.04.28 s kódovým názvem Time After Time svobodného multiplatformního video editoru Shotcut (Wikipedie) a nová verze 7.24.0 souvisejícího frameworku MLT Multimedia Framework. Nejnovější Shotcut je vedle zdrojových kódů k dispozici také ve formátech AppImage, Flatpak a Snap.

    Ladislav Hagara | Komentářů: 0
    28.4. 16:33 | Nová verze Ladislav Hagara | Komentářů: 0
    KDE Plasma 6
     (75%)
     (8%)
     (2%)
     (15%)
    Celkem 885 hlasů
     Komentářů: 4, poslední 6.4. 15:51
    Rozcestník

    WinStrom Sync a komunikace s internetovými obchody

    10. 2. 2010 | Lukáš Jelínek | Programování | 4485×

    Typickým problémem řešeným při tvorbě internetového obchodu (e-shopu) je komunikace s „vnějším prostředím“. Je potřeba vkládat zboží do nabídky, upravovat ceny, vystavovat faktury atd., a potom toto všechno promítnout do účetních a daňových záznamů – a to ještě obvykle tak, aby to bylo kompatibilní s obchodní činností prováděnou mimo e-shop.

    Často se to řeší tak, že se v rámci e-shopu pracuje úplně samostatně a vlastně se stejné činnosti dělají dvakrát. Přitom je to úplně zbytečné – všechno lze zvládnout z prostředí ekonomického softwaru (případně naopak některé věci provádět v obchodě), pohodlně, bez duplicitních činností a bez rizika, že se data v e-shopu budou lišit od dat v účetnictví.

    Obsah

    O co jde?

    link

    Ekonomický systém WinStrom obsahuje komponentu WinStrom Sync, která zajišťuje komunikaci mezi tímto programem a jinými produkty, například internetovými obchody. Komunikace je založena na běžném síťovém protokolu HTTP a jazyce XML. Pro webové aplikace psané v jazyce PHP je připravena knihovna, kterou stačí pro komunikaci použít (není třeba se zabývat zpracováním a generováním XML).

    WinStrom Sync je off-line způsob komunikace (pro on-line komunikaci lze použít technologii REST API), proto nevyžaduje, aby program program WinStrom trvale někde běžel. Komunikaci ovládá uživatel pracující s programem. Jde tedy vždy o synchronizaci mezi daty uloženými v databázi systému WinStrom a v databázi e-shopu. Směr synchronizace vyplývá ze smyslu konkrétní operace.

    Synchronizace dat probíhá transakčně (čili při problémech v nějaké operaci se celá operace zruší) a inkrementálně (tedy při přidání nebo jedné položky v nabídce zboží není potřeba přenášet celou nabídku s tisíci položek). Aktuálně podporovanými komunikačními operacemi jsou:

    • zjišťování podpory WinStrom Sync
    • zjišťování funkcí podporovaných e-shopem
    • synchronizace katalogu (nabídky zboží, ceníku)
    • synchronizace informací o zákaznících
    • získávání objednávek z e-shopu
    • aktualizace stavu objednávek v e-shopu

    Přístup k datům je řízen HTTP autentizací (na způsobu implementace na straně serveru nezáleží) – viz dále.

    Adaptér pro propojení WinStrom Sync s e-shopem

    link

    Implementace adaptéru je velmi jednoduchá. Jediné věci, které mohou práci trochu komplikovat, je „napasování“ databázových atributů na atributy komunikačního formátu, a potom také HTTP autentizace. Řešení prvního z uvedených problémů vyžaduje dobré promyšlení vazeb mezi datovými atributy, druhý problém lze řešit buď na úrovni aplikace (v programovém kódu pro propojení WinStrom Sync a e-shopu) nebo konfigurací webového serveru (v souboru .htaccess, v globální konfiguraci apod.).

    Přípravné práce

    link

    První věcí, kterou je potřeba udělat, je stažení knihovny z webu WinStrom. Knihovna je ZIP archiv se čtyřmi soubory – vlastní výkonný kód, abstraktní třída pro propojení s databází a potom dvě konkrétní databázové implementace (pro databáze MySQLPostgreSQL). Všechny čtyři soubory jsou trojitě licencovány, konkrétně pod Mozilla Public License (MPL) 1.1, GNU GPL 2.0, a GNU LGPL 2.1.

    Knihovna v současné době nepodporuje celou sadu dat přenášenou v XML souboru. Kdo by měl zájem využívat některá data, která nejsou v knihovně podporována, může buď použít vlastní implementaci (přímo zpracovávat XML soubor), nebo si knihovnu podle potřeby upravit.

    V archivu jsou soubory umístěny v adresáři adapter-common-php. Název adresáře můžete nechat původní nebo si ho libovolně změnit, důležité je jen to, jak se bude na soubory odkazovat z kódu adaptéru. V tomto článku bude používán původní název.

    Nyní je potřeba vytvořit na serveru adresář, kde bude adaptér umístěn. Může se jmenovat třeba winstrom. V kořenovém adresáři webu (což bývá, ale obecně nemusí být, kořenový adresář pro určitou doménu) se pak vytvoří soubor s názvem .winstrom-sync-xml (pozor, mezi syncxml je spojovník, nikoli tečka). Obsahem souboru bude pouze absolutní URL cesta k adresáři s adaptérem. Pokud je například adaptér umístěn ve zmíněném adresáři winstrom, bude soubor vypadat takto:

    /winstrom/
    

    HTTP autentizace

    link

    Protože k synchronizačním operacím by neměl mít přístup kdokoliv, používá se HTTP autentizace. Lze využít jak starší a méně bezpečnou metodu Basic, tak i bezpečnější metodu Digest. Záleží samozřejmě na tom, jak je autentizace řešena a zda je heslo uloženo tak, aby šlo metodu Digest použít.

    Nejjednodušší je, pokud lze autentizaci nastavit přímo na webovém serveru. Pokud na serveru běží například Apache 2.2 a je povoleno nastavovat autentizaci pro jednotlivé adresáře (typicky v souboru .htaccess), stačí si vytvořit autentizační pravidla a případně soubor s přihlašovacími údaji. Soubor .htaccess může mít kupříkladu tento obsah:

    AuthType Digest
    AuthDigestProvider file
    AuthName "WinStrom"
    AuthUserFile ../../data/passwords-digest
    Require user winstrom
    

    Soubor říká, že se použije autentizační metoda Digest, data se získají ze souboru, chráněný prostor se jmenuje WinStrom, soubor s údaji se nachází na uvedené cestě (mimo prostor, který je publikován na web) a oprávnění přístupu má uživatel winstrom. Podle potřeby lze samozřejmě tyto údaje změnit. Bližší informace najdete v dokumentaci k serveru Apache.

    Pokud webový server nepodporuje uvedený způsob řízení přístupu, případně je vhodnější řešit přístup na úrovni webové aplikace, lze zvolit jiný postup. O přístupu bude rozhodovat přímo kód v jazyce PHP. Následující kód ukazuje, jak zajistit autentizaci metodou Basic:

    if (isset($_SERVER['PHP_AUTH_USER']) && isset($_SERVER['PHP_AUTH_PW'])) {
      $ok = do_user_auth($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW']);
      if ($ok) {
        // provedení výkonných operací
        exit();
      }
    }
    
    header('WWW-Authenticate: Basic realm="WinStrom"');
    header('HTTP/1.0 401 Unauthorized');
    

    V kódu se volá funkce do_user_auth() se jménem a heslem jako parametry. Tato funkce musí být implementována tak, aby vrátila TRUE pro oprávněného uživatele a FALSE v ostatních případech. Funkce může například provést dotaz do tabulky uživatelů. Pro metodu Digest by to bylo o něco složitější – postup najdete v dokumentaci k PHP.

    Bezpečnost lze dále zvýšit využitím SSL/TLS. Stačí pouze nakonfigurovat webový server tak, aby používal šifrovaný režim (případně aby nešifrovaný režim ani nešel použít) – samozřejmě s tím, že je potřeba si připravit příslušnou dvojici certifikát-klíč. Pak už se jen v programu WinStrom nastaví schéma https namísto http.

    Informace o obchodě a jeho nastavení

    link

    V adresáři adaptéru budou dva soubory (mohl by být i jen jeden, ale je vhodnější oddělit vlastní implementaci adaptéru od obecného kódu). Jedním bude soubor index.php, ve které se bude pouze vytvářet a volat instance adaptéru:

    <?php
    
    require_once("MySync.php");
    
    $sync = new MySync();
    $sync->work();
    
    ?>
    

    V případě použití autentizace v PHP kódu bude samozřejmě potřeba vložit operace dovnitř bloku vykonávaného po úspěšném ověření uživatele. Dalším krokem už bude vytvoření samotného souboru s adaptérem – zde se bude jmenovat MySync.php, ale název může být opět libovolný (s tím, že se v rámci require_once v souboru index.php použije ten správný):

    <?php
    
    require_once("adapter-common-php/WinStrom_Sync.php");
    require_once("adapter-common-php/WinStrom_MySql_Adapter.php");
    
    class MySync extends WinStrom_Sync {
      function MySync() {
        $this->enableFeature("stock-import");
        $this->enableFeature("detect");
    
        $this->dbAdapter = new WinStrom_Mysql_Adapter();
        
        mysql_connect("localhost", "jmeno", "heslo");
        mysql_select_db("nazevdb");
      }
      
      // Jméno produktu internetového obchodu
      protected function getProductName() {
        return "Objednávky pro WinStrom";
      }
      
      // Verze produktu internetového obchodu
      protected function getProductVersion() {
        return "0.1";
      }
      
      // Jméno organizace, která internetový obchod provozuje
      protected function getOrganisation() {
        return "Testovací firma, s.r.o.";
      }
      
      // Název internetového obchodu
      protected function getShopName() {
        return "Testovací obchod 1.0";
      }
      
      // sem přijdou další metody – viz dále
    }
    
    ?>
    

    Nejprve se vloží potřebné soubory z knihovny. Jedním bude vždy WinStrom_Sync.php, ve kterém je implementace WinStrom Sync. Druhý soubor bude záviset na použité databázi. V tomto případě je použita databáze MySQL, ovšem v případě použití PostgreSQL bude potřeba jako druhý soubor použít WinStrom_PostgreSQL_Adapter.php.

    Dále je tu třída MySync, která rozšiřuje třídu WinStrom_Sync a implementuje metody volané implementací WinStrom Sync. Čtyři uvedené metody poskytují popisné informace o obchodu a firmě – tyto údaje se pak budou zobrazovat v programu WinStrom. Důležitější je však obsah konstruktoru, protože říká, které funkce obchod podporuje (zde detekce podporovaných operací a import ceníku z programu WinStrom) a kterou databázovou implementaci použít (zde MySQL).

    Databázová implementace obsahuje jen velmi málo kódu – aktuálně jen pro start a potvrzení transakce, provedení SQL dotazu a načtení výsledku do pole. Cílem použití je odstínit implementaci od konkrétní databáze a zjednodušit tak přenositelnost kódu. Lze si vytvořit potomka třídy a přidat do něj například připojování k databázi. Jednodušeji (byť méně čistě) se lze k databázi připojovat v rámci konstruktoru potomka WinStrom_Sync (viz výše). Další možností je využít prostředky, které k tomuto účelu poskytuje příslušný internetový obchod.

    Vazba mezi databází a synchronizačními atributy

    link

    Nyní nastává klíčový moment celé implementace – provázání databázových a synchronizačních atributů. Lze si ukázat například na katalogu zboží. V e-shopu bude například takováto databáze zboží:

    CREATE TABLE Skupiny_zbozi (
    sz_id INT UNSIGNED AUTO_INCREMENT,    /* syntetický primární klíč */
    sz_kod VARCHAR(20) UNIQUE NOT NULL,   /* kód skupiny zboží */
    sz_nazev VARCHAR(100) NOT NULL,       /* název skupiny zboží */
    PRIMARY KEY (sz_id))
    ENGINE=InnoDB;
    
    CREATE TABLE Zbozi (
    zb_id INT UNSIGNED AUTO_INCREMENT,    /* syntetický primární klíč */
    zb_kod VARCHAR(20) UNIQUE NOT NULL,   /* kód zboží */
    zb_nazev VARCHAR(100) NOT NULL,       /* název zboží */
    zb_popis VARCHAR(255),                /* popis zboží */
    zb_cena DECIMAL(10,2) NOT NULL DEFAULT 0.00,  /* cena zboží */
    zb_cena_dph BOOL NOT NULL DEFAULT 0,  /* druh ceny (bez DPH, s DPH přesně, s DPH koeficient)
    zb_typ_dph INT NOT NULL DEFAULT 2,    /* sazba DPH (bez DPH, snížená, základní)
    sz_id INT UNSIGNED NOT NULL,          /* cizí klíč do tabulky skupin */
    PRIMARY KEY (zb_id),
    CONSTRAINT sk_zbozi FOREIGN KEY sk_zbozi(sz_id) REFERENCES Skupiny_zbozi(sz_id) ON DELETE RESTRICT ON UPDATE CASCADE
    )
    ENGINE=InnoDB;
    

    První tabulka definuje skupiny zboží, druhá jednotlivé položky. Skupiny i položky jsou jednoznačně identifikovány unikátním kódem (kromě toho má každá tabulka i svůj syntetický číselný klíč určený pro spojování tabulek a případné další operace). Každá položka má samozřejmě cenu (zde včetně DPH), druh ceny (jak je určena ve vztahu k DPH) a také sazbu DPH.

    Operace s katalogem (ceníkem) a skupinami zboží

    link

    Přenos ceníku do obchodu

    link

    Pokud chceme do těchto tabulek importovat data z programu WinStrom (nebo je tam naopak exportovat – to v případě, že by se katalog zboží spravoval v e-shopu), je potřeba napojit jednotlivé atributy v definovaných tabulkách na odpovídající hodnoty v přenášených XML souborech.

    Výkonný kód bude obsažen v metodě onStockImport(), kterou WinStrom Sync při importu ceníku zavolá. Metoda musí aktualizovat skupiny zboží (tedy přidat případné nové skupiny; ještě by se mohl měnit název, nicméně tuto datovou položku knihovna WinStrom v současné době nepřenáší, proto to není třeba implementovat, ledaže by si člověk knihovnu patřičným způsobem upravil). Následující implementace je založena na tom, že se obě tabulky (skupiny zboží, položky katalogu/ceníku) načtou celé do aplikace a již se neprovádějí jednotlivé dotazy na konkrétní záznamy.

    protected function onStockImport($listItems) {
        $sql = "SELECT sz_id, sz_kod FROM Skupiny_zbozi";
        $res = $this->dbAdapter->sql_query($sql);
        $grp = array();
        while ($a = $this->dbAdapter->sql_fetch_array($res)) {
          $grp[stripslashes($a["sz_kod"])] = $a;
        }
        
        $sql = "SELECT zb_kod FROM Zbozi";
        $res = $this->dbAdapter->sql_query($sql);
        $goods = array();
        while ($a = $this->dbAdapter->sql_fetch_array($res)) {
          $goods[] = stripslashes($a["zb_kod"]);
        }
        
        foreach ($listItems as $item) {
          $it = $item["listItemAttr"];
          
          $gid = 0;
          $sza = sscanf($it["skupZboz"], "code:%s");
          $sz = $sza[0];
          if (array_key_exists($sz, $grp)) {
            $gid = $grp[$sz]["sz_id"];
          }
          else {
            $sz = mysql_real_escape_string($sz);
            $sql = "INSERT INTO Skupiny_zbozi SET sz_kod='%s', sz_nazev='%s'";
            $sql = sprintf($sql, $sz, $sz);
            $this->dbAdapter->sql_query($sql);
            
            $sql = "SELECT MAX(sz_id) mid FROM Skupiny_zbozi";
            $res = $this->dbAdapter->sql_query($sql);
            $a = $this->dbAdapter->sql_fetch_array($res);
            $gid = $a["mid"];
          }
          
          $vat = 99;
          switch ($it["typSzbDphK"]) {
            case "typSzbDph.dphOsv": $vat = 0;
              break;
            case "typSzbDph.dphSniz": $vat = 1;
              break;
            case "typSzbDph.dphZakl": $vat = 2;
              break;
          }
          
          $pt = 99;
          switch ($it["typCenyDphK"]) {
            case "typCeny.bezDph": $pt = 0;
              break;
            case "typCeny.sDph": $pt = 1;
              break;
            case "typCeny.sDphKoef": $pt = 2;
              break;
          }
          
          $sql = "";
          if (in_array($it["kod"], $goods)) {
            $sql = "UPDATE Zbozi SET zb_nazev='%s', zb_popis='%s', zb_cena=%f, zb_cena_dph=%u, zb_typ_dph=%u, sz_id=%u WHERE zb_kod='%s'";
            $sql = sprintf($sql, mysql_real_escape_string($it["nazev"]), mysql_real_escape_string($it["popis"]), $it["cenaZakl"], $pt, $vat, $gid, mysql_real_escape_string($it["kod"]));
            $this->dbAdapter->sql_query($sql);
          }
          else {
            $sql = "INSERT INTO Zbozi SET zb_kod='%s', zb_nazev='%s', zb_popis='%s', zb_cena=%f, zb_cena_dph=%u, zb_typ_dph=%u, sz_id=%u";
            $sql = sprintf($sql, mysql_real_escape_string($it["kod"]), mysql_real_escape_string($it["nazev"]), mysql_real_escape_string($it["popis"]), mysql_real_escape_string($it["cenaZakl"]), $pt, $vat, $gid);
            $this->dbAdapter->sql_query($sql);
          }
        }
      }
    

    Parametrem metody onStockImport() je asociativní pole, které v současné době obsahuje dvě položky: Cenik (vlastní katalog zboží) a SkladKarty (skladové karty; umožňují zobrazovat v e-shopu stav skladu, pokud to obchod podporuje). Protože výše uvedená databáze stav skladu neobsahuje (při off-line synchronizaci jde stejně jen o orientační hodnotu), nebude se druhá z položek zpracovávat. Cenik je běžné pole, obsahující jednotlivé položky zboží reprezentované jako asociativní pole.

    Celé zpracování probíhá v transakci – o to se postará kód v knihovně WinStrom Sync. V metodě samotné stačí jen získávat z asociativních polí (podle jednotlivých položek) příslušné hodnoty a vkládat je do odpovídajících atributů v databázi. Nejprve se vždy (podle kódu) zjistí, zda je zboží přítomno v databázi – není-li, vloží se tam, jinak se existující zboží aktualizuje.

    V XML datech z programu WinStrom přijde výrazně více datových položek, než kolik se jich zde zpracovává. Nicméně příslušná PHP knihovna pro WinStrom Sync jich aktuálně extrahuje jen malou část. Kdo by potřeboval více (například kódy EAN nebo PLU, různé údaje o balení, záruční údaje, údaje o dodavateli apod.), může si extrakci údajů snadno doplnit do metody onStockImportInt() ve třídě WinStrom_Sync v souboru WinStrom_Sync.php, případně si podobným stylem celou metodu předefinovat v rámci potomka třídy (tj. ve třídě MySync).

    Přenos ceníku z obchodu do programu WinStrom

    link

    V některých případech se hodí mít možnost naopak přenášet ceník z internetového obchodu do programu WinStrom. Je to tehdy, spravuje-li se katalog zboží v obchodě a do programu WinStrom se přenášejí jen některá data. V první řadě je potřeba takovou možnost deklarovat v konstruktoru – bude tam uvedeno toto:

    $this->enableFeature("stock-export");
    

    Tím se deklaruje možnost exportu, což ovšem neznamená, že by e-shop nemohl také importovat. Lze mít deklarovány (a používat) současně oba směry přenosu. Pro přenos směrem ven je třeba implementovat metodu onStockExport(). Situace je zde podstatně jednodušší než v případě importu do obchodu – není třeba nic porovnávat s databází, prostě se obsah databáze „vyklopí“ na výstup.

    Další výhoda spočívá v tom, že knihovna WinStrom Sync se při exportu pokusí převést všechna data, která se uloží do příslušného asociativního pole. To znamená, že lze využívat celou šíři datových položek dostupných v rámci XML formátu, bez nutnosti v knihovně cokoli upravovat. Tady je příklad implementace exportu:

    protected function onStockExport() {
        $result = new WSStockExportResult();
        
        $sql = "SELECT zb_id, zb_kod, zb_nazev, zb_popis, zb_cena, zb_cena_dph, zb_typ_dph, sz_kod FROM Zbozi NATURAL JOIN Skupiny_zbozi";
        $res = $this->dbAdapter->sql_query($sql);
        
        while ($a = $this->dbAdapter->sql_fetch_array($res)) {
          $listItem = array();
          $listItem["id"] = "ext:SHOP:".$a["zb_id"];
          $listItem["kod"] = stripslashes($a["zb_kod"]);
          $listItem["nazev"] = stripslashes($a["zb_nazev"]);
          $listItem["popis"] = stripslashes($a["zb_popis"]);
          $listItem["cenaZakl"] = $a["zb_cena"];
          $listItem["skupZboz"] = sprintf("code:%s", stripslashes($a["sz_kod"]));
          $listItem["typZasobyK"] = "typZasoby.mimoSklad";
          
          $vat = "";
          switch ($a["zb_cena_dph"]) { case 0: $vat = "typSzbDph.dphOsv";
              break;
            case 1: $vat = "typSzbDph.dphSniz";
              break;
            case 2: $vat = "typSzbDph.dphZakl";
              break;
          }
          
          $listItem["typSzbDphK"] = $vat;
          
          $pt = "";
          switch ($a["zb_typ_dph"]) {
            case 0: $pt = "typCeny.bezDph";
              break;
            case 1: $pt = "typCeny.sDph";
              break;
            case 2: $pt = "typCeny.sDphKoef";
              break;
          }
          
          $listItem["typCenyDphK"] = $pt;
          
          $result->addListItem($listItem);
        }
        
        $sql = "SELECT sz_kod, sz_nazev FROM Skupiny_zbozi";
        $res = $this->dbAdapter->sql_query($sql);
        
        while ($a = $this->dbAdapter->sql_fetch_array($res)) {
          $liGroup = array();
          
          $liGroup["id"] = "code:".$a["sz_kod"];
          $liGroup["kod"] = stripslashes($a["sz_kod"]);
          $liGroup["nazev"] = stripslashes($a["sz_nazev"]);
          
          $result->addListItemGroup($liGroup);
        }
        
        $result->setLast(time());
        
        return $result;
      }
    

    Metoda pro každou položku ceníku vloží databázové atributy do asociativního pole pro export do XML, totéž učiní i pro skupiny zboží. Na závěr nastaví (metodou setLast()) časové razítko exportu, které přenosovou operaci identifikuje. Všimněte si identifikátorů – u skupin se jako identifikátor používá přímo kód skupiny, u zboží se přenáší i „externí identifikátor“, který zde odpovídá syntetickému primárnímu klíči využívanému pro databázové záznamy.

    Další operace

    link

    Toto není zdaleka všechno, co lze v rámci komunikace mezi programem WinStrom 10 a internetovými obchody (pomocí WinStrom Sync) přenášet. Velmi podobně vypadá například přenos objednávek (a informací o zákaznících), návod na jedno z možných řešení najdete ve vývojářské sekci webových stránek programu WinStrom. Opačnou cestou mohou putovat informace o stavu objednávky, tedy například o realizaci dodávky nebo o stornu objednávky, případně nějakých učiněných změnách.

    Výhodou používaného řešení je značná flexibilita – jak se můžete přesvědčit na příkladech XML souborů, podporovaných položek je velmi mnoho, takže je lze v případě potřeby využít, na druhou stranu se lze naopak omezit jen na to, co daný obchod podporuje nebo co je vhodné přenášet.

    Protože se WinStrom intenzivně vyvíjí, je velmi pravděpodobné, že se v možnostech komunikace s internetovými obchody objeví další možnosti – například export/import faktur, který možná v současnosti někomu chybí a který by obohatil již dnes velmi širokou škálu možností komunikace ekonomického softwaru s e-shopy.




    Sponzorem článku je firma WinStrom, s. r. o.

           

    Hodnocení: 100 %

            špatnédobré        

    Nástroje: Tisk bez diskuse

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    Komentáře

    Vložit další komentář

    10.2.2010 01:04 osvc1
    Rozbalit Rozbalit vše Re: WinStrom Sync a komunikace s internetovými obchody
    v tech prikladech jsem videl sql-dotazy (select, update, insert). Je to tak, ze tyto dotazy se aplikuji na skutecnou databazi winstromu?
    10.2.2010 06:51 Ferš | skóre: 11 | Plzeň
    Rozbalit Rozbalit vše Re: WinStrom Sync a komunikace s internetovými obchody
    Dobrý den,

    kdepak. Tyto dotazy se aplikují na skutečnou databázi internetového obchodu. Pokud chcete podobný přístup k WinStromu, použijte XML soubory (podstata protokolu WinStrom Sync) a případně i REST API - tak lze provést např. insert, update, delete. A současně si to zachovává logiku systému - stačí uvádět jen ta data, kterým "rozumíte" a které Váš systém zpracovává. Zbytek doplní podle zaúčtovacích pravidel WinStrom.

    S pozdravem

    Petr Ferschmann
    FlexiBee - internetový ekonomický systém i pro Linux
    10.2.2010 11:43 osvc1
    Rozbalit Rozbalit vše Re: WinStrom Sync a komunikace s internetovými obchody
    dekuji za odpoved. Ony clanky pana Jelinka jsou takove 'hutne' a v jednu v noci uz jsem nemel sil to projit do hloubky. Ale kdyz uz jste tady:

    i v jinych clancich od Vas i zde u pana Jelinka by mi vyhovovalo, kdyby se cela problematika dala na zacatku znazornit nejak graficky. Nejake ty visio-obrazky .. zde je e-shop, tady db-e-shopu - tady db-winstromu , proste nejak tak 'pro blbe', jak to najde clovek v kazde americke knizce.
    11.2.2010 11:51 Cyberfood | skóre: 4 | Košice
    Rozbalit Rozbalit vše Re: WinStrom Sync a komunikace s internetovými obchody
    existuje i nieco pre priamu spolupracu s e-shop pluginom virtuemart pre joomlu?
    12.2.2010 18:35 Ferš | skóre: 11 | Plzeň
    Rozbalit Rozbalit vše Re: WinStrom Sync a komunikace s internetovými obchody
    Dobrý den,

    podporu postupně rozšiřujeme. V tuto chvíli přímo podporujeme ZenCart a OSCommerce. Připravujeme Magento.

    Nicméně implementace konektoru je poměrně jednoduchá (o tom je i tento článek) a tak si jej můžete naimplementovat.

    S pozdravem

    Petr Ferschmann
    FlexiBee - internetový ekonomický systém i pro Linux
    13.2.2010 18:09 Jiří Veselský | skóre: 30 | blog: Jirkovo | Ostrava
    Rozbalit Rozbalit vše Re: WinStrom Sync a komunikace s internetovými obchody

    Nebylo by prosím možné reklamní články označovat jako reklamní články?

    Obvykle nemám ve zvyku se nad podobnými malichernostmi pozastavovat, ale toto je tak exemplární manipulace, že se mně to skutečně nelíbí...

    15.2.2010 10:10 Karel
    Rozbalit Rozbalit vše Re: WinStrom Sync a komunikace s internetovými obchody
    Souhlasím.

    Přitom je to úplně zbytečné – všechno lze zvládnout z prostředí ekonomického softwaru (případně naopak některé věci provádět v obchodě), pohodlně, bez duplicitních činností a bez rizika, že se data v e-shopu budou lišit od dat v účetnictví.

    Přeloženo: "Nemáte zajištěnou kvalitní výměnu dat mezi eshopem a svým ERP? Pořiďte si WinStrom!".
    15.2.2010 20:05 osvc1
    Rozbalit Rozbalit vše Re: WinStrom Sync a komunikace s internetovými obchody
    ...Nemáte zajištěnou kvalitní výměnu dat mezi eshopem a svým ERP? Pořiďte si WinStrom! ...

    to by byla samozrejme ta nejvetsi pitomina co by mohl uzivatel udelat, ovsem velmi rozsirena, to priznavam.

    K te reklamne: kdyz se podivam, kolik prispevku je u tech technickych clanku a kolik u komixu a jinych blbosti, tak se vlastne divim, ze to sem winstrom tlaci. A nejen zde, podobny fenomen je mozno pozorovat i na rootu. Proto bych rekl, ze to nema cenu se nad tim pozastavovat. Jsem presvedcen, ze podobnou fintu (ze reklamni clanek napise pro firmu pan Jelinek) uzna abc i jinym firmam a ze jim zrovna tak nebude nic uctovat za reklamni plochu.

    Založit nové vláknoNahoru

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.