/
Rest API kasutamine

Rest API kasutamine

TL;DR

  • Rest API, HTTPS, Basic Auth.

  • VĂ€ljundiks XML vĂ”i JSON (default: XML)

  • GET pĂ€ringutega töötavad filter, sort, range, updates_after ja vastuses soovitud vĂ€ljade loetelu.

  • POST ja PATCH meetodi andmeformaat on x-www-form-urlencoded

  • Kasutatavad kĂ”ik registrid, mis ka Standard Booksi klientprogrammis

  • Rest API kasutaja allub standardsele Kasutajagrupile.

  • Attachmente vĂ”ib GETiga Standard Booksist kĂŒsida, kuid neid ei saa lisada.

Seadistamine Standard Booksis

Alates versioonist 8.0 saab HansaWorldi toodetes kasutada Web API pÀringuid andmete pÀrimiseks ja kirjutamiseks.

Eeltingimused

Kliendil peab olemas olema moodul:

  • Standard ERP puhul - "Veebipood"

  • Standard Books puhul - "Veebipood ja CMS"

Veebipordid

Seadistatud peab olema veebi port. Veebiport on vÔimalik seadistada - moodul Tehnika > Programmiseadistus > Veebiport

Veebipordid programmis

Veebipordid on vajalikud, et oleks vĂ”imalik suhtlus ĂŒle HTTP vĂ”i HTTPS protokolli. Neid mitte sassi ajada Hansa pordiga, millega kĂ€ib suhtlus klientprogrammi ja serveri vahel.

Veebiporti saab muuta ilma programmi muud tööd segamata.

Tuleb veenduda ka selles, et kasutatav port on serveris avatud - tulemĂŒĂŒrid lubavad suhtlust vaid teatud portidel, kĂ”ik ei ole enamasti maailmale lahti.

Tuleb veenduda, et samas serveris ei ole kasutusele vÔetav port juba kasutusel.

NB: Excellent serveris paigaldab sertifikaadid Excellenti administaator. Kui soovite teha redirecti oma domeenilt, siis peate meile usaldama oma sertifikaadid (sh private key).

LigipÀÀs funktsioonidele veebist

Programmis sees. Moodul "Veebipood ja CMS"/“Veebipood“ seadistus LigipÀÀs funktsioonidele Veebist tuleb lisada rida (vĂ”i read) kĂ€sitsi selliselt:

Funktsioon: API

Avalik: Sisselogitud kasutaja

SSL: Jah

Sessioon: Ei

NĂ€ide, kus API seadistatud SSLiga:

VĂ€li Lubatud IP-d tuleb tĂ€ita, kui on soov lubada ainult konkreetsetel sĂŒsteemidel teha Rest-API pĂ€ringuid. Kui vĂ€ljale on vaja lisada mitu aadressi, siis tuleb need eraldada komaga. NĂ€ide: 90.191.43.252,213.35.184.82

Kasutajagrupid

Moodul Üldine > Seadistused > Kasutajagrupid

Kasutajagrupile tuleb lisada Ôigusi lubav rida toimingule Rest API

Moodul Üldine > Isikud - Kasutajal peab olema peal kasutajagrupp, millel on antud Ă”igus > Toiming Rest API > TĂ€is

  • Moodulitele, registritele ja seadistusele, mida soovite, et Rest API kasutaja peab saama lugeda (GET), peab olema antud vĂ€hemalt Vaata Ă”igus.

  • Kui soovite, et Rest API kasutajaga saaks andmeid ka kirjutada (POST) ja muuta (PATCH), peab olema antud vastava registri TĂ€ielik Ă”igus.

  • Kui Registri pihta, millele puudub TĂ€ielik Ă”igus tehakse andmete kirjutamise pĂ€ring, on vastus staatusega 200 kuid tĂŒhi.

Sisenemise paroolid tulevad Isiku kaardi Ôigustest.

On rangelt soovitatav kasutada MyStandardis valideeritud emaili sisse logimiseks. Uue isiku ja sealhulgas valideerimise juhend on siin: Kuidas lisada uut kasutajat?

Kasutajagrupil REST API

Valikulised vÔimalused

Moodul Üldine > Seadistused > Valikulised vĂ”imalused.

MÀrgitud peavad olema jÀrgnevad valikud:

  • Web Rest API

  • Allow Basic HTTP Authentication

Valikulised VÔimalused

Kasutamine

  • Lugeda saab kĂ”iki hansa registreid ja andme-blokke, sealhulgas HALiga tehtud registreid, seadistusi, muudatusi olemasolevatel kaartidel.

  • PĂ€ringuga on kasutatav otsimine ja filtreerimine (kĂ€itub nagu aruanne)

  • JĂ€tame meelde eelmise pĂ€ringu ja saame vĂ€ljastada vahepeal muutunud andmeid

  • Kasutajanimi, parool töötavad. Samuti kontrollitakse andmete lugemise Ă”igust kasutajagruppidest

  • Saab mÀÀrata vĂ€ljade nimekirja kaardil, mida vĂ€ljastada. NĂ€ide: varem oli ĂŒks ĂŒherealine mĂŒĂŒgiarve ca 350 XML rida pikk, siis nĂŒĂŒd saan lasta endale saata vaid nĂ€iteks 5 rida per arve.

URL’I kasutamine

Andmed pĂ€ritakse URLiga ehk inimkeeli - klient ĂŒtleb Hansa serverile aadressi, mille pĂ”hjal Hansa server vĂ€ljastab vastava info.

Element

Kirjeldus

NĂ€ide

Protokoll

kasutatakse kas HTTP vÔi HTTPS protokolli. HTTPS on turvaline, HTTP on peaagu avalik

https

IP

Serveri IP aadress

mars.excellent.ee

Port

Serveri veebi port

4455

EttevÔte

EttevÔtte kood andmebaasis

1

Register

Registri nimi, mida pÀrime

ivvc

Filter

VÀli, mille alusel pÀringut filtreerida

filter.Custcode=

VĂ€ljad

VÀljad, mis tagastatakse pÀringuga. (Ilma antud elemendita tagastatakse kÔik vÀljad)

fields=SerNr,OKFlag,

header

HTTP pÀringu headeris mÀÀratakse, mis formaadis andmeid saadetakse, mis formaadis palutakse vastust ning ka Basic Auth informatsioon.

“Accept” vÀÀrtust on vaja tĂ€psustada vaid siis, kui soovitakse JSONit. Default on XML.

--header 'Content-Type: application/x-www-form-urlencoded;charset=utf-8' --header 'Accept: application/json' --header 'Authorization: XXX=='

 

Eraldajad:

  • ? - Sisestatakse peale Registri defineerimist, et kirjeldada filtreid.

  • & - Sisestatakse erineva tĂŒĂŒbiga filtreeringute vahele.

NĂ€idis URL:

https://mars.excellent.ee:4455/api/1/ivvc?filter.CustCode=105&fields=SerNr,OKFlag,Addr0,ArtCode,CustCode,InvDate,TransDate,Objects

Vastus:

<data register="IVVc" sequence="1051619" systemversion="8.5.29.105"> <IVVc> <SerNr>4</SerNr> <InvDate>2014-03-16</InvDate> <CustCode>105</CustCode> <Addr0>Eraisik</Addr0> <OKFlag>1</OKFlag> <Objects/> <TransDate>2014-03-16</TransDate> <rows> <row rownumber="0"> <ArtCode>005</ArtCode> <Objects/> </row> <row rownumber="1"> <ArtCode>012</ArtCode> <Objects/> </row> <row rownumber="2"> <ArtCode>040</ArtCode> <Objects/> </row> </rows> </IVVc> <IVVc> <SerNr>6</SerNr> <InvDate>2014-03-25</InvDate> <CustCode>105</CustCode> <Addr0>Eraisik</Addr0> <OKFlag>1</OKFlag> <Objects/> <TransDate>2014-03-25</TransDate> <rows> <row rownumber="0"> <ArtCode>011</ArtCode> <Objects/> </row> </rows> </IVVc> </data>

See vÀljastab arved kliendilt 105. Arve pole tÀielik, vaid on ainult vÀljad number, Kinnita linnuke, aadressi esimene rida, artiklikood, kliendikood, arve kuupÀev, kande kuupÀev, objektid.

PĂ€ringu vormistamine

http://username:password@hostname:port/api/1/IVVc

See on kÔige lihtsam nÀidis pÀring kindlast ettevÔttest ja kindlast registrist, kus

  • "username" on kasutajanimi Isikute registrist;

  • "password" on isikule mÀÀratud salasĂ”na

  • "api" on kohustuslik pĂ€ringu osa stringina;

  • "1" on ettevĂ”tte kood ettevĂ”tete registrist;

  • "IVVc" on registri nimi.

See pĂ€ring tĂ”mbab kĂ”ik mĂŒĂŒgiarved ettevĂ”ttest 1. Kui soovid sarnaselt saada infot nĂ€iteks baasvaluutade kohta, siis pead kasutama pĂ€ringut:

http://username:password@hostname:port/api/1/BaseCurBlock

Auth info ehk kasutaja/salasÔna pÀringuga saatmine

Standard Books toetab "Basic access authentication" funktsionaalsust.

Kuidas kasutajanime ja parooli pÀringu tegemisel seadistada, sÔltub sellest, mis tarkvaraga te pÀringut teete.

  • Veebibrauseri ja curliga on lihtne viis panna kasutajanimi ja salasĂ”na otse URLi sisse: http://username:password@hostname:port/api/1/IVVc

  • Curliga saab auth info kohe kaasa anda ka headeris, nĂ€iteks:

curl --location --request GET 'https://mars.excellent.ee:3702/api/080/ObjVc' --header 'Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ=='

  • Kui kasutate Microsofti tooteid, siis Power Query seadistatakse kasutajanimi ja salasĂ”na vastavas seadistuses.

  • KĂ”ikides muudes tarkvarades on kasutajanime ja salasĂ”na kasutamine erinev, tutvuge tarkvara dokumentatsiooniga.

Andmete formaat

PÀringute andmeformaadid ja kÀttesaadud andmete formaadid on samad ning kindlalt fikseeritud:

  • komakoha eraldajaks tuleb kasutada "." (punkt);

  • tuhandete eraldajat ei tohi olla;

  • kuupĂ€evad on ISO formaadis YYYY-MM-DD (ehk aasta-kuu-pĂ€ev)

Parameetrid

Reaalsed parameetri vÀÀrtused, mida pÀringutes kasutatakse (nÀiteks kasutatud vÔti/ID ja vahemik, serveri versioon jm.), esitatakse tulemustes andmevÀljade atribuutidena("data tag"). JÀrgnevalt nÀited parameetritest.

sort - sorteerimise parameeter sorteerib saadud kaardid mÀÀratud andmevĂ€lja jĂ€rgi. Indeksi nimi, mida kasutati, vĂ€ljastatakse samuti pĂ€ringu tulemuses. Sorteerida saab ainult kaardi pĂ€ise vĂ€ljade jĂ€rgi. VĂ”imalik on sorteerida ainult ĂŒhe vĂ€lja jĂ€rgi korraga, ja eeldusel, et selle jaoks on olemas sobiv indeks. Kui sobiv indeks puudub, siis pĂ€ring tulemust ei vĂ€ljasta. VĂ€lja nime puhul on olulised suured ja vĂ€ikesed tĂ€hed. NĂ€ide (pĂ€ring mĂŒĂŒgiarvete registrist, sorteerituna kliendikoodi jĂ€rgi):

http://username:@hostname/api/1/IVVc?sort=CustCode

range - vahemiku parameetri kasutamiseks tuleb kasutada ka sorteerimise parameetrit. Vahemik pĂ€rib ainult need kaardid, kus sorteeritava vĂ€lja vÀÀrtus langeb mÀÀratud vahemikku. VÀÀrtused, mis vĂ”rduvad vahemiku alguse ja lĂ”puga, kaastakse tulemusse. Vahemiku alguse ja lĂ”pu vÀÀrtused eraldatakse ":" (kooloniga). On lubatud ka pĂ€ringud, kus mÀÀratud on ainult vahemiku alguse vĂ”i ainult lĂ”pu vÀÀrtus. Kui pĂ€ringus kasutatakse ainult ĂŒhte kindlat vÀÀrtust (ilma koolonita), siis vĂ€ljastatakse ainult kaardid, mis vastavad sellele konkreetsele vÀÀrtusele.

NĂ€ide 1 (vĂ€ljastab mĂŒĂŒgiarved, kus kliendikoodid on vahemikus 10101 kuni 10104):

http://username:@hostname/api/1/IVVc?sort=CustCode&range=10101:10104

NĂ€ide 2 (vĂ€ljastab mĂŒĂŒgiarved, kus kliendikoodid on 10104 kuni viimase kliendini):

http://username:@hostname/api/1/IVVc?sort=CustCode&range=10104:

NĂ€ide 3 (vĂ€ljastab mĂŒĂŒgiarved, kus on ainult klient koodiga 10104):

http://username:@hostname/api/1/IVVc?sort=CustCode&range=10104

Vahemiku parameeter on kiire, sest kasutab indeksit.

fields - VĂ€ljade parameeter mÀÀrab, mis vĂ€ljad tulemusse kaasatakse. VĂ€ljad eraldatakse komadega. Kui parameetrit ei ole mÀÀratud, siis vĂ”etakse tulemusse info kĂ”ikidest vĂ€ljadest. Kui kaardi/dokumendi pĂ€ises ja ridadel on sama nimega vĂ€li, kaasatakse tulemusse mĂ”lemate info. Kui ridadelt ei pĂ€rita ĂŒhtegi vĂ€lja, siis mingisugust ridade infot (ridade numbrid vms) ei vĂ€ljastata tulemustes. AndmevĂ€ljade jĂ€rjekord on alati sama (Booksi standard), VĂ€ljade jĂ€rjestus pĂ€ringus ei muuda vĂ€ljade jĂ€rjestust tulemuses.

NĂ€ide (vĂ€ljastab mĂŒĂŒgiarved, ainult arve numbriga: 

http://username:@hostname/api/1/IVVc? fields=SerNr

filter - Andmeid saab filtreerida selle parameetri abil. Filter on oluliselt aeglasem kui vahemik, kuna ei kasuta indekseid ja otsib lÀbi kÔik kaardid. Kui kasutad vahemiku parameetrit, siis filter köib lÀbi ainult need kaardid, mis jÀÀvad vahemikku. SellepÀrast on soovitav kasutada vÔimalikult tÀpset vahemiku mÀÀrangut ja teisi filtreid. NB: Filter vÀli peab kattuma tÀielikult otsitava vÀljaga. Ei saa otsida sisu osa

NĂ€ide:

http://username:@hostname/api/1/IVVc?filter.CustCode=10104

  • Ühe vĂ€lja kohta tohib kasutada ainult ĂŒhte filtrit

  • Erinevate vĂ€ljade kasutamisel, saab kasutada mitut filtrit

  • Filtrid saavad kasutada sarnaselt vÀÀrtuste vahemike, k.a. ainult vahemiku alguse vĂ”i ainult lĂ”puga mÀÀratud.

  • Filtrid toimivad ainult kaartide/dokumentide pĂ€ise andmevĂ€ljadega

  • Nimekirja vĂ€ljades filtreerimine (nĂ€iteks Objektid) toimub kogu stringi ulatuses.

NÀiteks:  filter.Objects=AB ei kaasa tulemust "AB,D10101"

NĂ€ide (vĂ€ljastab mĂŒĂŒgiarved, mille lĂ”ppsumma on vahemikus 100 kuni 1000 ja kus kliendikoodid on vahemikus 10100 kuni 10200):

http://username:@hostname/api/1/IVVc?filter.CustCode=10100:10200&Sum4=100:1000

listfilter - töötab sarnaselt filter parameetriga kuid suudab eristada ĂŒhte osa loetelust ehk terve vĂ€lja sisu ei pea kattuma 100%.

NĂ€ide:

teen pÀringu, kus on parameeter listfilter.Objects=KONTOR

Vastused saan kĂ”ikide kaartide kohta, kus vĂ€hemalt ĂŒheks objektiks on KONTOR:

<CUVc register='CUVc' sequence='94801' url='/api/1/CUVc/53'> <Code>53</Code> <Name> Creative OÜ</Name> <Objects>KONTOR</Objects> </CUVc> <CUVc register='CUVc' sequence='94808' url='/api/1/CUVc/55'> <Code>55</Code> <Name>Kontaktihoidja AS</Name> <Objects>12,KONTOR,TARTU</Objects>

offset and limit - Kui pĂ€ringu tulemus on suurem, kui api kasutaja suudab töödelda ĂŒhe pĂ€ringuga, siis saab tulemusi jagada vĂ€iksemateks osadeks. "offset" jĂ€tab vahele mÀÀratud arvu kaarte/dokumente pĂ€ringu tulemuses. "limit" piirab kaartide koguarvu pĂ€ringu tulemuses.

NĂ€ide (vĂ€ljastab 15 esimest mĂŒĂŒgiarvet 3 erineva pĂ€ringuga):

http://username:@hostname/api/1/IVVc?offset=0&limit=5 

http://username:@hostname/api/1/IVVc?offset=5&limit=5 

http://username:@hostname/api/1/IVVc?offset=10&limit=5

"offset" ja "limit" saab kasutada koos kÔikide teiste parameetritega.

updates_after - vÀljastab kÔik kaardid/dokumendid, mida on uuendatud peale mÀÀratud jÀrjekorra numbrit. JÀrjekorra number vÀljastatakse igas pÀringus (sequence="x") ning seda saab kasutada hiljem koos parameetriga "updates_after"

NB: et kasutada updates_after ja deletes_after funktsioone peab olema peal seadistus: Moodul Tehnika > Seadistused > SĂŒnkroniseerimise vĂ”imalused > Aktiveeri.

NĂ€ide:

http://username:@hostname/api/1/IVVc?updates_after=5000

deletes_after - vÀljastab kÔik kaardid/dokumendid, mis on kustutatud peale mÀÀratud jÀrjekorra numbrit. JÀrjekorra number vÀljastatakse igas pÀringus ning seda saab kasutada hiljem koos parametriga "deletes_after"

NĂ€ide:

http://username:@hostname/api/1/IVVc?deletes_after=5000

NB: Kui kasutate deletes_after vĂ”i updates_after parameetreid, siis vĂ”iks enne andmebaasi eksporti-importi (hooldus, ver uuendus) peale panna Üldine > Seadistused > Valikulised vĂ”imalused > linnuke "Ekspordi jĂ€rjekorranumbrid".Siis sĂ€ilivad baasis sequence cvÀÀrtused. Kui seda peale ei panda, siis hakkavad sequence vÀÀrtused uuesti otsast peale jooksma. Mis ei ole suur mure ilmselt, aga on vĂ”imalik vĂ€ltida.

Lisaks:

  • Sequence number antakse igale Standard Booksis loodud vĂ”i muudetud kaardile / andmeblokile (seadistused). Sisuliselt on see andmebaasis tehtud muudatuste jĂ€rjekorranumber. Ja iga kaardi vĂ”i seadistuse loomine ja muutmine on andmebaasimuudatus.

  • API pĂ€ringu vastuses antakse kaasa alati viimane andmebaasimuudatusele omistatud sequence number.

  • Ajas sequence niisama ei muutu - kui teha pĂ€ringuid nii, et keegi Standard Booksis ei toimeta, ei muutu ka sequence vÀÀrtus API pĂ€ringu vastuse pĂ€ises.

  • Filter.xxx ja Sort ja Range pĂ€ringud ei toimi koos updates_afteriga - kui neid kasutada koos, kehtib vaid updates_after. KĂŒll aga saab updates_afteriga koos kasutda fields=xxx parametrit.

Andmete kirjutamine StandardBooksi, > 8.5

Andmete kirjutamisel StandardBooksi kasutatakse funktsiooni "RecordNew" ehk dokumendile kehtivad tÀpselt samad loomise reeglid, nagu klientprogrammi kasutades (nÀiteks mis andmed asetatakse dokumendile peale Kontakti koodi valimist; mis on kohustuslikud vÀljad, mis on Kontakti-pÔhised andmed dokumendil jms).

Andmete mahu piirangut andmete kirjutamisel ei ole. On vÔimalik pÀringu sisu saata kas URLis vÔi POST pÀringu andmete osas ( --data-raw ).

POST pÀringu jÀrgselt saadetakse alati tagasi vastus, Standard Booksi XML formaadis. Selleks saab olla kas loodud dokument/kaart vÔi veateade. Loodud dokumendi/kaardiga vÔib aga ei pruugi vastuses olla ka informatiivseid teateid, hoiatusi. Vastuses on XMLis ainult andmeid sisaldavad read.

Vastuses on alati ka link loodud dokumendile, url parameetris. NÀiteks kirjutasime baasi artikli koodiga 2005, siis on url osas sisu: "url="/api/1/INVc/1005"". Kui kirjutatakse korraga mitu dokumenti, on urlis koodid eraldatud "/" mÀrgiga. Kui koodis on tÀpitÀhti vÔi muid erilisi tÀhemÀrke, on nad url-kodeeritud.

KÔik teated, mis kasutajale tagastatakse, asuvad vastuses message osas, teated luuakse tÀpselt samadel alustel, nagu klientprogrammi kasutades: <message description='message_text'></message>

Kui andmete kirjutamine toob kaasa veateate, on see Error code parameetri sisus. Seal on viide ka tÀpsele vea tekkimise asukohale (rea nr ja vÀlja nimi): <error code='error_code' description='error description' row='row_no' field='field_name'></error>

Postitamisel on andmevÀljade eraldajaks & mÀrk.

Booksis on enamikul toiminguregistritel (Arve, Ostuarve, Tellimus, Pakkumus, Arve, Laekumine, Tasumine jne) 200 rea piirang. APIga andmeid saates olge tĂ€helepanelik, et te seda ridade arvu ei ĂŒleta. Kui ĂŒletate, siis veateadet standardis ega hoiatust otseselt ei tagastata, klient vĂ”ib lĂ”puks saada vale sisuga dokumendi.

Et tÀpitÀhed liiguksid korrektselt, lisa pÀisesse headeri rida:

Content-Type: application/x-www-form-urlencoded; charset=utf-8

POST

Registrisse uue kirje lisamiseks tuleb andmed saata Rest API POST meetodiga, url-formaadis. Iga vÀlja juures tuleb kasutada set kÀsku.

Andmed vÔivad olla nii otse URLis, kui --data-raw osas

NÀide 1.1, kaherealine arve, kasutame --data-raw: 

curl --location --request POST 'https://mars.excellent.ee:4455/api/1/IVVc' \ --header 'Content-Type: application/x-www-form-urlencoded; charset=utf-8' \ --header 'Authorization: Basic aHR0cHM6Ly95b3V0dS5iZS9kUXc0dzlXZ1hjUQ==' \ --header 'Cookie: country=global' \ --data-raw 'set_field.CustCode=111& set_field.Comment=ĂœĂŒrilepingust tulenev tasu& set_field.InvDate=2022-04-22& set_row_field.0.ArtCode=001& set_row_field.0.Quant=1& set_row_field.1.ArtCode=002& set_row_field.1.Quant=21& '

NĂ€ide 1,2, sama kaherealine arve, sisu otse URLis:

curl --location --request POST 'https://mars.excellent.ee:4455/api/1/IVVc?set_field.CustCode=111&set_field.Comment=%C3%9C%C3%BCrilepingust%20tulenev%20tasu&set_field.InvDate=2022-04-22&set_row_field.0.ArtCode=001&set_row_field.0.Quant=1&set_row_field.1.ArtCode=002&set_row_field.1.Quant=21&' \ --header 'Content-Type: application/x-www-form-urlencoded; charset=utf-8' \ --header 'Authorization: Basic aHR0cHM6Ly95b3V0dS5iZS9kUXc0dzlXZ1hjUQ==' \ --header 'Cookie: country=global'

Sellele POSTile saadetakse vastus:

<?xml version='1.0' encoding='UTF-8' standalone='yes'?> <data register="IVVc" sequence="4663498" url="/api/1/IVVc/1202053623" systemversion="8.5.38.86"> <IVVc> <SerNr>1202053623</SerNr> <InvDate>2022-04-22</InvDate> <CustCode>111</CustCode> <PayDate>2022-04-29</PayDate> <Addr0>Ehitajate tee 91/2-24</Addr0> <Addr1>MustamĂ€e linnaosa</Addr1> <Addr2>Tallinn</Addr2> <Addr3>Harju maakond</Addr3> <Addr4>12915</Addr4> <PayDeal>7</PayDeal> <pdays>7</pdays> <CustCat>EES</CustCat> <InvType>1</InvType> <ARAcc>1010</ARAcc> <TransDate>2022-04-22</TransDate> <CurncyCode>EUR</CurncyCode> <Sign>AA</Sign> <Sum1>495.41</Sum1> <Sum3>99.08</Sum3> <Sum4>594.49</Sum4> <VATNr>EE112255887</VATNr> <TAX1Sum>118.90</TAX1Sum> <BaseSum4>594.49</BaseSum4> <TotGP>18.62</TotGP> <RetValue>-594.49</RetValue> <TotQty>22</TotQty> <SumIncCom>594.49</SumIncCom> <rows> <row rownumber="0"> <stp>1</stp> <ArtCode>001</ArtCode> <Quant>1</Quant> <Price>15.59</Price> <Sum>14.03</Sum> <BasePrice>14.94</BasePrice> <Spec>Jauram 1,2 meetrit</Spec> <VATCode>1</VATCode> <UnitCode>TK</UnitCode> <UnitComment>tĂŒkk</UnitComment> </row> <row rownumber="1"> <stp>1</stp> <ArtCode>002</ArtCode> <Quant>21</Quant> <Price>25.47</Price> <Sum>481.38</Sum> <BasePrice>21.99</BasePrice> <Spec>Testseadmete ≀1 kV (seadmed kuni 3 mÔÔte-</Spec> <VATCode>1</VATCode> <UnitCode>TK</UnitCode> <UnitComment>tĂŒkk</UnitComment> </row> </rows> </IVVc> </data>

On loodud uus arve nr 1202053623, Kontaktile koodiga 111, arvel on 2x rida.

PATCH

Et muuta olemasolevat kaarti, peate andma tÀpse registrikaardi URLi ja kaustama PATCH meetodit.

NÀide, muudame kliendikoodi Àra, 111 asemel 109: 

curl --location --request PATCH 'https://mars.excellent.ee:4455/api/1/IVVc/1202053623?set_field.CustCode=109' \ --header 'Content-Type: application/x-www-form-urlencoded; charset=utf-8' \ --header 'Authorization: Basic aHR0cHM6Ly95b3V0dS5iZS9kUXc0dzlXZ1hjUQ==' \ --header 'Cookie: country=global'

Vastus on samasugune, nagu POST pÀringul. sisuks uuenenud andmed:

NB: Kui tegu on registriga, kus sama (pÔhi) koodiga saab eksisteerida mitmeid kaarte, on kasutusel URL unikaalsete koodide kombinatsiooniga.

NĂ€iteks Ostuartikli Patch url on kujul /api/1/PIVc/[Artiklikood]/[Laokood]/[Tarnijakood]/[TarnijaArtikkel]. NĂ€iteks: https://mars.excellent.ee:4455/api/1/PIVc/002/PL/001/80702

Sama kehtib veel nÀiteks ka Hindade kohta.

TÀpse kaardi PATCH urli lÔpu saab kÔige paremini kÀtte POST pÀringu vastuse teiselt realt, see rida on nÀiteks selline:

<data register="PIVc" sequence="385206" url="/api/1/PIVc/002/PL/001/80702" systemversion="8.5.33.1255">

Lihtsad POSTi nÀited

POST meetodiga saab tekitada uusi dokumente

PATCH meetodiga saab muuta olemasolevaid kaarte (ei pea kaasa saatma kogu kaardi sisu, muudetava dokumendi nr sisaldub URLis)

Koostame kliendi

curl --location --request PATCH 'https://mars.excellent.ee:4455/api/1/CUVc' \ --header 'Content-Type: application/x-www-form-urlencoded; charset=utf-8' \ --header 'Authorization: Basic aHR0cHM6Ly95b3V0dS5iZS9kUXc0dzlXZ1hjUQ==' \ --header 'Cookie: HSESSION=F781FB1F-605F90E0-EC009210-F7841492-3AE28E44; country=global' \ --data-raw 'set_field.Name=KarjakĂŒla OÜ& set_field.InvAddr0=Ehitajate tee 91/2-24& set_field.InvAddr1=MustamĂ€e linnaosa& set_field.InvAddr2=Tallinn& set_field.InvAddr3=Harju maakond& set_field.InvAddr4=12915& set_field.Phone=55887744& set_field.CountryCode=EE& set_field.ExportFlag=0& set_field.CustCat=EES& set_field.PayDeal=7& set_field.VATNr=EE792919432& set_field.LangCode=EST set_field.VATCode=20& set_field.ExportFlag=0& set_field.Person=Mariliis MĂ€nnik&'

 

Saame vastuse:

<?xml version='1.0' encoding='UTF-8' standalone='yes'?> <data register="CUVc" sequence="4663625" url="/api/1/CUVc/BRANCHIDIV1" systemversion="8.5.38.86"> <CUVc> <UUID>3BA2B0DC-CEDE7E89-0DE655E2-23BD9051-F11E3237</UUID> <SyncFlags>1</SyncFlags> <Code>BRANCHIDIV1</Code> <Name>KarjakĂŒla OÜ</Name> <Person>Mariliis MĂ€nnik</Person> <InvAddr0>Ehitajate tee 91/2-24</InvAddr0> <InvAddr1>MustamĂ€e linnaosa</InvAddr1> <InvAddr2>Tallinn</InvAddr2> <InvAddr3>Harju maakond</InvAddr3> <InvAddr4>12915</InvAddr4> <Phone>55887744</Phone> <CustCat>EES</CustCat> <PayDeal>7</PayDeal> <InterestFlag>1</InterestFlag> <VATNr>EE792919431</VATNr> <CountryCode>EE</CountryCode> <RemndrFlag>1</RemndrFlag> <LangCode>EST</LangCode> <SalesMan>AA</SalesMan> <CreditLimit>0.00</CreditLimit> <VATCode>20</VATCode> <Classification>23619</Classification> <DateChanged>2021-07-27</DateChanged> <Password>0</Password> <DateCreated>2021-07-27</DateCreated> <CUType>1</CUType> <CreditLimitDays>0</CreditLimitDays> <InvCountryName>Eesti</InvCountryName> <TaxCondition>2</TaxCondition> <Sign>AA</Sign> <eInvPostage>2</eInvPostage> </CUVc> </data>
  • astuses vaid need read kontaktikaardilt, mis on tĂ€idetud.

  • tĂ€idetud on ka vĂ€ljad, mis GUIga kontakti luues automaatselt tĂ€idetakse

Koostame artikli

curl --location --request POST 'https://mars.excellent.ee:4455/api/1/INVc' \ --header 'Content-Type: application/x-www-form-urlencoded; charset=utf-8' \ --header 'Authorization: Basic aHR0cHM6Ly95b3V0dS5iZS9kUXc0dzlXZ1hjUQ==' \ --header 'Cookie: HSESSION=457D70DF-51620277-2DF144FF-7148A3FA-E412709F; country=global' \ --data-raw 'set_field.Name=TrenaĆŸĂ¶Ă¶r pĂ”lvedele& set_field.MinLevel=100& set_field.Objects=NO_PREEMIA& set_field.UPrice1=1700.00& set_field.Group=KOHV& set_field.BarCode=1022154455&'

Vastus

<?xml version='1.0' encoding='UTF-8' standalone='yes'?> <data register="INVc" sequence="4663637" url="/api/1/INVc/MYYK8" systemversion="8.5.38.86"> <INVc> <UUID>E241260B-327E021F-87C1C234-B90E2DE9-451B042F</UUID> <SyncFlags>1</SyncFlags> <Code>MYYK8</Code> <Name>TrenaĆŸĂ¶Ă¶r pĂ”lvedele</Name> <MinLevel>100</MinLevel> <Objects>NO_PREEMIA</Objects> <UPrice1>1700.00</UPrice1> <Group>KOHV</Group> <BarCode>1022154455</BarCode> <UpdateCost>1</UpdateCost> <LastPriceChange>2021-07-27</LastPriceChange> <WarrantyLength>0</WarrantyLength> <LastBasePriceChange>2021-07-27</LastBasePriceChange> <colnr>Hall</colnr> <rows></rows> </INVc> </data>

Meil on nĂŒĂŒd olemas Klient koodiga "1985" (Kohvimasina Post OÜ) ja artikkel "19.321-127"

MĂŒĂŒme postitatud artikli postitatud kliendile maha.

Koostame arve, kasutame loodud artiklit ja klienti

curl --location --request POST 'https://mars.excellent.ee:4455/api/1/IVVc' \ --header 'Content-Type: application/x-www-form-urlencoded; charset=utf-8' \ --header 'Authorization: Basic aHR0cHM6Ly95b3V0dS5iZS9kUXc0dzlXZ1hjUQ==' \ --header 'Cookie: HSESSION=457D70DF-51620277-2DF144FF-7148A3FA-E412709F; country=global' \ --data-raw 'set_field.InvDate=2019-02-10& set_field.CustCode=BRANCHIDIV1& set_field.NotUpdStockFlag=1& set_row_field.0.ArtCode=MYYK8& set_row_field.0.Quant=1&'

Vastuseks saime ĂŒherealise arve:

<?xml version='1.0' encoding='UTF-8' standalone='yes'?> <data register="IVVc" sequence="4663662" url="/api/1/IVVc/1202053624" systemversion="8.5.38.86"> <IVVc> <SerNr>1202053624</SerNr> <InvDate>2019-02-10</InvDate> <CustCode>BRANCHIDIV1</CustCode> <Math></Math> <PayDate>2019-02-17</PayDate> <Addr0>KarjakĂŒla OÜ</Addr0> <Addr1>Ehitajate tee 91/2-24</Addr1> <Addr2>Tallinn</Addr2> <Addr3>Harju maakond</Addr3> <Addr4>12915</Addr4> <ClientContact>Mariliis MĂ€nnik</ClientContact> <PayDeal>7</PayDeal> <Prntdf>1</Prntdf> <pdays>7</pdays> <pdvrebt>0</pdvrebt> <pdrdays>0</pdrdays> <CustCat>EES</CustCat> <InvType>1</InvType> <PriceList>KN</PriceList> <Objects>ABIVAHEND</Objects> <ARAcc>1010</ARAcc> <SalesMan>AA</SalesMan> <TransDate>2019-02-10</TransDate> <CurncyCode>EUR</CurncyCode> <LangCode>EST</LangCode> <Sign>AA</Sign> <FrGP>0.00</FrGP> <Sum0>0.00</Sum0> <Sum1>1530.00</Sum1> <Sum3>306.00</Sum3> <Sum4>1836.00</Sum4> <VATNr>EE792919431</VATNr> <CustVATCode>20</CustVATCode> <RebCode>11</RebCode> <Phone>55887744</Phone> <IntCode>25.55</IntCode> <ARonTR>1</ARonTR> <BaseSum4>1836.00</BaseSum4> <TotGP>1530.00</TotGP> <RetValue>-1836.00</RetValue> <TotQty>1</TotQty> <SumIncCom>1836.00</SumIncCom> <RetnValue>-1836.00</RetnValue> <TransTime>12:33:29</TransTime> <ServiceDelDate>2019-02-10</ServiceDelDate> <NoTAXonVAT>0</NoTAXonVAT> <TotalwoTAX>1</TotalwoTAX> <RegDate>2021-07-27</RegDate> <RegTime>12:33:29</RegTime> <InvCountry>EE</InvCountry> <InvCountryName>Eesti</InvCountryName> <IPBookVAT>1</IPBookVAT> <GPProc>100.0</GPProc> <rows> <row rownumber="0"> <stp>1</stp> <ArtCode>MYYK8</ArtCode> <Quant>1</Quant> <Price>1700.00</Price> <Sum>1530.00</Sum> <vRebate>10.0</vRebate> <SalesAcc>3100</SalesAcc> <Objects>NO_PREEMIA</Objects> <rowGP>1530.00</rowGP> <Spec>TrenaĆŸĂ¶Ă¶r pĂ”lvedele</Spec> <VATCode>20</VATCode> <TaxMatrix></TaxMatrix> </row> </rows> </IVVc> </data>

Nagu nÀha, on arvele kandunud korrektselt objektid, kliendi kontaktisikud jms, mida me postitasime algsetele kaartidele.

NB: On oluline ka lisatava info jĂ€rjekord. NĂ€iteks, kui lisate tasumistingimuse koodi, seejĂ€rel kontakti koodi ning sellel kontaktil ei ole MĂŒĂŒgi Tasumistingimus tĂ€idetud, siis saate veateate, et tasumistingimus on tĂŒhi. Õige jĂ€rjekord antud juhul oleks Kontaktikood, peale seda tasumistingimus. Sama reegel on objektidega - need lisada peale kontakti, ridadel peale Kontot vĂ”i Artiklit.

Muudame koostatud arvel kogust

curl --location --request PATCH 'https://mars.excellent.ee:4455/api/1/IVVc/1202053624' \ --header 'Content-Type: application/x-www-form-urlencoded; charset=utf-8' \ --header 'Authorization: Basic aHR0cHM6Ly95b3V0dS5iZS9kUXc0dzlXZ1hjUQ==' \ --header 'Cookie: HSESSION=457D70DF-51620277-2DF144FF-7148A3FA-E412709F; country=global' \ --data-raw 'set_row_field.0.Quant=4&'

Vastuseks on samasugune arve XML, nagu arve postitamisel, vaid kogus on muutunud 3-ks.

Kinnitame arve

curl --location --request PATCH 'https://mars.excellent.ee:4455/api/1/IVVc/1202053624' \ --header 'Content-Type: application/x-www-form-urlencoded; charset=utf-8' \ --header 'Authorization: Basic aHR0cHM6Ly95b3V0dS5iZS9kUXc0dzlXZ1hjUQ==' \ --header 'Cookie: HSESSION=457D70DF-51620277-2DF144FF-7148A3FA-E412709F; country=global' \ --data-raw 'set_field.OKFlag=1&'

tekkis viga, puudu on konto kÀibemaksukoodi pealt. Saime veateate:

<?xml version='1.0' encoding='UTF-8' standalone='yes'?> <message description="TAX Account not found, check VAT Codes"></message> <error code="20078" description="TAX Account not found, check VAT Codes" row="-1" field="-1"></error>

Parandasin vea, seejÀrel sain tulemuseks OK ning tulemus:

Saadame Booksi firma nime, kus on sees & mÀrk

Nagu olete tĂ€hele pannud, siis & mĂ€rk töötab rea lĂ”pu tĂ€hisena. Seega firma nime "Saue & Saku OÜ" kirjutamisel ei saa me kasutada tavapĂ€rast kirjakuju:

set_field.Name=Saue & Saku OÜ&

(Sel juhul tuleks kontakti nimeks vaid "Saue ")

Kodeerime kĂ”ik postitatavad andmed kohe URL formaati (kuigi tegelikult tĂŒhikuid tĂŒhikutena on okei saata):

set_field.Name=Saue%20%26%20Saku%20OÜ&

Manuste pÀrimine Standard Booksist

Alates 2024 aasta kevade versiooniuuendusest saab Standard Booksist pÀrida kaartidele lisatud manuseid.

Lihtsaim kasutusjuhtum on see, kui nÀitek veebipood POSTib arve Standard Booksi, see kinnitatakse, tekib arvele manusesse arve PDF, mis genereeritakse vastavalt Standard Booksi dokumendimallile. SeejÀrel saab Veebipood enda keskkonda pÀrida tÀpselt selle arve PDFi, mille Standard Books on genereerinud. Teine levinud kasutusjuhtum on artiklite piltide, sertifikaatide ja kasutusjuhendite pÀrimine veebikeskkonda.

PĂ€ring koosneb kahest osast:

  1. Kaaride seoste pÀring (saame kÀtte meid huvitava dokumendi manuste lingid)

  2. Manuse enda pÀring.

Kaartide seoste pÀring

KÔikides Standard Booksi registrites saab pÀringule lisada parameetri get_links=1.

Kui link viitab registrile Attach2Vc on tegu manustatud failiga. Kui link viitab mÔnele muule registrile (MailVc, ORVc, QTVc jne) on tegu kaartide omavahelise seosega Standard Booksis sees.

NĂ€ide ĂŒhe arve manuste kohta:

https://mars.excellent.ee:445/api/1/IVVc?get_links=1&filter.SerNr=230008

Ja tulemuses on iga registrikaardi lÔpus <links> osa:

..... </row> </rows> <links> <link comment='Arve 230008.pdf 406 KB'> <url>/api/1/Attach2Vc/126</url> </link> <link comment='Arve 230008'> <url>/api/1/MailVc/86</url> </link> </links> </IVVc> </data>

Sealt saame manuse pÀringuks vajaliku Attach2Vc registri kirje numbri (SerNr).

Manuste pÀrimine

Manuste pÀrimiseks teme pÀringu Attach2Vc registri pihta. Eelpool toodud nÀidet kasutades saame PDFi pÀrida nii:

https://mars.excellent.ee:445/api/1/Attach2Vc?filter.SerNr=126&get_attachdata=true

Vastuses on metadata ja manuse sisu base64 kodeeringus:

<?xml version='1.0' encoding='UTF-8' standalone='yes'?> <data register='Attach2Vc' sequence='94784' systemversion='8.5.55.3480'> <Attach2Vc register='Attach2Vc' sequence='94778' url='/api/1/Attach2Vc/126'> <UUID>9B158C54-CE868FEC-17890241-4A8BB8B4-07A73BC0</UUID> <ServerSequence>-1</ServerSequence> <SyncFlags></SyncFlags> <SerNr>126</SerNr> <FileName>Arve 230008.pdf</FileName> <PackTyp>0</PackTyp> <Uploading>0</Uploading> <FileSize>134</FileSize> <Type>0</Type> <Storage>SerNr</Storage> <ContentId></ContentId> <attachment>JVBERi0xLjcKJbe+raoKMSAwIG9iago8PAovVHlwZSAvQ2F0YWxvZOSAwIFIgXQovTWV0YWRhdGEgNDAgMCBSCi9NYXJrSWBhZ2VzCi9LaWRzIFsgNCAwIFIgXQovQ291bnQgMQo==</attachment> </Attach2Vc> </data>

Head tavad Standard Booksi Rest API kasutamiseks

Andmete maht

Enamasti on mÔtestatud API kasutamise alustuseks vaja pÀrida suur hulk baasandmeid (kontaktid, artiklid, kontod, objektid jne) ja pika perioodi toiminguregistrid (arved, laekumised, tellimused, kanded jne). Et seda teha teiste kasutajate suhtes vÔimalikult vÀikese mÔjuga, siis:

  • Üle 100 000 kirjega registrite puhul kasutage andmete pĂ€rimiseks öist aega.

  • Kui öine ajastamine pole vĂ”imalik, pĂ€rige andmeid nĂ€iteks 1000 kuni 5000 kaupa, kasutades offset and limit parameetreid. JĂ€tke pĂ€ringute vahele umbes sekundilised pausid, et server saaks vahepeal teenindada klientprogramme

  • Kui kasutate suurte andmemahtude korral fields vĂ”i filter parameetreid, on pĂ€ringule vastuse koostamine ÀÀrmiselt CPU-nĂ”udlik. PĂ€ringule vastuse koostamine vĂ”tab ca 10x kauem aega, kui pĂ€rides toor-andmeid. Antud filtreid on hea kasutada jooksvate pĂ€ringutega, lĂŒhikese perioodi kohta vĂ”i koos updates_after parameetriga.

Jooksvate pÀringute tegemine

  • Veebipoodide, tootmis- ja laosĂŒsteemide liidestamisel on vajadus pĂ€rida Standard Booksist muutunud andmeid. Selleks tegevuseks on parim viis updates_after parameetri kasutamine, mis tagastab vastuses vaid uued ja/vĂ”i muutunud kaardid pĂ€ritavas registris alates eelmisest pĂ€ringust. NB: kui soovite kasutada updates_after parameetrit registris, kus see toetatud pole, siis vĂ”tke ĂŒhendust Excellenti mĂŒĂŒgiosakonnaga.

  • Ajastage pĂ€ring mitte sagedamalt, kui 20 minutilise intervalliga. Kui teete sagedamalt, hakkavad Stadard Booksis kuhjuma samaaegsed sisselogimis-sessioonid. 2021 lĂ”pu seisuga on Standard Booksil probleeme suure hulga taoliste sessioonide haldamisega ja varem vĂ”i hiljem tekivad probleemid klientprogrammide ĂŒhendustega.

Testid

Testid on tehtud 2021 aasta lÔpus, ver STDBKS_8.5-2021-09-26-0383

  • 2- realisi finantskandeid suudab Standard Books tavaolukorras kirjutada 10 tk sekundis.

  • 1 realisi arveid koos Kinnita valikuga suudab Standard Books kirjutada 3-4 tk sekundis

  • 10 000 kande pĂ€rimine toor-andmetega vĂ”tab aega ca 10 sekundit (3 sekundit pĂ€ringu koostamine, 7 sekundit vastuse salvestamine + edastamine). Vastuse suurus 30 MB. Samal ajal ei olnud klientprogrammi kasutamine vĂ”imalik.

  • 10 000 kande pĂ€rimine koos fields parameetri ja 10 vĂ€ljaga vĂ”ttis 7 sekundit (5 sekundit pĂ€ringu koostamine, 2 sekundit vastuse salvestamine + edastamine) Vastuse suurus 4 MB. Samal ajal ei olnud klientprogrammi kasutamine vĂ”imalik.

  • Kui teha GET pĂ€ringuid jĂ€rjest 1 sekundilise vahega, siis on klientprogramm kasutuskĂ”lbmatu peale 25 minuti möödumisel pĂ€ringute algusest.