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 | |
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:
Kaaride seoste pÀring (saame kÀtte meid huvitava dokumendi manuste lingid)
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.