Sisujuht

Directo XML datu apmaiņas apraksts

Vispārīga informācija

Jebkurai Directo DB ir iespējams konfigurēt datu apmaiņu, kas ļauj nodrošināt abpusēju datu plūsmu. Ir svarīgi ņemt vērā, ka datu apmaiņas saskarne nav standartizēta, bet tiek pielāgota katram gadījumam individuāli, lai atbilstu darba uzdevumā izvirzītajām prasībām.
Datu apmaiņas uzstādīšana ir saistīta ar ikmēneša abonēšanas maksu par xml moduli un izstrādes izmaksām, kas ir atkarīgas no uzdevuma sarežģītības, tāpēc ir vēlams savlaicīgi sazināties ar Directo pārstāvjiem, lai precizētu projekta izmaksas.

Neatkarīgi no projekta specifikas, ir daži principi, kas visos gadījumos ir vienādi:

Piemēri

Dotie piemēri ir veidoti tikai datu apmaiņas pamatprincipu demonstrācijai!

Datu iegūšana no Directo

GET pieprasījumam vienmēr ir vismaz trīs parametri:

Iespējamie datu tipi, derīgas atslēgas un pārējie parametri tiek noteikti katram uzdevumam individuāli.

Praktisks piemērs - artikulu izvade

Tāda veida izvadi bieži izmanto interneta veikali, piemēram, lai noskaidrotu pieejamos produktus un to atlikumus Directo noliktavā.

Piemērā lietotie URL ir tikai ilustratīvi un pat, ja šāds pieprasījums var rezultēties ar datu iegūšanu, dati ir fiktīvi un nav saistīti ar kāda klienta reālajiem datiem!

Šajā piemērā izmantosim parametru what=item un atslēgu 20DAF3F822B782AF12D1198C23F45604
Ar artikulu xsd shēmu var iepazīties šeit: ws_artiklid.xsd

Informācijas par visiem artikuliem pieprasījums: https://directo.gate.ee/xmlcore/demo_ee/xmlcore.asp?get=1&what=item&key=20DAF3F822B782AF12D1198C23F45604

Lai iegūtu informāciju par kādu konkrētu artikulu, piemēram, pēc artikula koda, mēs norādām papildus parametru code=0000 un tagad pieprasījums izskatīsies šādi: https://directo.gate.ee/xmlcore/demo_ee/xmlcore.asp?get=1&what=item&code=0000&key=20DAF3F822B782AF12D1198C23F45604

Datu nosūtīšana uz Directo

Datus sūta, izmantojot POST metodi un norādot vismaz trīs parametrus:

Praktisks piemērs - pārdošanas rēķina ievade

Šāda tipa ievade, piemēram, var tikt izmantota, lai replicētu kādu ārējās pārdošanas sistēmas rēķinu Directo.

Piemērā izmantotā adrese un xml saturs ir fiktīvi un nav izmantojami testēšanai, tā vienmēr ir jāveic reālajā konfigurācijā!

Pieņemsim, ka datu apmaiņas URL ir: https://directo.gate.ee/xmlcore/this_is_the_worlds_greatest_company/xmlcore.asp

Un datu struktūra ir šāda: xml_in_arved.xsd

Piemēram, xml var izskatīties šādi (ne visi iespējamie atribūti ir izmantoti):

<?xml version="1.0" encoding="utf-8"?>
<invoices>
  <invoice AppKey="1234567879012345678790" InvoiceNr="123" 
	InvoiceDate="2015-06-07" CustomerCode="CUST001">
    <lines>
      <line ProductID="KILLERPRODUCT" Quantity="3" UnitPriceWoVAT="123.45"/>
      <line ProductID="FREESAMPLE" Quantity="1" UnitPriceWoVAT="0.00"/>
    </lines>
  </invoice>
</invoices>

Pieņemsim, ka datu ievietošana ir noritējusi veiksmīgi un atbilde ir šāds sinhronais xml:

<?xml version="1.0" encoding="UTF-8" ?> 
<results>
  <Result Type="0" Desc="OK" docid="123" doctype="INVOICE" submit="Invoices" /> 
</results>

Ja Result elementa Type atribūts nav vienāds ar 0, tad ir notikusi kāda kļūda un šādā gadījumā Desc parādīsies precizējoša informācija.

Piemēram, ja rēķins ar šādu numuru jau eksistē, tad atbildes ziņojums var būt šāds:

<?xml version="1.0" encoding="UTF-8" ?> 
 <results>
   <Result Type="1" Desc="Duplicate" docid="123" doctype="INVOICE" submit="Invoices" /> 
 </results> 

Bet ja vienā sūtījumā būtu bijuši vairāki rēķini:

<?xml version="1.0" encoding="UTF-8" ?> 
<results>
  <Result Type="1" Desc="Duplicate" docid="123" doctype="INVOICE" submit="Invoices" /> 
  <Result Type="0" Desc="OK" docid="124" doctype="INVOICE" submit="Invoices" /> 
</results>

Atbildes ziņojuma apstrāde ir būtiska, ja nav saņemts apstiprinājums par veiksmīgu datu ielādi, tad dati nav ievietoti un ir jāveic atkārtots mēģinājums, bet ne ātrāk kā pēc 60s.

PHP piemēri

Datu izvade

$url = 'https://directo.gate.ee/xmlcore/demo_ee/xmlcore.asp?get=1&what=item&key=20DAF3F822B782AF12D1198C23F45604';
 
$ch = curl_init();
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_URL, $url );
curl_setopt($ch, CURLOPT_POST, 0);
 
$result = curl_exec($ch);
 
header('Content-Type: text/html; charset=utf-8');
 
print '<textarea cols=80 rows=10>' . $result . '</textarea>';
 
$data = new SimpleXMLElement($result);
 
print '<pre>';
 
foreach ($data->items->item as $item) {
	print $item['Code'] . chr(9) .  '<b>' . $item['Name'] . '</b>' . chr(9) .  $item['Class'] . '<br>';
	foreach ($item->datafields->data as $df ) {
		print chr(9) . $df['code'] . ':' . $df['content'] . '<br>';
	}
}

Datu ievade

$xmldata = '<'.'?xml version="1.0" encoding="UTF-8" ?>
<invoice AppKey="1234567879012345678790" InvoiceNr="123" 
	InvoiceDate="2015-06-07" CustomerCode="CUST001">
    <lines>
      <line ProductID="KILLERPRODUCT" Quantity="3" UnitPriceWoVAT="123.45"/>
      <line ProductID="FREESAMPLE" Quantity="1" UnitPriceWoVAT="0.00"/>
    </lines>
</invoice>';
 
$url = 'https://directo.gate.ee/xmlcore/this_is_the_worlds_greatest_company/xmlcore.asp';
 
$ch = curl_init();
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_URL, $url );
curl_setopt($ch, CURLOPT_POST, 1);
 
curl_setopt($ch, CURLOPT_POSTFIELDS, 'xmldata='.urlencode($xmldata).'&put=1&what=invoice' ); 
$result = curl_exec($ch);
 
print '<textarea cols=80 rows=10>' . $result . '</textarea>';
 
curl_close($ch);

Directo integrācija ar GNS