Przejdź do głównej treści

Ready_™ Developer TeamMniej niż 1 minuta

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

Zakładka akcje
Zakładka akcje

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

  1. Stage assignments

stages.orgarr - Osoba (stanowisko) wykonujące zadanie workflow

Zakładka akcje
Zakładka akcje

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

Zakładka akcje
Zakładka akcje

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

Zakładka akcje
Zakładka 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'