18-05-2024 14:03 | |
A raktárkészlet változásaHa a webáruház úgy lett beállÃtva, a rendszer lenyomatot készÃt minden változásról, ami a termékek mennyiségében történik. Ehhez az is szükséges, hogy a mennyiségeket nyilvántartsuk (egyébként ez nem kötelezÅ‘), tehát minden új termékhez Ãrjuk be a kezdÅ‘ darabszámot. Rendeléskor minden termékhez külön adatbázistáblában eltárolódik, milyen differencia lépett föl a termék mennyiségében. UgyanÃgy új termék felvitelekor (ha megadunk mennyiséget), termék módosÃtásakor (ha változtatunk a mennyiségen) és a termék törlésekor (ha volt megadva mennyiség) is kerül egy bejegyzés a változási naplóba. Ezen kÃvül az adatfogadó service-en keresztül is módosulhatnak a mennyiségek. A rendszer eltárolja az adott termék azonosÃtási adatait (rekordazonosÃtó, cikkszám, rendelésnél egyedi attribútumok), az idÅ‘pontot, hogy milyen módon került tárolásra, valamint bizonyos esetben megjegyzéseket és egyéb adatokat. Az adatok kiolvasására az adatlekérdezési service-en keresztül van lehetÅ‘ség. Az adatfogadó és -lekérdezÅ‘ interfész együtt – megfelelÅ‘ körültekintés mellett – lehetÅ‘vé teszi a raktárkészlet szinkronizálását más rendszerekkel, de használható például távoli naplózásra vagy módosÃtások ütemezésére is. Az adatfogadó serviceAz adatokat egy PHP program fogadja http protokollon keresztül (a cÃmet és a jelszót a funkció beillesztésekor adjuk meg Önnek). Mind a fogadott, mind a válaszként küldött üzenetek XML formátumúak. A service használatához egyedi jelszót állÃtunk be, melyet GET vagy POST paraméterként 'password' néven kell küldeni. Az adatokat az alábbi XML-struktúrában kell küldeni: <commands> <diff value="+2" negative="0" item_id="3" item_pnumber="A" /> <diff value="-4" negative="0" item_id="4" item_pnumber="B" /> <diff value="-1" negative="1" item_id="6" item_pnumber="C" /> </commands> Megjegyzés: az XML-ek fejléce mindig: <?xml version="1.0" encoding="UTF-8"?> – ezt a példákban külön nem fogjuk kiÃrni. A gyökérelem neve commands, ebben foglalnak helyet a módosÃtásra vonatkozó parancsok gyermekelemként. Jelenleg egyetlen parancs implementált: ennek neve diff. A diff cÃmkében kötelezÅ‘en megadandó a változás mértéke (value) és valamelyik azonosÃtó adat: item_id – a rekordazonosÃtó, item_pnumber – a cikkszám. Ha mindkettÅ‘ szerepel, az item_id lesz figyelembe véve. Opcionálisan megadható a negative paraméter is (alapértelmezett értéke 0). Ezzel szabályozható, hogy a mennyiség negatÃv értékké válhat-e. Ha egy termék mennyisége 2, és a value -3, akkor alapértelmezetten az új mennyiség 0 lesz, a differencia pedig -2. Ha viszont a negative be van kapcsolva, az eredmény -1, a differencia pedig -3 lesz. PozitÃv értékeknél a '+' jel opcionális. A válasz-XML-ben minden küldött parancsról nyugtázást kapunk. Legyen a lekérés a következÅ‘: <commands> <diff value="-2" negative="0" item_id="3" item_pnumber="A" /> <diff value="-4" negative="0" item_pnumber="B" comment="megjegyzés..." /> <diff value="-1" negative="1" /> <diff value="-1" negative="1" item_id="103" /> </commands> Ekkor a válasz-XML például Ãgy nézhet ki: <data> <responses> <response command="diff" item_id="3" state="none" message="No operation!"/> <response command="diff" state="success" item_id="4" item_pnumber="A" item_amount="0"/> <response command="diff" state="success" item_id="6" item_pnumber="B" item_amount="4"/> <response command="diff" item_id="103" state="error" message="Item not found!"/> </responses> </data> Látható, hogy a data gyökérelem gyermek eleme a responses tag, és ebben vannak a response tag-ek, melyek a válaszinformációkat tartalmazzák. Minden küldött parancshoz egy response tartozik. A command mezÅ‘ értéke jelen esetben mindig 'diff'. Az item_id és item_pnumber adják a termék azonosÃtó adatait. Ha a termék nem található, csak az jelenik meg, amit a lekérésben megadtunk. A state paraméter jelzi, hogy sikeres volt a művelet. Három lehetséges értéke van:
Az 'error' tipikusan akkor keletkezik, ha a termék nem található. A 'none' állapot akkor jön létre, ha a termék darabszáma 0 (esetleg negatÃv), és a negative attribútum nem volt bekapcsolva, illetve ha kifejezetten 0 szerepelt a value-nál. A comment attribútummal megjegyzést adhatunk a művelethez. Az adatlekérdezési serviceAdatlekérdezésnél nem XML-t kell küldeni, hanem http query-n keresztül adhatók meg a paraméterek. Az alapcÃmzésen kÃvül a GET és a POST adatok egyenértékűek, tehát mindegy, melyik csatornát használjuk. A program csak ezt a két csatornát használja. Azonos változók esetén a POST felülÃrja a GET-et. A használható paraméterek:
Ha az aggregate nincs beállÃtva, normál lekérdezés fut le. Az elsÅ‘ hat paraméter használatával ÉS jellegű szűkÃtést adhatunk meg. Mind a hat paraméter külön-külön opcionális. Ha starttime és enddimte is meg van adva, az endttime-nak késÅ‘bbinek kell lennie. A dátumoknál érvényes dátumot kell megadni (pl. „2011-01-01 10:00:00â€), az item_id és typeobj_id paramétereknek pedig egész számnak kell lenniük. Az eredménylista rendezése mindig a tranzakcióhoz rendelt azonosÃtó alapján történik, ez egyúttal idÅ‘rendi sorrendet is jelent. Az eredmény alapesetben az alábbihoz lesz hasonló: <data aggregated="0" error="0" count="3"> <item trans_id="23" trans_time="2011-01-01 10:30:02" trans_type="admin" typeobj_id="5" item_id="65" item_pnumber="F" trans_diff="2" item_amount="10" trans_attributes="" trans_comment="Megjegyzés"/> <item trans_id="34" trans_time="2011-01-01 14:24:33" trans_type="order" typeobj_id="123" item_id="71" item_pnumber="G" trans_diff="1" item_amount="13" trans_attributes="" trans_comment=""/> <item trans_id="57" trans_time="2011-01-03 17:29:02" trans_type="service" typeobj_id="0" item_id="71" item_pnumber="G" trans_diff="-1" item_amount="12" trans_attributes="" trans_comment=""/> </data> A data gyökérelem tájékoztat arról, hogy nem aggregált lekérdezésrÅ‘l van szó, nincs hiba, és hogy az eredményhalmazban 3 találat van. A találatok a közvetlenül az eltárolt módosÃtások kivonatai, egy termék többször is elÅ‘fordulhat. A paraméterek jelentése:
Ha az aggregate paramétert használjuk, a lekérdezési folyamat megváltozik, és a találatok csoportosÃtásra kerülnek. Az aggregate a következÅ‘ értékeket veheti föl: 'item_id' – csoportosÃtás a termékazonosÃtó szerint 'item_pnumber' – csoportosÃtás a cikkszám szerint 'trans_type' – csoportosÃtás a tranzakció tÃpusa szerint 'typeobj_id' – csoportosÃtás a referencia-azonosÃtó (és -tÃpus) szerint 'month' – havi bontás 'all' – teljes összesÃtés Ha az aggregate értéke 'item_id' vagy 'item_pnumber', akkor termékenként csoportosÃtunk (és egy termék egyszer jelenik meg). Ekkor lehetÅ‘vé a get_last_amount paraméter használata. Ha ezt 1-re állÃtjuk (engedélyezzük), minden item tag-be be kerül a last_amount attribútum. Ez pontosan azt adja meg, hogy a csoportosÃtott találaton belül az utolsó tranzakció után mi volt a termék mennyisége. Ha az aggregate értéke 'month', a találatok havi bontásba lesznek csoportosÃtva. Értelemszerűen csak azok a hónapok fognak szerepelni, amelyekben van találat. Ekkor a sorok egy year és egy month attribútumot kapnak, bennük az adott évvel illetve hónappal (mint egész számmal). Ha az aggregate értéke 'all', az eredmény egyetlen sor lesz, ami a teljes összesÃtés tartalmazza (ha nincs találat, nem jelenik meg ez a sor). Egy csoportosÃtott lekérdezés eredménye például Ãgy nézhet ki: <data aggregated="1" aggr_as="item_id" error="0" count="4"> <item item_id="3" last_amount="38" diff="2" count="1" firsttime="2011-09-13 12:01:37" lasttime="2011-09-13 12:01:37"/> <item item_id="4" last_amount="2" diff="-4" count="1" firsttime="2011-09-13 12:01:37" lasttime="2011-09-13 12:01:37"/> <item item_id="6" last_amount="5" diff="-1" count="1" firsttime="2011-09-13 12:01:37" lasttime="2011-09-13 12:01:37"/> <item item_id="214" last_amount="0" diff="0" count="3" firsttime="2011-09-08 18:46:41" lasttime="2011-09-08 19:05:17"/> </data> A data gyökérelemben látszik, hogy csoportosÃtott lekérdezés történt. Az aggr_as paraméter megmondja, milyen oszlopra történt a csoportosÃtás. A találatok elemeinek neve itt is item. Az elsÅ‘ paraméter az aggregált oszlop neve, itt item_id. Ha az aggregate értéke más lenne, itt az az attribútum szerepelne. A last_amount-nál az utolsó módosÃtás utáni mennyiséget látjuk. A diff most az elsÅ‘ módosulás elÅ‘tti és az utolsó módosulás utáni mennyiségek különbsége. A count megadja, hány érték lett csoportosÃtva a találatba. A firsttime a csoportban szereplÅ‘ elsÅ‘ tranzakció idÅ‘pontja, a lasttime az utolsóé (ha a count értéke 1, akkor a kettÅ‘ megegyezik). HibakezelésBármilyen hiba esetén kötött formátumú kimenet keletkezik. Az alábbi hibaüzenet akkor például keletkezik, ha rossz jelszót adtunk meg: <data error="1"> <error>Authentication failed!</error> </data> Itt a data blokk error paramétere '1', ami jelzi, hogy hiba történt. A gyermekelem neve error, a type paraméter jelzi a hiba tÃpusát, az elem tartalma pedig egy szöveges (angol nyelvű) leÃrást mellékel hozzá. Az adatfogadó service-nél a hiba tÃpusa 'authentication' vagy 'xml' lehet. Authentikációs hiba lép föl, ha a jelszó helytelen, vagy a funkció ki van kapcsolva. Az 'xml' hiba tipikus példája, amikor a küldött XML szintaktikai hibát tartalmaz. A lekérdezÅ‘ programnál jelenleg az alábbi hibatÃpusok léteznek:
Tippek
|
http://help.patronet.hu/eShop/transaction_logger |