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"
                }
              }
            }
          ]
        }
      }
    }
  },