1. Domů
  2. Dokumentace
  3. API
  4. Vzorové requesty
  5. GraphQL

GraphQL

1.) Obecná syntaxe

Seznam endpointů je možné vyčíst z GraphQL schéma z našeho demo serveru, kde je vždy nasazena poslední platná verze Money i API.

GET request

GET http(s)://[adresa API]/graphql?query={[dotaz]}
Authorization: Bearer [token]

POST request

POST http(s)://[adresa API]/graphql
Authorization: Bearer [token]
request body: {„query“:“{[dotaz]}“}

Schéma

GET http(s)://[adresa API]/graphql/schema
(bez autorizace)

2.) Čtení dat (select)

2.1 číslo verze
GET http(s)://[adresa API]/graphql?query={Version}
POST http(s)://[adresa API]/graphql
request body: {"query":"{Version}"}
2.2. seznam firem
GET http(s)://[adresa API]/graphql?query={Companies{ID,Kod,Nazev}}
POST http(s)://[adresa API]/graphql
request body: {"query":"{Companies{ID,Nazev,ObchMisto}}"}
2.3 firma (dle ID)
GET http(s)://[adresa API]/graphql?query={Company(ID:"64d9f777-0035-40c2-9954-572fe61298fe"){ID,Kod,Nazev}}
POST http(s)://[adresa API]/graphql
request body:
{"query":"{Company(ID:\"64d9f777-0035-40c2-9954-572fe61298fe\"){ID,Nazev,ObchMisto}}"}
nebo
{"query":"{Companies (Filter:\"ID~eq~64d9f777-0035-40c2-9954-572fe61298fe\") {ID,Kod,Nazev} }"}
2.4 seznam zakázek
GET http(s)://[adresa API]/graphql?query={JobOrders{ID,Kod,Nazev}}
POST http(s)://[adresa API]/graphql
request body: {"query":"{JobOrders{ID, Kod, Nazev, Firma_ID, Firma{ID, Nazev}}}"}
2.5 zakázka (dle ID)
GET http(s)://[adresa API]/graphql?query={JobOrder(ID:"7734856e-e003-4b29-9bfa-561498a80b33"){ID,Kod,Nazev}}
POST http(s)://[adresa API]/graphql
request body: {"query":"{JobOrder(ID:\"7734856e-e003-4b29-9bfa-561498a80b33\") {ID,Kod,Nazev}}"}
2.6 Skupiny v seznamech (Group_ID)

Při zaslání dokladu je vhodné použít i Group_ID, který doklad zapíšete do specifické skupiny, která může mít nastavenou například svou číselnou řadu nebo třeba středisko. V každém seznamu je jednotná skupina Nezařazeno a další skupiny si zakládají uživatele vlastní.
Názvy objektů např.: ObjednavkaPrijata, ObjednavkaVydana, FakturaPrijata, FakturaVydana, Zasoba, PolozkaCeniku, Artikl, DodaciListVydany, DodaciListPrijaty, Firma, PokladniDoklad, BankovniVypis, ProdejkaVydana, ProdejkaPrijata, SkladovyDoklad

POST http(s)://[adresa API]/graphql
request body: {"query":"{MerpGroups(ObjectName:\"ObjednavkaVydana\") {ID, Parent_ID, Kod, Nazev, Object_ID, ObjectName}}"}

Pokud je aktivní modul Eshop konektor, tak jsou dostupné i některé specifické informace pro potřeby eshop (objecty s předponou Esh_ a Eshop).

Některé příklady jsou uvedeny záměrně pro formulaci těla jako GraphQL a některé jako raw – json. Je potřeba nezapomenout na rozdíly uvození a nutnosti použít zpětných lomítek. Pro rychlý překlad vzorů lze použít např. GraphlQL to JSON Body Converter.

V případě potřeby dotazů, které jsou zanořené do nižší úrovně než 4, tak je potřeba v configuraci API nastavit vyšší hodnotu než je defaultní hodnota 4 („MaxNestingDepthLevel“: 5,). Takový typický dotaz může být například dotaz na položku dokladu, kdy přes ObsahPoložky je požadovaná informace na Katalogu o čárovém kódu nebo vlastní hmotnosti.

{
IssuedInvoices(Filter: "DatumVystaveni~gte~2022-03-17#DatumVystaveni~lte~2022-03-18") {
        CisloDokladu,
        Polozky {
            ID,
            Poradi,
            Nazev,
            Jednotka,
            Mnozstvi         
            ObsahPolozky {                
                Artikl {                
                Katalog,                
                CarovyKod,
                VlastniHmotnost
                }
            }
        }
    }
}
2.8 Stavy dokladů

Některé doklady (Objednávky přijaté, Reklamace přijaté/vydané, Servisní doklady přijaté/vydané) umožňují evidovat stav dokladu dle uživatelem zvoleného workflow neboli scénáře. Pro jeden object (např. objednávky přijaté) lze evidovat několik různých scénářů, které jsou přiřazené ke skupině dokladů.
Doklad je možné si zavolat jako celek, kde součástí požadovaných informací je i stav dokladu (viz předchozí dotazy). Samotné doklady však nelze filtrovat podle podřízeného objectu, tedy ani dle stavu dokladu. V případě potřeby vyhledat doklady jen v určitém stavu je nutné volat seznam ID (dokladů) nad objectem WorkflowDocStates, který Vám vrátí odpovídající ID dokladů, které následně aplikujete v dalším samostatném requestu pro object objednávek.

2.9 Prodejní ceny

Od verze 1.15.5 je v API dostupná funkce (ProdejniCenaDetailItem), která umožňuje exeterni získat přiřazené prodejní ceny pro konkrétní firmy. V Money je tato funkce dostupná nad Adresářem v detailu s názvem Prodejní ceny. Voláním této funkce získáte prodejní ceny katalogových položek spočítané dle cenové politiky nastavené v Money.

{
    ProdejniCeny(
      FirmaID: "e6847bf7-ba7d-47c8-b7c6-85f3e3d84711",
     #SkladID: "c0406db0-fed8-40e1-b3e2-1cc7679288d8",
     #Count: 10
    )

     {  
       ID,
       ArtiklNazev,   
       Katalog,
       CarovyKod,
       TypCeny,
       CenaBezDane,
       CenaSDani,
       Artikl_ID,
       Katalog,
       Cenik_ID,
       PolozkaCeniku_ID,
       SkladKod,
       Zasoba_ID,
       Rezervovano,
       Objednano,
       ZustatekMnozstvi
    }
}

 

3.) Zápis dat (insert)

artikl
POST http(s)://[adresa API]/graphql
{"query":"mutation { CreateArticle(Article:{Nazev: \"Artikl\"}) {ID,Nazev} }"}
objednávka přijatá
POST http(s)://[adresa API]/graphql
{"query":"mutation { CreateReceivedOrder(ReceivedOrder:{Nazev: \"objednávka\", Polozky: [{Nazev: \"položka\", ObsahPolozky: {Artikl_ID:\"848a11a5-97bc-43e4-8e88-25c803bb51ff\"}}]}) {ID,Nazev} }"}
Skupiny v seznamech (Group_ID)

Při zaslání dokladu je vhodné použít i element Group_ID, který doklad zapíšete do specifické skupiny, která může mít nastavenou například svou číselnou řadu nebo třeba středisko. V každém seznamu je jednotná skupina Nezařazeno a další skupiny si uživatelé zakládají vlastní (různé Group_ID).
Názvy objektů např.: ObjednavkaPrijata, ObjednavkaVydana, FakturaPrijata, FakturaVydana, Zasoba, PolozkaCeniku, Artikl, DodaciListVydany, DodaciListPrijaty, Firma, PokladniDoklad, BankovniVypis, ProdejkaVydana, ProdejkaPrijata, SkladovyDoklad

POST http(s)://[adresa API]/graphql
request body: {"query":"{MerpGroups(ObjectName:\"ObjednavkaVydana\") {ID, Parent_ID, Kod, Nazev, Object_ID, ObjectName}}"}

Struktura povinných a nepovinných polí je stejná i pro rest. Popis jednotlivých elementů je v rámci vzorů pro REST-API.

4.) Modifikace dat (update)

artikl
POST http(s)://[adresa API]/graphql
{"query":"mutation { EditArticle(Article:{ID: \"8cf11616-833d-4f17-b4d3-98ba92e6fd27\", Nazev: \"Artikl-upr\"}) {ID,Nazev} }"}

Při editaci dokladu hlavičky je možné použít jen změnu pro konkrétní pole. Pokud potřebujete editovat položky dokladu, tak je potřeba poslat všechny náležitosti každé položky. Editace položek v dokladu maže všechny předchozí a dosazuje nové položky, tak jak jsou zaslány.

5.) Mazání dat (delete)

artikl
POST http(s)://[adresa API]/graphql
{"query":"mutation { DeleteArticle(ID: \"8cf11616-833d-4f17-b4d3-98ba92e6fd27\") }"}

6.) Doplňkový XmlExchangeImport

V rámci GraphQL je uveřejněný i object System_XmlExchangeImport, který se používá pro externí zápis do DB pro import pomocí individuálních konfigurací Import XML. Tento object umožňuje přes API zapsat požadavek na zápis/editaci/smazání většiny objectů v Money a to včetně možností předřazení XSLT transformačních šablon. Prakticky je přes API zapsán do importní tabulky záznam včetně samotného XML a tento záznam je následně zpracován dle nastavené individuální logiky Import XML.

GraphQL
Pomohl Vám tento článek? Ano 1 Ne

Jak Vám můžeme pomoci?