V tomto oddíle se dozvíte o základech dotazování
Seznam základních operátorů.
Operátor | Název | Význam | Příklad |
---|
|| (+) | Spojení řetězců | Spojí dva řetězce do jednoho | Code || Name nebo Code + Name |
+ | Plus | Sečte dvě čísla | LocalAmountWithoutVAT + VATAmount |
- | Mínus | Odečte dvě čísla | Amount - VATAmount |
mul (*) | Krát | Vynásobí dvě čísla | UnitPrice * Quantity nebo UnitPrice mul Quantity |
div (/) | Děleno | Vydělí dvě čísla | TotalPrice / Quantity nebo TotalPrice div Quantity |
mod (%) | Zbytek po dělení (modulo) | Vypočte zbytek po dělení | TotalPrice % 3 nebo TotalPrice mod 3 |
Seznam základních funkcí.
Funkce | Význam | Příklad |
---|
upper() | Převede řetězec na velká písmena | where=upper(name)+like+'*ABRA*' |
lower() | Převede řetězec na malá písmena | where=lower(name)+like+'*abra*' |
Seznam základních logických operátorů.
Operátor | Název | Význam | Příklad |
---|
not | Negace | Neguje výraz, který za operátorem následuje. | not (Firm_ID eq '1100000101') |
and | A zároveň | Platí, pokud platí (jsou kladné) oba operandy. | (Firm_ID eq '1100000101') and (Amount ge 1000) |
or | Nebo | Platí, pokud platí (je kladný) alespoň jeden z operandů. | (Firm_ID eq '1100000101') or (Amount ge 1000) |
Web API podporuje dávkové/transakční zpracování, tj. je možné spojit několik operací/požadavků do jedné dávky a zajistit, že všechny operace budou provedeny jako celek nebo se neprovede žádná z nich.
{
"type": string,
"id": string,
"data": any,
"allow_expr": boolean
}
Kde má každá vlastnost své patřičné využití.
Vlastnost | Popis |
---|
type | Typ operace. |
ID | Unikátní identifikátor operace v rámci jedné dávky. Nesmí začínat číslicí. |
data | Konkrétní obsah operace. |
allow_expr | Příznak, zda je v datech operace povoleno používat výrazy. Nepovinná vlastnost, výchozí hodnota je false. |
Operace create, slouží k vytvoření nového záznamu.
"data": {
"class_id": "accounts",
"object_data": {
"name": "acc 1",
"code": "009"
},
"query": {
"select": ["id", "code", "name"]
},
"with-softvalidation": false,
"strictdataprotection": false
}
}
Kde má každá vlastnost své patřičné využití.
Vlastnost | Popis |
---|
class_id | ID třídy vytvářeného business objektu. |
object_data | Specifikace vytvářeného business objektu. |
query | Seznam polí z vytvořeného business objektu, která se mají vrátit v odpovědi. Nepovinná vlastnost. Výchozí hodnota je ["id"]. |
with-softvalidation | Příznak, zda se má před uložením vytvářeného objektu provést softvalidace. Nepovinná vlastnost. Výchozí hodnota je true. |
strictdataprotection | Určuje, zda se při pokusu o vytvoření BO zohledňuje přístup k chráněným položkám v rámci definic ochrany dat. Nepovinná vlastnost. Výchozí hodnota je true. |
Operace update, slouží k upravení stávajícího záznamu.
"data": {
"class_id": "accounts",
"obj_id": "1J50000101",
"object_data": {
"name": "acc 1"
},
"query": {
"select": ["id", "code", "name"]
},
"with-softvalidation": false,
"strictdataprotection": false
}
}
Kde má každá vlastnost své patřičné využití.
Vlastnost | Popis |
---|
class_id | ID třídy aktualizovaného business objektu. |
obj_id | ID aktualizovaného business objektu z uvedené třídy. |
object_data | Specifikace požadovaných změn business objektu. |
query | Seznam polí z aktualizovaného business objektu, která se mají vrátit v odpovědi. Nepovinná vlastnost. Výchozí hodnota je ["id"]. |
with-softvalidation | Příznak, zda se má před uložením změn provést softvalidace. Nepovinná vlastnost. Výchozí hodnota je true. |
strictdataprotection | Určuje, zda se při pokusu o aktualizaci BO zohledňuje přístup k chráněným položkám v rámci definic ochrany dat. Nepovinná vlastnost. Výchozí hodnota je true. |
Operace delete, slouží ke smazání existujícího záznamu.
"data": {
"class_id": "accounts",
"obj_id": "1J50000101"
}
Kde má každá vlastnost své patřičné využití.
Vlastnost | Popis |
---|
class_id | ID třídy aktualizovaného business objektu. |
obj_id | ID aktualizovaného business objektu z uvedené třídy. |
V tomto oddíle naleznete příklady práce s adresářem firem.
Zobrazí všechny záznamy z číselníku Adresář firem se všemi údaji
GET
https://atd.abra.eu/demodata/firms
POST
https://atd.abra.eu/demodata/firms/query
{"select": []}
POST
https://atd.abra.eu/demodata/query
{"class": "firms", "select": []}
[
{
"afterdueterm": 0,
"afterduetermenabled": false,
"checkcredit": false,
"code": "111",
"commercialsagreement": 0,
"communicationtype_id": null,
"correctedat$date": null,
"taxidentnumber": "",
"name:": "CarComponents Corp.",
"turnover_id": null,
"vatcountry_id": null,
"vatidentnumber": "",
"vatpayor": false,
"wwwaddress": ""
},
{
"afterdueterm": 0,
"afterduetermenabled": false,
"checkcredit": false,
"code": "00022",
"commercialsagreement": 0,
"communicationtype_id": null,
"correctedat$date": "2006-10-24T14:27:43.451",
"correctedby_id": "1300000101",
"name": "Teer Corporation",
"taxidentnumber": "",
"turnover_id": null,
"vatcountry_id": null,
"vatidentnumber": "",
"vatpayor": false,
"wwwaddress": ""
},
...
]
Díky klauzuli SELECT získáme námi vybrané záznamy z číselníku Adresář firem se všemi údaji
GET
https://atd.abra.eu/demodata/firms?select=id,name+as+Nazev
POST
https://atd.abra.eu/demodata/firms/query
{"select": ["ID", {"value":"Name","name":"Nazev"}]}
POST
https://atd.abra.eu/demodata/query
{
"class": "firms",
"select": ["ID", {"value":"Name","name":"Nazev"}]
}
Zde využijeme klauzuli EXPAND, která nám dopomůže zobrazit i detail z řádků provozoven
GET
https://atd.abra.eu/demodata/firms?select=id,name&expand=firmoffices(name,address_id.street)
POST
https://atd.abra.eu/demodata/firms/query
{"select": ["ID", "Name", {"name":"firmoffices","value":["Name","Address_id.street"]}]}
POST
https://atd.abra.eu/demodata/query
{
"class": "firms",
"select": ["ID", "Name", {"name":"firmoffices","value":["Name","Address_id.street"]}]
}
Smazání záznamu se provádí metodou DELETE, nicméně pro smazání záznamu je nezbytné udat ID požadovaného objektu.
DELETE
https://atd.abra.eu/demodata/firms/3000000101
Skrytí firmy se provádí nastavení položky hidden na hodnotu true.
BodyPUT
https://atd.abra.eu/demodata/firms/9000000101
{"hidden": true}
POST
https://atd.abra.eu/demodata/firms/query
{"where": ["id like 'Q760100101'"], "hidden": true}
POST
https://atd.abra.eu/demodata/query
{
"class": "firms",
"where": ["id like 'Q760100101'"],
"hidden": true
}
Zobrazení skrytých firem, se provádí parametrem hidden.
BodyGET
https://atd.abra.eu/demodata/firms/views/hidden?select=id,name
{"hidden": true}
Do této sekce jsou zařazeny různé příklady související se skladovými doklady - zejména jejich vytváření a také čerpání obsahu z určitého typu dokladu do jiného a se skladovým hospodářstvím obecně.
V těle požadavku nevyplňujte zároveň celkovou a jednotkovou cenu. Business logika ABRA Gen ceny automaticky dopočítává a zaokrouhluje dle nastavení. Pokud by spolu uvedené ceny nekorespondovaly, požadavek by skončil chybou.
BodyPOST
https://atd.abra.eu/demodata/receiptcards?select=id
{
"actualizesuppliers": true,
"docdate$date": "2018-08-31T00:00:00.000",
"docqueue_id": "O600000101",
"firm_id": "3000000101",
"firmoffice_id": "3000000101",
"rows": [
{
"rowtype": 3,
"store_id": "2100000101",
"storecard_id": "2100000101",
"quantity": 2,
"qunit": "ks",
"unitprice": 1500,
"division_id": "2100000101"
}
]
}
Status: 201 Created
{
"id": "DJ20000101"
}
Přesun mezi sklady se provádí pomocí dvojice dokladů Převodka výdej a Převodka příjem.
Obsah pro Body můžete použít z prvního příkladuPOST
https://atd.abra.eu/demodata/outgoingtransfers?select=id
Převodka příjem se vždy vytváří importem existující Převodky výdej.
BodyPOST
https://atd.abra.eu/demodata/incomingtransfers/import/outgoingtransfers/9J20000101?select=id
{
"params": {
"docqueue_id": "S600000101",
"store_id": "3200000101"
}
}
Vytvoření dodacího listu s jedním skladovým řádkem.
BodyPOST
https://atd.abra.eu/demodata/billsofdelivery?select=id
{
"docdate$date": "2018-08-31T00:00:00.000",
"docqueue_id": "P600000101",
"firm_id": "3000000101",
"firmoffice_id": "3000000101",
"rows": [
{
"rowtype": 3,
"store_id": "3200000101",
"storecard_id": "2100000101",
"quantity": 2,
"qunit": "ks",
"division_id": "2100000101"
}
]
}
Přidání dodavatele (existující firmy z adresáře firem) k existující skladové kartě.
BodyPOST
https://atd.abra.eu/demodata/billsofdelivery?select=id
{
"storecard_id": "I600000101",
"firm_id": "J000000101",
"unitpurchaseprice": 280,
"purchasecurrency_id": "0000CZK000",
"purchasecurrrate": 1,
"purchasedate$date": "2019-04-15T06:48:25.372Z",
"qunit": "l",
"unitrate": 1
}
Vytvoření dodacího listu s jedním skladovým řádkem.
BodyPUT
https://atd.abra.eu/demodata/storecards/I600000101?select=id,mainsupplier_id
{
"mainsupplier_id": "ID00000101"
}
Příklad demonstruje omezování záznamů podle filtrovacích podmínek s využitím klauzule WHERE. Výběr chceme omezit za skladové menu Počítačové komponenty. Klauzule ORDERBY setřídí data dle zadané položky, v našem příkladu podle kódu.
GET
https://atd.abra.eu/demodata/storecards?select=id,code,name&where=storemenuitem_id+eq+'A000000101'&orderby=code
Příklad omezení počtu záznamů, pokud potřebujeme záznamy získávat po částech. Klauzule TAKE udává počet vracených záznamů, klauzule SKIP počet přeskočených záznamů. Praktickou oblastí využití této funkcionality je stránkování.
GET
https://atd.abra.eu/demodata/storecards?select=id,code,name&where=storemenuitem_id+eq+'A000000101'&orderby=code&take=3&skip=5
Příklady v této sekci se věnují práci s objednávkami - podíváme se na jejich načítání, vytváření a úpravy.
V těle požadavku nevyplňujte zároveň celkovou a jednotkovou cenu. Business logika ABRA Gen ceny automaticky dopočítává a zaokrouhluje dle nastavení. Pokud by spolu uvedené ceny nekorespondovaly, požadavek by skončil chybou.
BodyPOST
https://atd.abra.eu/demodata/receivedorders?select=id
{
"docqueue_id": "I700000101",
"firm_id": "2800000101",
"ExternalNumber": "Objednávka z e-shopu č. 1",
"PricesWithVAT": true,
"rows": [
{
"rowtype": 3,
"store_id": "2100000101",
"storecard_id": "Z100000101",
"quantity": 1,
"division_id": "2100000101"
}
]
}
Status: 201 Created
{
"id": "4700000101"
}
Doplnění řádku s dopravným do existující objednávky přijaté s ID 5700000101. Jedná se o aktualizaci existujícího objektu, proto použijeme metodu PUT.
BodyPUT
https://atd.abra.eu/demodata/receivedorders/5700000101?select=id
{
"rows": [
{
"rowtype": 1,
"text": "Dopravné a balné",
"totalprice": 125,
"vatrate_id": "02100X0000",
"division_id": "2100000101"
}
]
}
Tisk objednávky přijaté s ID 1700000101 do PDF souboru s využitím systémové tiskové sestavy Formulář objednávky přijaté.
GET
https://atd.abra.eu/demodata/receivedorders.pdf?select=id&report=9700000001&where=id+eq+'1700000101'
Potřebujeme získat seznam objednávek přijatých, které dosud nejsou zcela vyčerpány do následných dokladů. Jedná se o další ukázku využití klauzule WHERE.
GET
https://atd.abra.eu/demodata/receivedorders?where=isavailablefordelivery+eq+'A'&select=id,externalnumber,firm_id.name
Potřebujeme získat seznam objednávek přijatých od určitého odběratele (firmy), ve kterých si tento odběratel objednával určitou skladovou kartu. Jedná se o ukázku omezení podle vnořené kolekce s využitím klauzule exists.
GET
https://atd.abra.eu/demodata/receivedorders/?select=displayname,firm_id&expand=rows(storecard_id,store_id,quantity,qunit,rowtype)&where=exists(rows where storecard_id eq '7100000101') and firm_id eq '5000000101'
Příklady související s ceníky - zejména dotazování na existující záznamy.
Jedná se o příklad rozšířeného dotazování, kdy je dotaz předáván v těle POST požadavku.
BodyPOST
https://atd.abra.eu/demodata/storeprices/query
{
"select" : ["PriceList_ID", "Storecard_ID.Name",
{"name": "pricerows", "value": ["Price_ID","Price_ID.Name","Amount"]}],
"where" : "StoreCard_ID='Z100000101'"
}
Status: 200 OK
[
{
"PriceList_ID": "2100000101",
"StoreCard_ID.Name": "Mainboard Shuttle 100",
"pricerows": [
{
"Price_ID": "2100000101",
"Price_ID.Name": "Koncová prod.cena - s DPH",
"Amount": 3500 },
{
"Price_ID": "1000000101",
"Price_ID.Name": "Dealerská prod.cena - bez DPH3300"
}
]
}
]
Další příklad rozšířeného dotazování (dotaz předávaný v těle POST požadavku).
BodyPOST
https://atd.abra.eu/demodata/storeprices/query
{
"select" : ["StoreCard_ID.Name",{"name": "Ceny", "value": {"field": "PriceRows", "query":{
"select": ["Price_ID.Name","Amount",{"name": "Skladová karta","value": "Parent_ID.StoreCard_ID.Name"}],
"where": "Price_ID='2100000101'"}}}],
"where" : "StoreCard_ID='Z100000101' and PriceList_ID='2100000101'"
}
Další příklad rozšířeného dotazování (dotaz předávaný v těle POST požadavku).
BodyPOST
https://atd.abra.eu/demodata/storeprices/query
{
"select" : ["StoreCard_ID.Name",{"name": "Ceny", "value": {"field": "PriceRows", "query": {
"select": ["Price_ID.Name","Amount",{"name": "Skladová karta","value": "Parent_ID.StoreCard_ID.Name"}],
"where": "Price_ID='2100000101'"}}}],
"where" : "StoreCard_ID='Z100000101' and PriceList_ID='2100000101'"
}
Příklad volání QR funkce v rámci POST požadavku. Funkce NxGetStoreCardUnitPrice vrací jednotkovou cenu v požadované měně s DPH nebo bez DPH pro zadanou skladovou kartu, sklad, jednotku, definici ceny a firmu.
BodyPOST
https://atd.abra.eu/demodata/qrexpr
{"expr" : "NxGetStoreCardUnitPrice('2800000101', NxStoreID('01'), 'Z100000101', 1, 'ks', '', NxNow, True, '', True, '', '', True, '')"}
Požadavek realizujeme prostřednictvím vytvoření nového řádku v daném ceníku.
BodyPOST
https://atd.abra.eu/demodata/pricelists/1200000101/rows
{
"validfromdate$date": "2018-01-01",
"description": "Nový ceník"
}
Ceník je jakási obálka kolem skladových cen. Na ceníku se určuje časová platnost. Každý ceník má své časové platnosti, které není možné ceníky sdílet. Časová platnost má hodnotu ValidFrom$DATE, která určuje platnost od. Do kdy je platnost aktuální určuje až následující záznam. Pokud neexistuje, je časová platnost neomezená. Časové platnosti nejsou pro ceníky povinné.
BodyPOST
https://atd.abra.eu/demodata/storeprices
{
"PriceRows": [
{
"amount": 7900,
"price_id": "1000000101",
"qunit": "ks",
"unitrate": 1
},
{
"amount": 10999,
"price_id": "2100000101",
"qunit": "ks",
"unitrate": 1
}
],
"pricelist_id": "1200000101",
"pricelistvalidity_id": "1200000101",
"storecard_id": "2100000101"
}
Příklad zobrazí ID ceníků a jejich zadané meze platností - nejstarší a nejnovější.
BodyPOST
https://atd.abra.eu/demodata/query
{
"class": "PriceLists",
"select": [
"ID",
{
"name": "last_validity",
"value": {
"field": "rows",
"query": {
"select": "max(validfromdate$date)",
"groupby": "parent_id"
}
}
},
{
"name": "first_validity",
"value": {
"field": "rows",
"query": {
"select": "min(validfromdate$date)",
"groupby": "parent_id"
}
}
}
]
}
Příklady na vyhledávání položek (pozic a skladových karet) a jejich doplňování do hlavních inventárních protokolů a dílčích inventárních protokolů.
Na hlavní inventární protokol s ID 1400000101 přidáme skladovou kartu s ID 2100000101 a jednotkou se zkratkou kg.
BodyPOST
https://atd.abra.eu/demodata/maininvprotocols/1400000101/storecards
{
"storecard_id": "2100000101",
"qunit": "kg"
}
Status: 201 Created
{
"miprow_id": "1O00000101"
}
Zjišťujeme, zda hlavní inventární protokol s ID 1400000101 obsahuje skladovou kartu s ID 2100000101.
GET
https://atd.abra.eu/demodata/maininvprotocols/1400000101/storecards?storecard_id=2100000101
Na hlavní inventární protokol s ID 2300000101 přidáme skladovou pozici s ID 2000000101.
BodyPOST
https://atd.abra.eu/demodata/maininvprotocols/1400000101/storecards?storecard_id=2100000101
{
"storeposition_id":"2000000101"
}
Zjišťujeme, zda hlavní inventární protokol s ID 2300000101 obsahuje skladovou kartu s ID 2000000101.
GET
https://atd.abra.eu/demodata/maininvprotocols/2300000101/positions?storeposition_id=2000000101
Na pozici dílčího inventárního protokolu s ID 2000000101 přidáme řádek se skladovou kartou s ID 1J00000101, jednotkou kg a rovnou nastavíme zjištěný počet 1.
BodyPOST
https://atd.abra.eu/demodata/partialinvprotocolpositions/2000000101/storecards
{
"storecard_id": "1J00000101",
"qunit": "kg",
"unitrealquantity": 1
}
Zjišťujeme, zda v pozici s ID 2000000101 existuje řádek obsahující skladovou kartu s ID 1J00000101.
GET
https://atd.abra.eu/demodata/partialinvprotocolpositions/2000000101/storecards?storecard_id=1J00000101
Na pozici dílčího inventárního protokolu s ID 2000000101 přidáme řádek se skladovou kartou s ID 1J00000101, jednotkou kg a rovnou nastavíme zjištěný počet 1.
BodyPOST
https://atd.abra.eu/demodata/partialinvprotocolrows/1H00000101/storebatches
{
"storebatch_id": "AB00000101",
"qunit": "kg",
"unitrealquantity": 1
}
Zjišťujeme, zda v pozici s ID 2000000101 existuje řádek obsahující skladovou kartu s ID 1J00000101.
GET
https://atd.abra.eu/demodata/partialinvprotocolrows/1H00000101/storebatches?storebatch_id=AB00000101
Následující požadavek vrátí informaci o dostupném množství určité skladové položky s ID Z100000101 (snížené o případné rezervace), přes všechny sklady.
BodyGET
https://atd.abra.eu/demodata/qrexpr
{
"expr": "NxGetAvailableQuantity('Z100000101','',0)"
}
{
"result": 9
}
Následující požadavek vrátí dostupné množství skladové karty s ID Z100000101 na skladu s kódem 01.
BodyGET
https://atd.abra.eu/demodata/qrexpr
{
"expr": "NxGetAvailableQuantity('Z100000101',NxStoreID('01'),0)"
}
Příklady v této sekci se týkají funkcionality obecné ochrany dat.
Příznak Zaměstnanec/Pracovník v adresáři osob není možné editovat přímo, ale je zapotřebí použít speciální funkci Hromadná oprava "Zaměstnanec/Pracovník". Stejně tak ve Web API slouží k tomuto účelu speciální metoda dataprotectionswitch.
BodyPUT
https://atd.abra.eu/demodata/persons/5000000101/dataprotectionswitch?select=lastname,isemployee
{
"IsEmployee": true
}
Status: 200 OK
{
"lastname": "Smith",
"isemployee": true
}
Příznak Právnická osoba v adresáři firem není možné editovat přímo, ale je zapotřebí použít speciální funkci Hromadná úprava Právního subjektu. Stejně tak ve Web API slouží k tomuto účelu speciální metoda dataprotectionswitch.
BodyPUT
https://atd.abra.eu/demodata/firms/6000000101/dataprotectionswitch?select=name,legalperson
{
"LegalPerson": true
}
Další příklady z praxe, které se nevešly do žádné z předchozích kategorií.
Příklad na použití funkce NxSQLSelect.
BodyPOST
https://atd.abra.eu/demodata/qrexpr
{
"expr": "CfxDateToStr(NxStrToInt(NxSQLSelect('Select JO.ScheduledAt$Date from Relations R left join PLMProduceRequests PR on PR.ID=R.RightSide_Id left join PLMJobOrders JO on JO.ID=PR.JobOrder_ID where R.REL_DEF=1620 and R.LeftSide_ID=' + NxQuotedStr('1600000101'),'',';','')),'DD.MM.YYYY','.')"
}
Status: 200 OK
{
"result": "17.10.2017"
}
Další příklad z výroby.
BodyPOST
https://atd.abra.eu/demodata/query
{
"class": "ReceivedOrders",
"select": [
"ID",
"DisplayName",
{
"name": "X-Vazby",
"value": {
"class": "Relations",
"select": [
"RightSide_ID",
{
"name": "PLM",
"value": {
"class": "PLMProduceRequests",
"select": "DisplayName",
"where": "id = :RightSide_ID"
}
}
],
"where": "Rel_Def=1620 and LeftSide_ID=:ID"
}
}
],
"where": "Firm_ID = 'L000000101'"
}
Příklad na použití importního manažeru.
BodyPOST
https://atd.abra.eu/demodata/billsofdelivery/import/receivedorders/1700000101?select=id,displayname
{
"params": {
"docqueue_id": "P600000101"
}
}
Další příklad použití importního manažeru.
BodyPOST
https://atd.abra.eu/demodata/otherincomes?select=id,displayname
{
"DocQueue_ID": "3600000101",
"Country_ID": "00000CZ000",
"Firm_ID": "2800000101",
"FirmOffice_ID": "2800000101",
"VATDocument": 0,
"Currency_ID": "0000CZK000",
"PDocumentType": "03",
"PDocument_ID": "3L00000101",
"ElectronicPayment": 1,
"EET": 1,
"Rows": [
{
"Division_ID": "2100000101",
"TAmount": 3450
}
]
}
Zápis tržby do systému, získání FIK a BKP.
BodyPUT
https://atd.abra.eu/demodata/eetturnovers/3300000101/process
{
"@id": "/demodata/eetturnovers/3300000101/process/3300000101",
"displayname": "OSP-1/2017",
"id": "3300000101",
"classid": "ENOR1TF5WOFODJWGHWKOLF1BTC",
...
"bkp": "B2EC1F03-6EF27A16-F2FA8ED3-A98DDC12-39C5A5C7",
"fik": "be7cf08a-5ce7-46aa-98b8-e89fed8b2dc9-ff",
...
}
Pro práci s definovatelným číselníkem prostřednictvím Web API je zapotřebí v jeho vlastnostech vyplnit položku Název kolekce ve Web API. V našem případě jsme si nadefinovali číselník barev a název kolekce nastavili na hodnotu colors.
GET
https://atd.abra.eu/demodata/colors
Použití neperzistentní položky DisplayName. Načítá se celý objekt z databáze a pole se vypočítává, proto zpracování trvá delší dobu.
GET
https://atd.abra.eu/demodata/issuedinvoices?select=displayname
Identický výsledek jako v předchozím příkladu lze získat také s použitím perzistentních položek. Název vrácené položky můžeme pro zvýšení srozumitelnosti přejmenovat pomocí klíčového slova as.
GET
https://atd.abra.eu/demodata/select=DocQueue_ID.Code || '-' || OrdNumber || '/' || Period_ID.Code+as+DisplayName
Příklad použití vnořeného EXISTS v klauzuli WHERE.
BodyGET
https://atd.abra.eu/demodata/query
{
"class": "storecards",
"select": [
{ "value": "ID", "name": "idecko" },
"Code",
"Name",
"EAN",
{
"name": "StoreUnits",
"value": [
"ID",
{
"name": "StoreEans",
"value": [
"EAN"
]
}
]
}
],
"where": "exists(StoreUnits WHERE exists(StoreEANS WHERE EAN = '123698776559'))"
}
Web API umožňuje provést aktualizaci hodnot na hlavičce a v řádcích určitého dokladu v rámci jediného požadavku.
BodyPUT
https://atd.abra.eu/demodata/issuedinvoices/8M00000101
{
"description": "dodávka 9/2018",
"rows": [
{
"id": "VM00000101",
"unitprice" : 3000.0,
"quantity": 4
}
]
}