W tym miejscu opublikowano przykładowe kwerendy użyteczne przy budowaniu warunków, przekazywaniu parametrów do komend itp.
Warunki
Poniżej przykłady sqli do warunków oraz pól warunkujących wykonanie akcji.
- Sprawdzenie, czy użytkownik wybrał dokładnie jedną osobę/opcję.
SELECT NOT EXISTS(SELECT * FROM (SELECT '{$POTWIERDZAJACY}' AS oso) x WHERE oso ILIKE '%,%')
- Czy dokument zawiera pozycję
SELECT EXISTS(SELECT fkelid FROM fk_elements WHERE doc_id = {doc_id} AND NOT is_del)
- Czy na pozycjach dokumentu uzupełniono J.M.
SELECT NOT EXISTS(SELECT fkelid FROM fk_elements WHERE doc_id = {doc_id} AND NOT is_del AND unitid IS NULL)
Dane wejściowe
Wypełniamy odpowiednio pola:
- Nazwa - Kodowa nazwa pola, może składać się ze znaków
A-Z0-9
. Tą nazwą będziemy mogli się następnie posługiwać za pomocą tokenu{$PRACOWNIK}
. Przyjęto, aby nazwa kodowa zawsze była z dużych liter. - Nazwa2 - Etykieta pola, która pojawi się na szarfie workflow.
- Typ - Typ zmiennej
- Opis - Podpowiedź, która będzie dostępna po najechaniu na etykietę pola.
- Parametry - Parametry w formacie JSON.
Poniżej przykłady parametrów do danych wejściowych:
- (select) Lista pracowników (usr_id) ze wskazanej grupy
{
"sql": "SELECT o.usr_id AS value, o.lasfir AS caption FROM users_link_group ulg INNER JOIN orgtree_view o ON o.usr_id = ulg.usr_id AND ulg.grp_id = 1 ORDER BY 2"
}
- (select) Lookup pracowników (multiselect)
{
"sql": "SELECT orunid, lasfir, 'USER' AS clsnam FROM orgtree_view WHERE usr_id > 0 AND {FILTER_STRING} ORDER BY lasfir",
"sql_filter": "lasfir ~* E'^{SEARCH_TEXT}'",
"valueField": "orunid",
"labelField": "lasfir",
"multiselect": true
}
- (select) Pole wyboru niepowiązanych faktur PROFORM
{
"sql": "SELECT v.doc_id, 'Nr:' || COALESCE(v.number, 'brak nr') || ' - ' || COALESCE(v.amount, 0) || ' ' || COALESCE(v.cursmb, '') || ' Wystawiona ' || seldat::DATE AS clsnam FROM vatnote v JOIN types_of_accountants_doc typ USING (accdid) JOIN documents doc USING (doc_id) WHERE doc.is_del IS FALSE AND (typ.dscrp4 = 'PRO' OR typ.isprfm IS TRUE) AND v.frctid = (SELECT frctid FROM vatnote WHERE doc_id = {DOC_ID}) AND v.doc_id NOT IN (SELECT v.doc_id AS doc_id FROM vatnote v JOIN types_of_accountants_doc typ USING (accdid) JOIN documents doc USING (doc_id) JOIN doc_link_doc doc1 ON doc1.doc_id = v.doc_id JOIN vatnote vdoc1 ON vdoc1.doc_id = doc1.rel_to WHERE (typ.dscrp4 = 'PRO' OR typ.isprfm IS TRUE) AND v.frctid = (SELECT frctid FROM vatnote WHERE doc_id = {DOC_ID}) AND vdoc1.doc_id IS NOT NULL AND doc.is_del IS FALSE UNION SELECT v.doc_id AS doc_id FROM vatnote v JOIN types_of_accountants_doc typ USING (accdid) JOIN documents doc USING (doc_id) JOIN doc_link_doc doc2 ON doc2.rel_to = v.doc_id JOIN vatnote vdoc2 ON vdoc2.doc_id = doc2.doc_id WHERE (typ.dscrp4 = 'PRO' OR typ.isprfm IS TRUE) AND v.frctid = (SELECT frctid FROM vatnote WHERE doc_id = {DOC_ID}) AND vdoc2.doc_id IS NOT NULL AND doc.is_del IS FALSE)",
"valueField": "doc_id",
"labelField": "clsnam"
}
Przypisanie
Własności etapu, kontekstu
- Stage assignments
stages.orgarr
- Osoba (stanowisko) wykonujące zadanie workflow
Przypisanie osoby do etapu odbywa się na
aktywacji etapu (START)
Poprzez przypisanie jego stanowiska do własności:
{stages.orgarr}
Poniżej przykłady wyrażeń:
- Przypisanie osoby do etapu z globalnej zmiennej procedury.
SELECT {$KTO_SPORZADZA}::INT[]
- Przypisanie osób z parametru typu usr_ids[]
SELECT ARRAY(SELECT o.orunid FROM orgtree_view o WHERE o.usr_id IN ({$OSOBY}))
- Przypisanie osoby wybranej w liście wyboru (lista typu select z wartościami orunid, przypisana do zmiennej typu Integer)
SELECT ARRAY [orunid]
FROM organization_units
WHERE orunid = {$DYREKTOR_HANDLOWY}
- Przypisanie przełożonego osoby będącej przypisana do własności $WNIOSKODAWCA typu orunid[]
SELECT ARRAY(SELECT get_superior((SELECT orunid FROM orgtree_view WHERE orunid = ANY ({$WNIOSKODAWCA}::INT []))))
- Przypisanie osoby (stanowiska) odpowiedzialną za sprawę.
SELECT ARRAY(SELECT o.orunid
FROM processes p
INNER JOIN orgtree_view o ON p.rspuid = o.usr_id
WHERE prc_id = {PRC_ID})
- Przypisanie osoby tworzącej dokument
SELECT ARRAY [o.orunid]
FROM orgtree_view o
INNER JOIN documents d ON d.adduid = o.usr_id
WHERE d.doc_id = {DOC_ID}
- Przypisanie osoby zalogowanej
SELECT ARRAY(SELECT o.orunid FROM orgtree_view o WHERE o.usr_id = {LOGGED_USR_ID})
- Przypisanie osoby odpowiedzialnej za MPK wpisane w fakturze (do etapu MULTI)
SELECT ARRAY(
SELECT CASE
WHEN x.ndetpe = 'POST' THEN x.orunid
WHEN x.ndetpe = 'ORGCELL' THEN (SELECT o2.orunid
FROM orgtree_view o2
WHERE o2.prn_id = x.orunid
LIMIT 1)
END
FROM (SELECT DISTINCT mpk.orunid,
o.ndetpe
FROM vatnote_costs
LEFT JOIN places_of_vcosts AS mpk USING (povcid)
LEFT JOIN orgtree_view AS o ON mpk.orunid = o.orunid
WHERE doc_id = {DOC_ID})
AS x)
Przypisanie orunid w zależności od accdid (jednostki org. w zależności od typu dokumentu księgowego)
SELECT ARRAY(
CASE
WHEN v.accdid = 1 THEN 62
WHEN v.accdid = 2 THEN 56
WHEN v.accdid = 3 THEN 61
WHEN v.accdid = 4 THEN 60
WHEN v.accdid = 5 THEN 63
END)
FROM vatnote v
WHERE v.doc_id = {DOC_ID}
- Przypisanie osoby, która załatwiła poprzedni etap
SELECT ARRAY [s.orunid]
FROM stages s
LEFT JOIN workflow_log wl USING (sop_id)
WHERE s.is_fix IS TRUE
AND s.procid = {PROCEDURES.procid}
AND wl.chloid = (SELECT max(chloid) FROM workflow_log WHERE procid = S.procid)
- Przypisanie osób do etapu z tablicy VAR_OSOBY_OPISUJACE, które nie są w tablicy VAR_OSOBY_FIXED.
SELECT ARRAY(
SELECT orunid
FROM orgtree_view
WHERE orunid IN (
SELECT *
FROM bs_unnest({$VAR_OSOBY_OPISUJACE}::INT[]::INT[]) AS qq
WHERE NOT (ARRAY [qq] <@ {$VAR_OSOBY_FIXED}::INT[])
)
)
- Przypisanie osób z określonej grupy (grp_id = 9)
SELECT ARRAY(SELECT o.orunid
FROM orgtree_view o
WHERE o.orunid IN (SELECT o.orunid
FROM users_link_group ulg
INNER JOIN orgtree_view o ON o.usr_id = ulg.usr_id AND ulg.grp_id = 9))
{stages.commen}
Opis etapu
Własności globalne
Wartości możemy przypisywać na rozpoczęciu lub zakończeniu etapu wg naszej potrzeby.
Nazwę zmiennej umieszczamy w polu własności
{$WNIOSKODAWCA}
a następnie uzupełniamy wyrażenie.
Poniżej przykłady wyrażeń:
Global properties
- Przypisanie do zmiennej id stanowiska aktualnie zalogowanego użytkownika
SELECT {LOGGED_ORUNID}
Akcje
Domyślnie wprowadzamy parametry statyczne, które nie są parsowane przez silnik workflow. Jeżeli chcemy skorzystać z parametrów dynamicznych należy do zapytania SQL dodać prefix SQL::
.
Wyjątkiem jest pole Warunek wykonania, które przyjmuje standardowo SQLa.
Poniżej przykłady zapytań do parametrów akcji.
Action parameters
- Zwraca lista adresów email osób wykonujących aktywny etap
SQL::SELECT text_sum(o2.e_mail) FROM stages s3 INNER JOIN orgtree_view o2 ON o2.orunid = ANY (s3.orgarr) WHERE s3.sop_id = {SOP_ID}
- Zwraca lista identyfikatorów użytkowników ze zmiennej workflow typu tablicowego (
orunid[]
)
SQL::SELECT text_sum(usr_id::text) FROM orgtree_view WHERE orunid = ANY ({$OSOBY_UPRAWNIONE}::int[])
- Zwraca identyfikator użytkownika odpowiedzialnego za sprawę
SQL::SELECT rspuid FROM processes WHERE prc_id = {PRC_ID}
- Zwraca identyfikator grupy po guidzie
SQL::SELECT grp_id FROM groups WHERE grguid = 'PAY.ADMINISTRATORS'
- Zwraca identyfikator statusu
SQL::SELECT tpstid FROM types_of_processes_states WHERE tpguid = 'PAY.NEW' LIMIT 1
- Uprawnij wszystkie grupy ze struktury organizacyjnej powyżej zalogowane użytkownika. Przy wykorzystaniu komend:
- Uprawnij grupę użytkowników do dokumentu
- Uprawnij grupę użytkowników do sprawy
Poniższy kod wstaw do pola Grupa.
SQL::SELECT ARRAY_TO_STRING(ARRAY(SELECT grp_id FROM orgtree_view WHERE orunid IN (SELECT UNNEST( ('{' || TRANSLATE(get_org_path({LOGGED_ORUNID}), '.', ',') || '}')::INT[])) AND grp_id IS NOT NULL), ',')
Dodatkowo należy uzupełnić warunek wykonania komendy:
SELECT CASE WHEN ARRAY_TO_STRING(ARRAY(SELECT grp_id FROM orgtree_view WHERE orunid IN (SELECT UNNEST( ('{' ||
TRANSLATE(get_org_path({LOGGED_ORUNID}), '.', ',') || '}')::INT[])) AND grp_id IS NOT NULL), ',') != '' THEN TRUE ELSE FALSE END
- Uprawnij osoby wykonujące etap.
Poniższy kod wstaw do pola Pracownik.
SQL::SELECT usr_id FROM orgtree_view WHERE orunid = (select translate({stages.orgarr},'{}',''))::int
- Uprawnij grupę o wskazanym guidzie
Poniższy kod wstaw do pola Grupa.
SQL::SELECT g.grp_id FROM groups g WHERE g.grguid = 'FKS.SUPERVISIONGROUP'
- Zwrócenie identyfikatora statusu na podstawie jego guidu
SQL::SELECT tpstid FROM types_of_processes_states WHERE tpguid = 'DEL.ROZL.REJECTED'