spec:xml_pelda_rendeles_cikktorzsbol
Tartalomjegyzék
XML alapú rendelés cikktörzsből
Kapcsolat felvétele a szerverrel: bejelentkezés és funkció választás
Első lepésben jelentkezzünk be a szerverre, és kezdeményezzük a kívánt funkciót.
Tennivalok:
- Szerver URL megszerzés ($url változó) :)
- Adatok összeállítása amivel bejelentkezünk, (token,lang kulcsok a $fields tömbben)
- Funkciók kiválasztása, és paraméterek megadása (dok, tetel_mezok kulcsok a $fields tömbben)
- Adatok továbbítása a szerver felé (példában: esystem_xml_communication függvény)
A szerver fele először küldendő adatok
| Kulcs | Lehetséges érteké/példa alapján | típusa | Leírás | ||||
| dok | rendeles_xml_felulet | szöveg | Jelen esetben a kívánt funkció a dok kulcs rendeles_xml_felulet | ||||
| token | szöveg | Egy userhez tartozó tokent jelenti | |||||
| lang | HU | szöveg | A rendszer nyelve | ||||
| tetel_mezok | 2 | szám | A rendelésen szereplő tételek száma, ennyi tétel sablont fog a rendszer a válasz XML-be generálni. Ez a folyamat közben változtatható |
Példa:
http://.../cgi-bin/index.cgi?xml''<?xml version''"1.0" encoding''"UTF-8"?> <esystem><click><data><record><field><name>dok</name><value>rendeles_xml_felulet</value></field> <field><name>token</name><value>Ez a token helye</value></field><field><name>lang</name><value>HU</value></field> <field><name>tetel_mezok</name><value>2</value></field></record></data></click></esystem>
A szervertől kapott válasz az elérhető műveletekről (choice ok)
<?xml version''"1.0" encoding''"UTF-8"?>
<esystem>
<frame>
<framename>main</framename>
<choice>
<choicename>form</choicename>
<click>
<session>
<record>
...
<field>
<name>formb</name>
<value>rendeles_xml_felulet</value>
</field>
</record>
</session>
<data>
<record>
<field>
<name>partner_id</name>
<value></value>
<metadata>
<type>num</type>
<human>
<help>Partner ID</help>
<label>Partner ID</label>
</human>
</metadata>
</field>
<field>
<name>tetel_mezok</name>
<value>2</value>
<metadata>
<type>hidden</type>
</metadata>
</field>
.....
<field>
<name>tetel_megj_2</name>
<value></value>
<metadata>
<type>text</type>
<human>
<label>Tetel netto</label>
</human>
</metadata>
</field>
<field>
<name>button</name>
<value></value>
<metadata>
<type>submit</type>
<check>
<options>b_felvesz</options>
<options>b_eldob</options>
</check>
</metadata>
</field>
</record>
</data>
</click>
</choice>
<choice>
<choicename>back</choicename>
...
</choice>
<choice>
<choicename>DEV_Frissít</choicename>
<click>
...
</click>
</choice>
<info_message>
</info_message>
</frame>
</esystem>
Művelet (choice) kiválasztása és adatok kitöltése, majd az XML visszaküldése a szervernek
Tennivalók
- Válasszuk ki a megfelelő choice-t (példában: esystem_catch_choice_click függvény)
- Töltsük ki a megfelelő mezőket (példában: esystem_change_field_value függvény)
- XML féltöltése az oldalra (példában: esystem_xml_send_text )
Mezők a adatok kitöltéséhez
| Kulcs | típus | Leírás | |||
| oid | num | nem használt mező, értekét nem kell változtatni | |||
| partner_id | szám | A partner id-je akihez a rendelés tartozik | |||
| szallitasi_hatarido | dátum | ||||
| rendelesi_hivatkozas | szöveg | ||||
| megjegyzes | szöveg | A rendelés megjegyzés mezője | |||
| tetel_mezok | szám | a rendelés tételeinek a száma | |||
| tetel_tipusa_$i | szöveg(termék/szolgáltatás) | a tétel típusa | |||
| tetel_cikkszam_$i | szöveg | tétetel cikkszáma | |||
| tetel_menny_$i | szám | ||||
| tetel_netto_$i | szám | ||||
| tetel_megj_$i | szöveg | ||||
a $i valtozo [1..tetel_mezok] intervallum elemeit veszi fel. …
A szerver fele küldendő XML
<?xml version''"1.0" encoding''"UTF-8"?><esystem>
<click>
......
<data>
<record>
<field>
<name>oid</name>
<value></value>
<metadata>
<type>hidden</type>
<human>
<help>oid</help>
<label>oid</label>
</human>
</metadata>
</field>
<field>
<name>partner_id</name>
<value>1</value>
<metadata>
<type>num</type>
<human>
<help>Partner ID</help>
<label>Partner ID</label>
</human>
</metadata>
</field>
......
<field>
<name>tetel_mezok</name>
<value>2</value>
<metadata>
<type>hidden</type>
</metadata>
</field>
<field>
<name>tetel_tipusa_1</name>
<value>termék</value>
<metadata>
<type>select</type>
<check>
<options></options>
<options>szolgáltatás</options>
</check>
<human>
<label>Tetel tipus</label>
</human>
</metadata>
</field>
<field>
<name>tetel_cikkszam_1</name>
<value>termek1</value>
<metadata>
<type>text</type>
<human>
<label>Tetel cikkszáma</label>
</human>
</metadata>
</field>
<field>
<name>tetel_menny_1</name>
<value>3</value>
<metadata>
<type>num</type>
<human>
<label>Tetel menny</label>
</human>
</metadata>
</field>
<field>
<name>tetel_netto_1</name>
<value>300</value>
<metadata>
<type>num</type>
<human>
<label>Tetel netto</label>
</human>
</metadata>
</field>
<field>
<name>tetel_megj_1</name>
<value>megj1</value>
<metadata>
<type>text</type>
<human>
<label>Tetel netto</label>
</human>
</metadata>
</field>
......
<field>
<name>button</name>
<value>b_felvesz</value>
<metadata>
<type>submit</type>
<check>
<options>b_felvesz</options>
<options>b_eldob</options>
</check>
</metadata>
</field>
</record>
</data>
</click></esystem>
A szervertol kapott valasz ertelmezes
Tennivalók
- A szerver a <info_message> XML blokkban add információt a művelet sikerességéről vagy a sikertelenséget okozó hibákról
- Sikeres rögzítés eseten „Rendelés rögzítve” message tájékoztat a történtekről. A form choce-ban kapunk egy új rendelés rögzítés XML-t
- Sikertelen esetben a messagebe megjelenik a hibazenet.
- Igény eseten a sikeres rögzítés után a rendelés PDF-et is megkaphatja a kliens.
A szerver felől kapott válasz, sikeres rögzítés eseten
<?xml version''"1.0" encoding''"UTF-8"?>
<esystem>
<frame>
<framename>main</framename>
<choice>
<choicename>form</choicename>
<click>
....
</click>
</choice>
....
<info_message>
<msg>
<level>Info</level>
<time>2011.03.30 13:54:02</time>
<message>Rendelés rögzítve</message>
</msg>
</info_message>
</frame>
</esystem>
Példa php kód
A példa kód feltételezi a termek1 cikszámú terméket és a szolg1 cikkszámú szolgáltatás meglétét.
- rendeles_cikktorzsbol.php
<?php ini_set("error_reporting",E_ALL); function esystem_catch_choice_click ($text,$choice_name){ if (preg_match("/<choice>\s*<choicename>$choice_name<\/choicename>(\s*<click>.*?<\/click>)\s*<\/choice>/s", "$text", $matches)) { return $matches[1]; } else { die ('nem talalom a choice-t'); } }; function esystem_change_field_value ($text,$field_name,$value){//TODO:fel van tetelezve, hogy elol van a name, es utanna a value! $count = 0; $new_text = preg_replace("/(<field>.*?<name>$field_name<\/name>.*?<value>).*?(<\/value>.*?<\/field>)/s",'${1}'.$value.'${2}', $text,'-1',$count); if ($count == 1) { return $new_text; } else { die ('talalatok szam('.$count.') != 1 a fieldet:'.$field_name); } }; function esystem_xml_communication ($url,$fields) { $head = urlencode('<?xml version="1.0" encoding="UTF-8"?><esystem><click><data><record>'); $tail = urlencode('</record></data></click></esystem>'); $head_nc = '<?xml version="1.0" encoding="UTF-8"?><esystem><click><data><record>'; $tail_nc = '</record></data></click></esystem>'; print "A server fele kuldeno adatok:\n"; var_dump($fields); $text = $head; $text_nc = $head_nc; foreach($fields as $key=>$value) { $text.='<field><name>'.urlencode($key).'</name><value>'.urlencode($value).'</value></field>'; $text_nc.='<field><name>'.$key.'</name><value>'.$value.'</value></field>'; } $text .= $tail; $text_nc .= $tail_nc; print "\nA server fele kuldott get keres (url encodolatlanul):\n".$url.'?xml='.$text_nc."\n\n"; $contents = file_get_contents($url.'?xml='.$text); print "\nA server felol kapott valasz\n".$contents."\n\n"; return $contents; } function esystem_xml_send_text ($url,$text) { $head = '<?xml version="1.0" encoding="UTF-8"?><esystem>'; $tail = '</esystem>'; $text = $head.$text.$tail; print "A server fele xml kuldes: ".$text."\n\n"; # print "send:\n".$text."\n\n\n"; $postdata = http_build_query( array( 'xml' => $text, ) ); $opts = array('http' => array( 'method' => 'POST', 'header' => 'Content-type: application/x-www-form-urlencoded', 'content' => $postdata ) ); $context = stream_context_create($opts); $result = file_get_contents($url, false, $context); print "\nA server felol kapott valasz:\n".$result."\n\n"; return $result; } $url = 'http://.../cgi-bin/index.cgi'; $fields = array( 'dok'=>'rendeles_xml_felulet', 'token'=>'A token helye', 'lang'=>'HU', 'tetel_mezok'=>'2', ); $result = esystem_xml_communication($url,$fields); # print $result; $click = esystem_catch_choice_click($result,'form'); $click = esystem_change_field_value($click,'partner_id',1); $click = esystem_change_field_value($click,'szallitasi_hatarido','2010-01-02'); $click = esystem_change_field_value($click,'rendelesi_hivatkozas','renles0001'); $click = esystem_change_field_value($click,'megjegyzes','XML test'); $click = esystem_change_field_value($click,'tetel_mezok','2'); $click = esystem_change_field_value($click,'tetel_tipusa_1','termék'); $click = esystem_change_field_value($click,'tetel_cikkszam_1','termek1'); $click = esystem_change_field_value($click,'tetel_menny_1','3'); $click = esystem_change_field_value($click,'tetel_netto_1','300'); $click = esystem_change_field_value($click,'tetel_megj_1','megj1'); $click = esystem_change_field_value($click,'tetel_tipusa_2','szolgáltatás'); $click = esystem_change_field_value($click,'tetel_cikkszam_2','szolg1'); $click = esystem_change_field_value($click,'tetel_menny_2','4'); $click = esystem_change_field_value($click,'tetel_netto_2','500'); $click = esystem_change_field_value($click,'tetel_megj_2','tetel megj'); $click = esystem_change_field_value($click,'button','b_felvesz'); $result = esystem_xml_send_text($url,$click); # print $result; ?>
– Main.SzaboAmbrus - 2011-03-30
spec/xml_pelda_rendeles_cikktorzsbol.txt · Utolsó módosítás: szerkesztette: royal
