Dotazy pro práci s agendami

Pomocí GraphQL je možné provádět některé operace s agendami. Například zasílat zprávy, stornovat agendu, získávat informace o instancích. Tyto operace jsou ve schématu pod klíčem processes. Pro používání pomocí externího informačního systému musí mít daný ExtIS nastavená správná oprávnění pro danou agendu.

Zaslání zprávy agendě, příjemce typ template

Mutace pro zaslání zprávy konkrétní agendě. Jedná se o příjemce typu template, tímto způsobem je tedy možné startovat nové instance agend. Pro správnou funkčnost musí být povoleno oprávnění "Zadat". Seznam agend, které dokáže aktuálně přihlášený uživatel (nebo ExtIS) zadat lze zjistit například pomocí query getStartableAgendas (viz kap. Seznam spustitelných agend), tímto dotazem lze zjistit i ID zprávy, kterou lze danou agendu spustit.

Agendě je možné zaslat soubory, případně zasílat hodnoty globálních proměnných. Pozor, pokud mutace obsahuje globální proměnné, musí být globální proměnné se stejnými názvy nadefinované v cílové agendě. Globální proměnné, které agenda umí přijmout, lze zjistit například dotazem findAgendas (viz kap. graphql_jednoduche_priklady.adoc#query-pro-ziskani-seznamu-agend) nebo dotazem getStartableAgendas (viz kap. Seznam spustitelných agend).

Soubory i globální proměnné jsou nepovinné.

mutation startAgenda
(
    $messageIdent:Guid!,
    $agendaIdent:Guid!,
    $fileIds: [File_Id!],
    $data:String,
    $globalVariables:[ProcAgendaVariable!]
    $duplicateFiles:Boolean!
)
{
processes{
    sendMessageToAgenda
    (
      #identifikator zpravy (pro systemove zpravy stejny na vsech prostredich)
      messageIdent:$messageIdent
      #identifikator agendy, je nutno zjistit z detailu agendy v administraci
      agendaIdent:$agendaIdent
      #vytvoření kopie souborů
      duplicateFiles: $duplicateFiles
      #pole identifikatoru souboru, lze jistit napriklad pres query allFiles
      fileIds:$fileIds
      variables:
      {
        #libovolny string, ktery v prichozim JSONu dostane agenda
        data:$data
        #pole globalnich promennych, ktere se maji nastavit v agende
        variables: $globalVariables
      }
    )
    {
      instance{
        id
        agendaName
        instanceIdent
        state
        version
        modifiedTime
        createdByExtIs{
          displayName
          id
        }
        createdByUser{
          completeName
          id
        }
      }
      url
    }
  }
}

Proměnné pro mutaci:

{
   "messageIdent":"20362847-a0f6-418c-9501-79c7620451dd",
   "agendaIdent":"1edd676b-70ae-40b0-9e63-4a123e0bac04",
   "duplicateFiles":false,
   "fileIds":[
      "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzaWQiOiJhcmNoaXZlLWRvY3VtZW50cyIsImZpZCI6ImRhNGYyYmY0LWQ4MTEtNGZjYy1hNjRiLThhOTllNjkxOTY4ZCIsInN0b3JlX3RlbmFudElkIjoiZjlmODc3ZDktNmFhOS00MmY4LWI2NmMtZDA3YmViNjc1MDNkIiwiaXNzIjoiaHR0cHM6Ly9wcmVzb2ZhLjYwMi5jei8ifQ.PxbCDXOvuw4xoBeWZk89kBEOGzmDt4VsU_kgbX3q3pM",
    "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzaWQiOiJhcmNoaXZlLWRvY3VtZW50cyIsImZpZCI6ImY3YmM3MjQ4LWM3YTEtNDllZS05ZTQ2LTg2MWY2ZWE4OGVmOCIsInN0b3JlX3RlbmFudElkIjoiZjlmODc3ZDktNmFhOS00MmY4LWI2NmMtZDA3YmViNjc1MDNkIiwiaXNzIjoiaHR0cHM6Ly9wcmVzb2ZhLjYwMi5jei8ifQ.CctVsDHf32_cYSQ7_fZm1Bf_20dwYGI5stUqVIBrF7U",
      "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzaWQiOiJhcmNoaXZlLWRvY3VtZW50cyIsImZpZCI6ImIxOTc5YTgyLTc4NzUtNDQ2MC1iMTQ2LTA0NzNhY2JhMGU3ZSIsInN0b3JlX3RlbmFudElkIjoiZjlmODc3ZDktNmFhOS00MmY4LWI2NmMtZDA3YmViNjc1MDNkIiwiaXNzIjoiaHR0cHM6Ly9wcmVzb2ZhLjYwMi5jei8ifQ._cKHag63haTTH1q76SX_SKuXxgh3l0hF4czKB31UnIk"
   ],
   "data":"{\"sofaUserId\": \"779d1c28-3f72-436c-b5f0-1531fab1b834\", \"adIdent\": \"f1c8b24b-a9cb-4725-aaf3-c2b2dec50378\", \"xpath\": \"/root/neco\", \"jsonpath\": \"klic1\", \"defxpath\": \"/root/element\"}",
   "globalVariables":[
      {
         "name":"globVarString",
         "type":"STRING",
         "valueString":"pokusný string ze školení"
      },
      {
         "name":"globVarInt",
         "type":"INTEGER",
         "valueInt":12345
      },
      {
         "name":"globVarBool",
         "type":"BOOLEAN",
         "valueBool":true
      },
      {
         "name":"globVarDateTime",
         "type":"DATETIME",
         "valueDateTime":"2022-03-09T08:55:55"
      },
      {
         "name":"globVarDec",
         "type":"DECIMAL",
         "valueDecimal":123.45
      },
      {
         "name":"globVarJson",
         "type":"JSON",
         "valueString":"{\"klic1\": \"hodnota 1\", \"klic2\": \"hodnota 2\", \"klic\": \"hodnota 3\"}"
      },
      {
         "name":"globVarXml",
         "type":"XML",
         "valueString":"<root><neco>nejaky obsah elementu</neco></root>"
      },
      {
         "name":"globVarXmlDef",
         "type":"XML",
         "valueString":"<root><element>hodnota ze zpravy</element></root>"
      }
   ]
}

Příklad mutace bez použití proměnných

Pokud to není v dané situaci potřeba, není nutné používat proměnné, ale potřebné informace lze vydefinovat v samotné mutaci. Takto vyplněná mutace bez použití proměnných by mohla vypadat např. následovně:

mutation startAgenda
{
 	processes{
    sendMessageToAgenda
    (
      #identifikator zpravy, mel by byt vsude stejny (pro systemovou zpravu)
      messageIdent:"20362847-a0f6-418c-9501-79c7620451dd"
      #identifikator agendy, je nutno zjistit z detaily agendy v administraci
      agendaIdent:"1edd676b-70ae-40b0-9e63-4a123e0bac04"
      fileIds:
      [
 	#fileId souboru, ktere se maji posilat, da se zjistit pres query AllFiles, jedna se o ident zacinajici eyJ...
"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzaWQiOiJhcmNoaXZlLWRvY3VtZW50cyIsImZpZCI6ImRhNGYyYmY0LWQ4MTEtNGZjYy1hNjRiLThhOTllNjkxOTY4ZCIsInN0b3JlX3RlbmFudElkIjoiZjlmODc3ZDktNmFhOS00MmY4LWI2NmMtZDA3YmViNjc1MDNkIiwiaXNzIjoiaHR0cHM6Ly9wcmVzb2ZhLjYwMi5jei8ifQ.PxbCDXOvuw4xoBeWZk89kBEOGzmDt4VsU_kgbX3q3pM",
"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzaWQiOiJhcmNoaXZlLWRvY3VtZW50cyIsImZpZCI6ImY3YmM3MjQ4LWM3YTEtNDllZS05ZTQ2LTg2MWY2ZWE4OGVmOCIsInN0b3JlX3RlbmFudElkIjoiZjlmODc3ZDktNmFhOS00MmY4LWI2NmMtZDA3YmViNjc1MDNkIiwiaXNzIjoiaHR0cHM6Ly9wcmVzb2ZhLjYwMi5jei8ifQ.CctVsDHf32_cYSQ7_fZm1Bf_20dwYGI5stUqVIBrF7U",
"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzaWQiOiJhcmNoaXZlLWRvY3VtZW50cyIsImZpZCI6ImIxOTc5YTgyLTc4NzUtNDQ2MC1iMTQ2LTA0NzNhY2JhMGU3ZSIsInN0b3JlX3RlbmFudElkIjoiZjlmODc3ZDktNmFhOS00MmY4LWI2NmMtZDA3YmViNjc1MDNkIiwiaXNzIjoiaHR0cHM6Ly9wcmVzb2ZhLjYwMi5jei8ifQ._cKHag63haTTH1q76SX_SKuXxgh3l0hF4czKB31UnIk"
      ]
      #vytvoření kopie souborů
      duplicateFiles: false
      variables:
      {
        data:"{\"sofaUserId\": \"779d1c28-3f72-436c-b5f0-1531fab1b834\", \"adIdent\": \"f1c8b24b-a9cb-4725-aaf3-c2b2dec50378\"}"
        variables:[
          {
            name: "globVarString"
            type: STRING
            valueString: "pokusný string ze školení"
          },
          {
            name: "globVarInt"
            type: INTEGER
            valueInt: 12345
          },
          {
            name: "globVarBool"
            type: BOOLEAN
            valueBool: true
          },
          {
            name: "globVarDateTime"
            type: DATETIME
            valueDateTime: "2022-03-09T08:55:55"
          },
          {
            name: "globVarDec"
            type: DECIMAL
            valueDecimal: 123.45
          },
          {
            name: "globVarJson"
            type: JSON
            valueString:"{klic1: \"tady je nejaky string\", klic2: 1234, klic3: \"zase nejaky string\"}"
          },
          {
            name: "globVarXml"
            type: XML
            valueString:"<root><neco>aa\"\"aaa</neco></root>"
          },
          #{
          #  name: "globVarStringDef"
          #  type: STRING
          #  valueString: "nějaký jiný string poslaný z API"
          #}
        ]
      }
    )
    {
      instance{
        id
        agendaName
        instanceIdent
        state
        version
        modifiedTime
        createdByExtIs{
          displayName
          id
        }
        createdByUser{
          completeName
          id
        }
      }
      url
    }
  }
}

Zaslání zprávy agendě, příjemce typ instance

Mutace pro zaslání zprávy konkrétní instanci agendy. Oprávnění k zaslání zprávy se řeší buď ze strany samotné agendy na základě nastavení oprávnění na samotném prvku přijetí zprávy, případně lze globálně povolit oprávněním „Supervizor“.

Instanci agendy je možné zaslat soubory, případně zasílat hodnoty globálních proměnných. Pozor, pokud mutace obsahuje globální proměnné, musí být globální proměnné se stejnými názvy nadefinované v cílové agendě. Globální proměnné, které instance agendy umí přijmout, lze zjistit například dotazem findAgendas (viz kapitola graphql_jednoduche_priklady.adoc#query-pro-ziskani-seznamu-agend) nebo dotazem getStartableAgendas (viz kapitola Seznam spustitelných agend).

Soubory i globální proměnné jsou nepovinné.

mutation messageToInstance
(
    $messageIdent:Guid!,
    $instanceIdent:Guid!,
    $fileIds: [File_Id!],
    $data:String,
    $globalVariables:[ProcAgendaVariable!]
    $duplicateFiles:Boolean!
)
{
 processes{
    sendMessageToInstance
     (
      #identifikator zpravy (pro systemove zpravy stejny na vsech prostredich)
      messageIdent: $messageIdent
      #identifikator agendy, je nutno zjistit z detailu agendy v administraci
      instanceIdent: $instanceIdent
      #vytvoření kopie souborů
      duplicateFiles: $duplicateFiles
      #identifikatory souboru, lze jistit napriklad pres query allFiles
      fileIds: $fileIds
      variables:
      {
        #libovolny string, ktery v prichozim JSONu dostane agenda
        data:$data
        #pole globalnich promennych, ktere se maji nastavit v agende
        variables: $globalVariables
      }
    )
    {
        instanceIdent
        agendaName
    }
  }
}

Proměnné pro mutaci:

{
   "messageIdent":"3ae9586b-7bc4-449b-8e99-6d71f5059611",
   "instanceIdent":"11ba12f9-36a5-4450-b5cb-2bf2adf17a55",
   "duplicateFiles":false,
   "fileIds":[
"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzaWQiOiJhcmNoaXZlLWRvY3VtZW50cyIsImZpZCI6IjYwODZjNzJhLWUwMjQtNDhhYy04NDI0LWM5NDA4NTJjZDI3OCIsInN0b3JlX3RlbmFudElkIjoiZjlmODc3ZDktNmFhOS00MmY4LWI2NmMtZDA3YmViNjc1MDNkIiwiaXNzIjoiaHR0cHM6Ly9wcmVzb2ZhLjYwMi5jei8ifQ.0fv8Ddn67wZ-VN7HzFW2tPypCbwGkJYHx-FHnxl-Ehw",
  "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzaWQiOiJhcmNoaXZlLWRvY3VtZW50cyIsImZpZCI6IjE4MjY3Yjg3LTlmZjctNDY3Zi04YWE4LWRhZmZlMzlmY2UxYSIsInN0b3JlX3RlbmFudElkIjoiZjlmODc3ZDktNmFhOS00MmY4LWI2NmMtZDA3YmViNjc1MDNkIiwiaXNzIjoiaHR0cHM6Ly9wcmVzb2ZhLjYwMi5jei8ifQ.3EuAjPZKIWeIvD_eq_bs5zLlDUzZNdH984anNwbxtvg",
   "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzaWQiOiJhcmNoaXZlLWRvY3VtZW50cyIsImZpZCI6IjRjYzg4YmUwLTk3NWMtNDkxNy05NDg0LWZjYTU4MzA2OTIxYyIsInN0b3JlX3RlbmFudElkIjoiZjlmODc3ZDktNmFhOS00MmY4LWI2NmMtZDA3YmViNjc1MDNkIiwiaXNzIjoiaHR0cHM6Ly9wcmVzb2ZhLjYwMi5jei8ifQ.veceO2nbL3x1hwSPThgWRAIzVVhm6Ay1tHnj5NQtK-w"
   ],
   "data":"libovolný string, může být JSON nebo cokoliv jiného",
   "globalVariables":[
      {
         "name":"globVarString",
         "type":"STRING",
         "valueString":"pokusný string ze školení pro instanci"
      },
      {
         "name":"globVarInt",
         "type":"INTEGER",
         "valueInt":98765
      },
      {
         "name":"globVarBool",
         "type":"BOOLEAN",
         "valueBool":false
      },
      {
         "name":"globVarDateTime",
         "type":"DATETIME",
         "valueDateTime":"2000-12-31T08:55:55"
      },
      {
         "name":"globVarDec",
         "type":"DECIMAL",
         "valueDecimal":98.765
      },
      {
         "name":"globVarJson",
         "type":"JSON",
         "valueString":"{klic1: \"tady je nejaky string\", klic2: 1234, klic3: \"zase nejaky string\"}"
      },
      {
         "name":"globVarXml",
         "type":"XML",
         "valueString":"<root><neco>aa\"\"aaa</neco></root>"
      }
   ]
}

Příklad mutace bez použití proměnných

Pokud to není v dané situaci potřeba, není nutné používat proměnné, ale potřebné informace lze vydefinovat v samotné mutaci. Takto vyplněná mutace bez použití proměnných by mohla vypadat např. následovně:

mutation messageToInstance($instanceIdent:Guid!, $messageIdent: Guid!)
{
 	processes{
    sendMessageToInstance
    (
      #identifikator zpravy, mel by byt vsude stejny (pro systemovou zpravu)
      messageIdent:$messageIdent
      #identifikator agendy, je nutno zjistit z detaily agendy v administraci
      instanceIdent:$instanceIdent
      fileIds:
      [
 			#fileId souboru, ktere se maji posilat, da se zjistit pres query AllFiles, jedna se o ident zacinajici eyJ...
"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzaWQiOiJhcmNoaXZlLWRvY3VtZW50cyIsImZpZCI6IjYwODZjNzJhLWUwMjQtNDhhYy04NDI0LWM5NDA4NTJjZDI3OCIsInN0b3JlX3RlbmFudElkIjoiZjlmODc3ZDktNmFhOS00MmY4LWI2NmMtZDA3YmViNjc1MDNkIiwiaXNzIjoiaHR0cHM6Ly9wcmVzb2ZhLjYwMi5jei8ifQ.0fv8Ddn67wZ-VN7HzFW2tPypCbwGkJYHx-FHnxl-Ehw",
"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzaWQiOiJhcmNoaXZlLWRvY3VtZW50cyIsImZpZCI6IjE4MjY3Yjg3LTlmZjctNDY3Zi04YWE4LWRhZmZlMzlmY2UxYSIsInN0b3JlX3RlbmFudElkIjoiZjlmODc3ZDktNmFhOS00MmY4LWI2NmMtZDA3YmViNjc1MDNkIiwiaXNzIjoiaHR0cHM6Ly9wcmVzb2ZhLjYwMi5jei8ifQ.3EuAjPZKIWeIvD_eq_bs5zLlDUzZNdH984anNwbxtvg",
"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzaWQiOiJhcmNoaXZlLWRvY3VtZW50cyIsImZpZCI6IjRjYzg4YmUwLTk3NWMtNDkxNy05NDg0LWZjYTU4MzA2OTIxYyIsInN0b3JlX3RlbmFudElkIjoiZjlmODc3ZDktNmFhOS00MmY4LWI2NmMtZDA3YmViNjc1MDNkIiwiaXNzIjoiaHR0cHM6Ly9wcmVzb2ZhLjYwMi5jei8ifQ.veceO2nbL3x1hwSPThgWRAIzVVhm6Ay1tHnj5NQtK-w"
      ]
      #vytvoření kopie souborů
      duplicateFiles: false
      variables:
      {
        data:"libovolný string pro istanci, může tu být JSON, XML, či něco jiného"
        variables:[
          {
            name: "globVarString"
            type: STRING
            valueString: "pokusný string ze školení pro instanci"
          },
          {
            name: "globVarInt"
            type: INTEGER
            valueInt: 98765
          },
          {
            name: "globVarBool"
            type: BOOLEAN
            valueBool: false
          },
          {
            name: "globVarDateTime"
            type: DATETIME
            valueDateTime: "2000-12-31T08:55:55"
          },
          {
            name: "globVarDec"
            type: DECIMAL
            valueDecimal: 98.765
          },
          {
            name: "globVarJson"
            type: JSON
            valueString:"{klic1: \"tady je nejaky string\", klic2: 1234, klic3:
                          \"zase nejaky string\"}"
          },
          {
            name: "globVarXml"
            type: XML
            valueString:"<root><neco>aa\"\"aaa</neco></root>"
          },
          #{
          #  name: "globVarStringDef"
          #  type: STRING
          #  valueString: "nějaký jiný string poslaný z API"
          #}
        ]
      }
    )
    {
        instanceIdent
    }
  }
}

Zjištění dostupných instancí

Query pro zjištění všech instancí, které má daný uživatel nebo externí informační systém dostupné na základě oprávnění. Bez speciálních oprávnění uživatel (nebo externí informační systém) vidí pouze ty instance, kterých se sám účastnil.

Pro zobrazení všech instancí určité agendy je nutné mít nastavené oprávnění Dostupné všechny instance nebo Supervizor.

query allInstances{
  processes{
    agendaInstances
    (
      orderBy:{
        date: DESC
      }
      page: 1
      limit: 100
      view: "all"
    ){
      edges{
        node{
          agendaName
          id
          instanceIdent
          modifiedTime
        }
      }
    }
  }
}

Příklad výstupu:

{
  "data": {
    "processes": {
      "agendaInstances": {
        "edges": [
          {
            "node": {
              "agendaName": "Hromadný podpis smluv",
              "id": "706e14c0-643a-4ee6-a19e-929c997fd721",
              "instanceIdent": "b32a2b0d-4ed4-4204-ad16-76d758c84bda",
              "modifiedTime": "2023-03-02T09:43:11.937"
            }
          },

Zjištění informací o instanci

Query pro zjištění informací o konkrétní instanci agendy. Pro zobrazení informací musí mít uživatel nebo externí informační systém oprávnění vidět danou instanci. GUID instance lze zjistit například pomocí query allInstances (viz kapitola Zjištění dostupných instancí).

Dotaz:

query instanceInfo($instanceIdent:Guid!)
{
    processes{
    agendaInstance(instanceIdent:$instanceIdent){
      agendaName
      assignee
      createdBy
      createdByExtIs{
        displayName
        id
      }
      createdByUser{
        completeName
        id
        email
      }
    }
  }
}

Příklad proměnné do sekce VARIABLES:

Předpokládejme, že jste pomocí query allInstances obdrželi tato data:

  • "agendaName": "Seznámení s dokumentem",

  • "id": "6c2c07c1-1b00-4458-85cc-44770f8aaab2",

  • "instanceIdent": "66bffea1-1c3f-42e2-b798-f5857c77bfc1",

  • "modifiedTime": "2023-01-03T15:49:51.647"

Pak do sekce VARIABLES stačí zadat:

{
    "instanceIdent": "66bffea1-1c3f-42e2-b798-f5857c77bfc1"
}

Příklad začátku výstupu:

{
  "data": {
    "processes": {
      "agendaInstance": {
        "agendaName": "Seznámení s dokumentem",
        "assignee": "Vlasta Schválil",
        "createdBy": "Distribuce dokumentů",
        "createdByExtIs": null,
        "createdByUser": null
      }
    }
  },
  "extensions": {
    "tracing": {
      "version": 1,
      "startTime": "2023-03-03T09:11:10.4957425Z",
      "endTime": "2023-03-03T09:11:10.5137425Z",
      "duration": 17604700,
      "parsing": {
        "startOffset": 3000,
        "duration": 59899
      },
      "validation": {
        "startOffset": 65600,
        "duration": 282800
      },

Seznam spustitelných agend

Query pro zjištění všech agend, které může aktuální přihlášený uživatel (nebo externí informační systém) spustit. Součástí dotazu je zároveň id zpráv, kterými lze danou agendu nastartovat a seznam globálních proměnných, které daná agenda umí přijmout.

query getStartableAgendas
{
    processes
    {
        agendas(canStart: true)
        {
            id
            displayName
            version
            messages
            {
                messageIdent
                messageName
            }
            variables
            {
                name
                type
            }
        }
    }
}

Příklad začátku výstupu:

{
  "data": {
    "processes": {
      "agendas": [
        {
          "id": "5ab8f090-caba-4504-9d00-ede8dad40dfb",
          "displayName": "Faktura",
          "version": "V_4",
          "messages": [
            {
              "messageIdent": "20362847-a0f6-418c-9501-79c7620451dd",
              "messageName": "Zahájení agendy"
            }
          ],
          "variables": []
        },