Příklady jednoduchých GraphQL dotazů
Query pro zjištění aktuálně přihlášeného uživatele
Jednoduchý příklad, jehož pomocí zjistíte jméno aktuálně přihlášeného uživatele a jeho data, jako třeba zařazení ve firmě, číslo telefonu, mailovou adresu, ID v Sofa a další.
Dotaz:
query
{
currentUser {
language
user {
completeName
completeNameInverted
email
firstName
id
lastName
mobilPhone
orgDepartment
orgJob
orgRole
orgSection
personalNumber
phone
profilePictureUrl
superiorUserId
titleAfter
titleBefore
userName
}
}
}
Příklad výsledku:
{ "data": { "currentUser": { "language": "CZ", "user": { "completeName": "Ing. Chytrolín Administrátor", "completeNameInverted": "Administrátor, Chytrolín, Ing.", "email": "lapacek+admin@602.cz", "firstName": "Chytrolín", "id": "583beb7e-e7c4-4b51-8673-88b5800f05ef", "lastName": "Administrátor", "mobilPhone": "602603604", "orgDepartment": "Ředitelství", "orgJob": "Administrátor", "orgRole": "Administrátor", "orgSection": "Ředitelství", "personalNumber": "104", "phone": null, "profilePictureUrl": "https://presofa.602.cz/Image/Get?i=3B7B6649D1D5CC570464A6FC8C361BDD760B25856B9E2FDF34229E8144CAF58B", "superiorUserId": "d4b9a034-d7aa-4c48-be03-11112d4f0806", "titleAfter": null, "titleBefore": "Ing.", "userName": "lapacek+admin@602.cz" } } }
Query pro získání seznamu uživatelů organizace
Praktický dotaz, díky kterému je možné rychle zjistit seznam všech uživatelů z dané organizace, všechny potřebné údaje a například i členství ve skupinách nebo rolích.
Dotaz:
query findCompanyUsers { company{ users{ completeName email personalNumber id groups{ id name } roles{ id name } superior{ completeName email id } } } }
Příklad výsledku:
Uvedena je jen část výstupu v rozsahu jednoho uživatele.
{ "data": { "company": { "users": [ { "completeName": "Vendelín Poskok", "email": "lapacek+poskok@602.cz", "personalNumber": "105", "id": "017504d5-4028-4c36-89b8-31b726cb4b0e", "groups": [ { "id": "a380c2c6-68d7-4942-875a-eaf5ad5e5263", "name": "Všichni uživatelé" }, { "id": "28114562-b682-44d8-a222-257b062723fc", "name": "Všechny agendy" } ], "roles": [ { "id": "73364196-1580-4f98-9591-2897ea08acf9", "name": "Uživatelé certifikátů" }, { "id": "3921c6f6-3a8d-4658-9448-1a3710d080e0", "name": "Správci dotazníků" } ], "superior": { "completeName": "RNDr. Hromburác Direktor", "email": "lapacek+vedouci@602.cz", "id": "d4b9a034-d7aa-4c48-be03-11112d4f0806" } },
Query pro vyhledání konkrétního uživatele na základě emailu nebo identu
Tento dotaz může být praktický, například pokud je nutné rychle zjistit informace o konkrétním uživateli za předpokladu, že je k dispozici jeho ident nebo login. V dotazu jsou pro ukázku použity aliasy, díky kterým je možné z dotazu získat informace na první pohled bez znalosti názvů v rámci Sofy.
Dotaz:
query findUserById($userIdent: String, $userName: String) { spolecnost:company{ hledany_uzivatel:findUser(by: { id: $userIdent userName: $userName } ) { uzivatelske_jmeno:completeName prihlasovaci_email:email identifikator:id osobni_cislo:personalNumber pracovni_pozice:orgJob zarazeni:orgRole sekce:orgSection oddeleni:orgDepartment je_clen_skupin:groups { nazev_skupiny:name id_skupiny:id } je_clen_roli:roles { nazev_role:name id_role:id } } } }
Zde je potřeba v Altairu do sekce DATA zadat hodnotu proměnné, například:
-
Proměnná pro dotaz (hledání na základě adresy elektronické pošty):
{ "userName": " lapacek+vedouci@602.cz" }
-
Proměnná pro dotaz (hledání na základě identu):
{ "userIdent": " 017504d5-4028-4c36-89b8-31b726cb4b0e" }
Příklad části výstupu:
"data": { "spolecnost": { "hledany_uzivatel": { "uzivatelske_jmeno": "Vendelín Poskok", "prihlasovaci_email": "lapacek+poskok@602.cz", "identifikator": "017504d5-4028-4c36-89b8-31b726cb4b0e", "osobni_cislo": "105", "pracovni_pozice": "Firemní poskok", "zarazeni": "firemní poskok", "sekce": "Posluhové", "oddeleni": "Posluhové", "je_clen_skupin": [ { "nazev_skupiny": "Všichni uživatelé", "id_skupiny": "a380c2c6-68d7-4942-875a-eaf5ad5e5263" }, { "nazev_skupiny": "Všechny agendy", "id_skupiny": "28114562-b682-44d8-a222-257b062723fc" } ], "je_clen_roli": [ { "nazev_role": "Uživatelé certifikátů", "id_role": "73364196-1580-4f98-9591-2897ea08acf9" }, { "nazev_role": "Správci dotazníků", "id_role": "3921c6f6-3a8d-4658-9448-1a3710d080e0" } ] } } },
Dotaz je samozřejmě možné používat i se zadáním vstupní hodnoty pomocí konstanty (bez proměnných v sekci DATA) – pak by vypadal následovně. Pro další dotazy již tvar s konstantou uváděn nebude, princip je všude stejný.
query findUserById{ spolecnost:company{ hledany_uzivatel:findUser(by: { id: "017504d5-4028-4c36-89b8-31b726cb4b0e" } ) { uzivatelske_jmeno:completeName prihlasovaci_email:email identifikator:id osobni_cislo:personalNumber pracovni_pozice:orgJob zarazeni:orgRole sekce:orgSection oddeleni:orgDepartment je_clen_skupin:groups { nazev_skupiny:name id_skupiny:id } je_clen_roli:roles { nazev_role:name id_role:id } } } }
Query pro vyhledání skupin a rolí v organizaci včetně jejich identů
Tento dotaz je velmi praktický pro návrháře agend, pokud potřebují pracovat se skupinou nebo rolí na základě identifikátoru. Tímto způsobem lze velmi snadno zjistit seznam identifikátorů všech skupin a rolí v rámci dané organizace.
Dotaz:
query findGroupsAndRoles { company{ groups{ name id } roles{ name id } } }
Příklad začátku výstupu:
{ "data": { "company": { "groups": [ { "name": "Všichni uživatelé", "id": "a380c2c6-68d7-4942-875a-eaf5ad5e5263" }, { "name": "správce vozového parku", "id": "d7501504-241c-4128-b562-adbb66e539a9" }, { "name": "test skupina", "id": "c7fc8dcb-087f-4218-b381-eecf5f88aca2" },
Query pro vyhledání všech číselníků v dané organizaci (včetně DMS tříd a klasifikací)
Pomocí tohoto dotazu lze získat seznam všech číselníků a hodnot v nich uložených v rámci organizace. Jako číselník je uložený i seznam tříd a klasifikací, takže tímto způsobem lze rychle zjistit, jaké třídy a klasifikace jsou v rámci dané organizace.
Dotaz:
query findEnums { enums{ klasifikace:rank{ hodnoty:values{ nazev:displayName sofaId:value } } tridy:class{ hodnoty:values{ nazev:displayName sofaId:value } } sofa_ciselniky:enums{ nazev_ciselniku:displayName ident_ciselniku:id hodnoty:values{ zobrazovana_hodnota:displayName datova_hodnota:value } } } }
Příklad začátku výstupu:
{ "data": { "enums": { "klasifikace": { "hodnoty": [ { "nazev": "Veřejné", "sofaId": "rank_public" }, { "nazev": "Tajné", "sofaId": "rank_secret" } ] }, "tridy": { "hodnoty": [ { "nazev": "Veřejné", "sofaId": "class_public" }, { "nazev": "Schránka gx7gyfg", "sofaId": "DS_gx7gyfg" }, { "nazev": "Schránka 74kaarg", "sofaId": "DS_74kaarg" } ] }, "sofa_ciselniky": [ { "nazev_ciselniku": "Smlouva - Doba", "ident_ciselniku": "sys_enum_contract_period", "hodnoty": [ { "zobrazovana_hodnota": "Určitá", "datova_hodnota": "Určitá" }, { "zobrazovana_hodnota": "Neurčitá", "datova_hodnota": "Neurčitá" } ] },
Query pro získání seznamu agend, jejich ID a globálních proměnných
Pokud je nutné zjistit identifikátor šablony agendy a globální proměnné, které umí přijmout (například kvůli spouštění přes API), je možné to zjistit pomocí následujícího dotazu.
Dotaz:
query findAgendas{ processes{ agendas{ displayName description id createAgendaInstanceLink icon iconColor order variables { name type } } } }
Příklad začátku výstupu:
{ "data": { "processes": { "agendas": [ { "displayName": "Faktura", "description": "Evidence přijatých faktur ke zpracování", "id": "5ab8f090-caba-4504-9d00-ede8dad40dfb", "createAgendaInstanceLink": "https://presofa.602.cz/Process/StartNewProcess?ProcessAgendaIdent=a354fddd-8d6f-4f70-b63f-22f2fb8d3a19&userIdent=583beb7e-e7c4-4b51-8673-88b5800f05ef", "icon": "https://presofa.602.cz/Image/Get?i=B5AF3A98A19AFFD3FFD9463B77393EDAE1803ECDFFD807C5BF45EA3207F6A5B6&w=42&h=48&r=0", "iconColor": "9d2be0", "order": null, "variables": [] }, { "displayName": "Smlouva", "description": "Schvalování smluv a následné uložení do Archivu", "id": "e0645afb-a7d0-46c8-b3f5-822d972dadd7", "createAgendaInstanceLink": "https://presofa.602.cz/Process/StartNewProcess?ProcessAgendaIdent=cdad96bd-a48b-4ed9-b182-c64f8349f5cb&userIdent=583beb7e-e7c4-4b51-8673-88b5800f05ef", "icon": "https://presofa.602.cz/Image/Get?i=A5729503ADB672A3C043E783C5978558C62332ADF5E0BF7B65A2A574B80661D4&w=42&h=48&r=0", "iconColor": "ff7800", "order": null, "variables": [] },
Příklad stránkování
Ze strany Sofa je možné uplatňovat i stránkování výsledků. Je možné zadat počet záznamů na jednu stránku, zobrazovanou stránku a zjišťovat, zda existuje předchozí a další stránka. Uvedený příklad je na stránkování nad přijatými datovými zprávami:
Dotaz:
query queryDataMessages ( #stránka k zobrazení $pageNr: Int!, #počet záznamů na jednu stránku $pageLimit:Int! ) { docs { files { sys_dz_outgoingMessages ( view: "view_sys_dz_outgoing_messages_dz_component", area: MOD_DZ_DZ, limit:$pageLimit, page:$pageNr ) { pageInfo { #pokud existuje předchozí stránka, vrací se true hasPreviousPage #pokud existuje následující stránka, vrací se true hasNextPage } edges{ node{ sys_dz{ dmId } } } } } } }
Proměnné do sekce DATA:
{ "pageNr": 10, "pageLimit": 3 }
Příklad výstupu pro zadané parametry:
{ "data": { "docs": { "files": { "sys_dz_outgoingMessages": { "pageInfo": { "hasPreviousPage": true, "hasNextPage": true }, "edges": [ { "node": { "sys_dz": { "dmId": "7988453" } } }, { "node": { "sys_dz": { "dmId": "7986085" } } }, { "node": { "sys_dz": { "dmId": "7984251" } } } ] } } } },