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