2012. augusztus 31., péntek

Termékképek automatikus feltöltése VirtueMart webáruházba

Előző bejegyzésem arról szólt, hogy hogyan is sikerült a számlázó-készletnyilvántartó programot egy kis trükközéssel összekötni a webáruházzal.

Most következik a folytatás, ugyanis ezzel nincs vége a történetnek, elvégre mit ér egy webáruház termékképek nélkül.

Ugye a problémát az okozta, hogy nagy mennyiségű terméket kellett feltölteni, ami kézzel igen csak sokáig tartana. Képekből viszont még több van, ugyanis egy-egy termékhez az esetek többségében több képet is szeretnénk feltölteni.

Ennek a megoldására egy újabb windows program és egy újabb webservice készült, amelyek segítségével leegyszerűsödik és felgyorsul a képek beillesztése a webáruházba.

No nem kell egy gombnyomásos varázslatra gondolni, az előkészítő munka itt is az emberre hárul. A képeket szét kell válogatni és egy megfelelő könyvtár struktúrában elhelyezni, vagyis a cikkszámot viselő könyvtárba belemásolni a termék képeit. De ez nem annyira megterhelő, hiszen a képeket amúgy is szét kellene válogatni termékenként, ha eleve nem így volnának. A program pedig ezeket a könyvtárakat végigjárva a képeket elküldi a webservice-nak, amely szépen a megfelelő termékhez párosítja azokat.

Felmerül a kérdés, hogy ennek mi haszna, hiszen a termékek képeit fel lehet tölteni egyesével is, és ha már úgyis hozzányúlunk, hogy szétválogassuk őket, akkor akár egyúttal fel is tölthetjük a termék adatlapra.
És valóban.
Csakhogy a VirtueMart termékeinek kezelése egyáltalán nem kényelmes és gyors, így egy termékhez feltölteni akár csak három képet sokkal tovább tart, mint a saját gépünkön például Total Commander segítségével szeparálni azokat.
Több ezer termék esetén pedig ez a művelet egyenesen rémálom.

Mindezek ellenére a megoldásnak gyakorlati haszna valóban csak akkor van, ha egyszerre kell sok képpel dolgoznunk, például amikor indítjuk a webáruházat és feltöltjük termékekkel. Később, amikor csak egy-egy újabb termékünk van, ahhoz a képeket természetesen nem megterhelő kézzel feltölteni.

2012. augusztus 29., szerda

VirtueMart és számlázó

A minap kaptam egy érdekes feladatot, amely arról szólt, hogy a népszerű Joomla! és VirtueMart alapokon nyugvó webshopot kellett egy számlázó-készletnyilvántartó programmal egybe gyúrni. A számlázó programot direkt nem említem név szerint, ugyanis ez nem a reklám helye.

A feladat kezdetben egyszerűnek tűnt, ugyanis a számlázó elméletileg tud kommunikálni webshoppal, olyan módon, hogy egy megadott URL-re HTTP POST metódussal feltölt egy XML file-t. Ezt a tulajdonságot kihasználva elkészült a termék feltöltés és frissítés első változata, ami tökéletesen működött is az én teszt programomban lévő 18 darab termékkel. De élesben több mint 3000 terméket kellett feltölteni, amivel a számlázó program sajnos nem boldogult. Egyszerűen megjelent a homokóra (valójában karika, mert win7-ről beszélünk) és nem történt semmi, majd ezt kb 30 perc múlva meguntam, szíves elnézését kértem az ügyfélnek, és elvonultam újra dolgozni.

Gyanakodtam a webszerver nem megfelelő beállítására, de amint a logokból kiderült, a kérés hozzá már el sem jutott, valószínűleg már a számlázó program nem tudott mit kezdeni egy kb 5 MB-os HTTP POST összerakásával.

Szerencsére a számlázóban nem csak ilyen formán van lehetőség az adatokat kinyerni, hanem lementhetjük helyi lemezre is XML formában. Ez volt a következő megoldás alapja. A webszerveren el kellett készítenem a bedolgozó automatizmus SOAP webservice változatát, amely a terméket létrehozza a VirtueMart adatbázisában, illetve ha már létezik, akkor frissíti az adatait, pl árat vagy raktárkészletet, ugyanis a számlázó programból állíthatnak ki számlát a webshoptól függetlenül is, ami ugyanúgy fogyasztja a készletet, illetve lehet egy áremelés, aminek szintén meg kell jelennie a webshopban.

Ezután el kellett készítenem egy windows programot, amely beolvassa az XML-t és elküldi a webservice-nak. Így sajnos a termékek kommunikációja egy lépéssel több lett az eredetileg tervezettnél, de még mindig lényegesen kényelmesebb, mint kézzel létrehozni minden egyes terméket a VirtueMart-ban is.

Ezzel a technikával a termékek kb 30-40 másodperc alatt felkerültek a webshopba és szépen meg is jelentek.

A vissza felé irányuló kommunikáció már nem volt ennyire macerás, elvégre nincs több ezer megrendelés két kommunikáció között, és így a számlázó a hagyományos módon be tudja olvasni a megrendeléseket, vagyis egy URL-ről, ami XML formában a kimenetre küldi azokat.
Ennek ellenére nem tartom ezt egy jó megoldásnak, hiszen a webszerveren kell megoldani, hogy azokat a megrendeléseket amiket már a számlázó beolvasott ne jelenítsük meg neki a következő kommunikációkor.
Így amit a kimenetre küldtünk egyszer azt már még egyszer nem szabad, ezzel csak annyi a gond, hogy nem ellenőrizhető, hogy azt a számlázó valóban feldolgozta, csak remélhetjük. Bár eddig nem volt hiba, reméljük nem is lesz, de jobban örülnék, ha ezt is meg lehetne oldani webservice alapon.

Az írással arra akartam rámutatni, hogy nem feltétlen kell drága szoftvereket és eszközöket venni ahhoz, hogy az embernek legyen egy integrált rendszere, ahol nincs felesleges dupla vagy akár tripla adminisztráció.
Megfelelő körültekintéssel viszonylag kis költséggel is megoldható az amit mondjuk egy SAP tud.

Éljen a Joomla!, VirtueMart és számlázó együttműködés! :)