Pracovný postup a procesy

Faktúry možno generovať zo zmlúv prostredníctvom rozhrania REST API (aj cez webové rozhranie)

Lenka Haringerová avatar
Written by Lenka Haringerová
Updated over a week ago

Základom pracovného postupu a procesov je nástroj Activiti. Obsahuje rozhranie API Activiti REST Toto rozhranie je prístupné na nasledujúcej adrese:

/c//activiti/

Existujú tieto obmedzenia:

  • Rozhranie /login nie je podporované. Používa sa autorizácia ABRA Flexi.

  • Úprava používateľov, skupín a členstiev nie je podporovaná. Všetko sa vykonáva prostredníctvom rozhrania ABRA Flexi.

  • Nahrávanie nového procesu sa musí vykonať prostredníctvom systému ABRA Flexi (kvôli definícii platnosti pracovného postupu). Aktualizácie procesov je už možné vykonávať prostredníctvom rozhrania API Activiti.

API pre ABRA Flexi

Zoznam definícií pracovných postupov pre daný záznam:

GET /c///workflows.xml

Spustenie pracovného postupu

PUT /c////workflows//start

Pri spúšťaní je možné pracovnému postupu odovzdať aj parametre, ktoré sa môžu použiť pri rozhodovaní:

PUT /c////workflows//start?parameter1=hodnota1&parameter2=hodnota2

Zoznam udalostí (poznámky a úlohy) pre objekt:

/c////udalosť

Zoznam udalostí vrátane ďalších atribútov pracovného postupu:

/c////event.xml?includes=event/actRuTask

Pri práci s pracovným postupom zvyčajne chcete vykonávať len úlohy určitého typu:

/c////udalosť/(typ udalosti = 'typeEvent.workflow')

Zoznam všetkých úloh pre konkrétny pracovný postup:

/c//event/(typ udalosti = 'kindUdal.workflow' a processDefinitionId = '')

Zoznam všetkých úloh s daným kľúčom úlohy pre konkrétny pracovný postup:

/c//event/(typ udalosti = 'kindUdal.workflow' a processDefinitionId = '' a taskDefinitionKey = '')

Zoznam všetkých úloh, ktoré môže aktuálne prihlásený používateľ riešiť:

/c//event@event-to-realize

Odoslanie signálu všetkým spusteným pracovným postupom, ktoré naň môžu reagovať:

/c////workflow-signal/?param1=value

Odoslanie správy všetkým spusteným pracovným postupom, ktoré na ňu môžu reagovať:

/c////workflow-message/?param1=value

Úloha:

/c//udalosť//

claim.xml

vhodné úlohy

unclaim.xml

zrušiť nárok na úlohu

complete.xmlcomplete
.xml?param1=value...
1)

vyriešiť úlohu

assign.xml?username=user1
)

odovzdať úlohu používateľovi user

add-comment.xml?comment=text1
)
2)

pridať komentár k úlohe

  1. V prípade hodnôt parametrov, ktoré obsahujú iné ako povolené znaky URL (medzera, kurzíva atď.), je potrebné Kódovanie adresy URL.

  2. Očakáva sa kódovanie textu v UTF-8.

Poznámka: udalosti typu úloha pre pracovný postup sa po vyriešení vyradia. Namiesto .xml sa môže použiť aj hlavička .json alebo Accept.

Zoznam úloh a s nimi súvisiacich objektov

/c///

Objekty používané v rozhodovacom procese ABRA Flexi

flexibee.user(užívateľské meno)

Vráti používateľa so zadaným menom

flexibee.userQuery(užívateľské meno)

Vráti objekt dotazu používateľa so zadaným názvom (výstup je totožný s metódou objectQuery).

flexibee.object(evidenceType)

Vracia objekt daného typu, ktorý je pripojený k úlohe pracovného postupu

flexibee.objectQuery(evidenceType).relation(relationName).filter(filter).list()

Umožňuje filtrovať objekty v relácii.

flexibee.objectQuery(evidenceType).relationFilter(relationName).filter(filter).one()

Umožňuje vrátiť prvý objekt vo filtrovanej relácii.

flexibee.objectQuery(evidenceType).relationFilter(relationName).filter(filter).sum()

Umožňuje sčítať objekty vo filtrovanej relácii.

flexibee.objectQuery(evidenceType).relationFilter(relationName).filter(filter).firstQuery().relation(relationName2).one()

Umožňuje reťaziť spracovanie dotazu.

flexibee.objectQuery(evidenceType).relation(relationName).list()

Umožňuje filtrovať objekty vo vzťahu.

flexibee.objectQuery(evidenceType).relation(relationName).one()

Umožňuje vrátiť prvý objekt v relácii.

flexibee.objectQuery(evidenceType).relation(relationName).sum()

Umožňuje sčítať objekty v relácii.

flexibee.wrap(objekt)

Zabalí objekt pomocou dotazu (rovnaký výsledok ako vráti napr. objectQuery). Potom môžete použiť sadu funkcií načítaných dotazom.

flexibee.query(evidenceType).filter(filter).one()

Vráti jeden objekt daného typu, ktorý vyhovuje zadanému filtru.

flexibee.query(evidenceType).filter(filter).firstQuery().signal('signalName')

Vyvolá signál nad všetkými pracovnými postupmi, ktoré prebiehajú nad vybraným záznamom.

flexibee.query(evidenceType).filter(filter).list()

Vráti všetky objekty daného typu, ktoré vyhovujú zadanému filtru.

flexibee.query(evidenceType).filter(filter).count()

Vráti počet objektov daného typu, ktoré vyhovujú zadanému filtru.

flexibee.query(evidenceType).filter(filter).sum(propertyName)

Vráti súčet daného stĺpca pre všetky objekty daného typu, ktoré vyhovujú danému filtru.

flexibee.query(evidenceType).filter(filter).max(propertyName)

Vráti maximálnu hodnotu daného stĺpca pre všetky objekty daného typu, ktoré vyhovujú danému filtru.

flexibee.query(evidenceType).filter(filter).min(propertyName)

Vráti min daného stĺpca pre všetky objekty daného typu, ktoré vyhovujú zadanému filtru.

flexibee.query(evidenceType).filter(filter).avg(propertyName)

Vráti priemer daného stĺpca pre všetky objekty daného typu, ktoré vyhovujú zadanému filtru.

flexibee.query(evidenceType).asc(propertyName).first()

Umožňuje triedenie vo vzostupnom poradí (viac o triedení v API).

flexibee.query(evidenceType).desc(propertyName).first()

Umožňuje zoradenie v zostupnom poradí (viac o zoradení v API).

flexibee.settings()

Vráti aktuálne nastavenia spoločnosti ( nastavenia záznamu). Názov spoločnosti možno získať napr. ${flexibee.settings().nazFirmy}

flexibee.settingsForDate(dt)

Vráti nastavenia spoločnosti (záznamy o nastaveniach) pre daný deň (zvyčajne dátum dokladu). Názov spoločnosti možno získať napr. ${flexibee.settingsForDate(dt).nazFirmy}

flexibee.varName(evidenceType)

Vracia interný názov premennej, ktorý ABRA Flexi používa na väzbu jednotlivých pracovných postupov na dokumenty a objekty v ABRA Flexi. Zvyčajne sa používa pri volaní podprocesu.

flexibee.isDesktop()

Vracia hodnotu true, ak je pracovný postup aktuálne spustený v aplikácii na ploche

flexibee.isServer()

Vracia hodnotu true, ak je pracovný postup aktuálne spustený prostredníctvom rozhrania REST API alebo v prehliadači.

flexibee.importXml(string)

Importuje XML reťazec podľa ABRA Flexi REST API. Vracia kolekciu identifikátorov objektov z importu XML.

teraz

Aktuálny dátum a čas.

authenticatedUserId

Meno aktuálne prihláseného používateľa (pre viac informácií použite flexibee.user(authenticatedUserId ) (pozri dokumentáciu acitiviti).

úloha

Záznam activiti, ktorý predstavuje úlohu (viac dokumentácie acitiviti).

realizácia

Informácie o aktuálne spustenom pracovnom postupe (viac dokumentácie acitiviti).

Volanie podprocesu

Ak voláte podproces a chcete, aby výsledné úlohy boli prepojené s dokumentmi, musíte aktivovať povýšenie väzbových premenných na pracovný postup. Postupujte takto:

<?xml version="1.0"?>
<callActivity id="callSubProcess" calledElement="checkCreditProcess">
  <extensionElements>
    <activiti:in source="${flexibee.varName('invoice-received')}" target="${flexibee.varName('invoice-received')}"/>
    <activiti:in source="initiator" target="initiator"/>
  </extensionElements>
</callActivity>

Práca s používateľmi v pracovnom postupe

Ak chcete pracovať s používateľmi, máte k dispozícii niekoľko možností. Dávajte pozor, aby ste v definícii používateľa nepoužili znak čiarky (,). Activiti má chybu, ktorá bráni jeho používaniu.

Pôvodca pracovného postupu

Pri spustení pracovného postupu definujte premennú iniciátora. Potom ho môžete použiť ako meno používateľa na priradenie úlohy.

<?xml version="1.0"?>

Súčasný používateľ

Ak chcete priradiť úlohu tomu istému používateľovi, ktorý vykonal aktuálnu operáciu, použite premennú authenticatedUserId.

Konkrétny používateľ

Počas spracovania môžete použiť konkrétneho používateľa. Používateľa môžete vyhľadať aj podľa určitých kritérií (napr. štítku):

<?xml version="1.0"?>
<formalExpression>${flexibee.query('user').relation('label ="code:EMPLOYEE"').one().code}</formalExpression>

Alebo používateľská väzba:

<?xml version="1.0"?>
<formalExpression>${flexibee.userQuery(initiator).relation('user-bindings').filter('typeBindings = "code:UPDATED"').one().code}</formalExpression>

Úprava dokumentov

Niekedy je potrebné pri spracovaní pracovného postupu upraviť jeden alebo viacero dokumentov. To možno vykonať pomocou flexibee-xml. Aby metóda flexibee.object() fungovala, musí byť pracovný postup prepojený s týmto dokumentom.

<?xml version="1.0"?>

Upravovať možno aj viacero objektov:

<?xml version="1.0"?>
<serviceTask id="cancellation" activiti:class="flexibee-xml">
  <extensionElements>
    <activiti:field name="xml">
      <activiti:expression><![CDATA[ <winstrom> <invoice-issued action="cancellation"> <id>code:FAV0001/2013</id> </invoice-issued> <invoice-issued action="cancellation"> <id>code:FAV0002/2013</id> </ invoice-issued> </winstrom> ]]></activiti:expression>
    </activiti:field>
  </extensionElements>
</serviceTask>

Získanie identifikátorov upravených objektov

Pomocou premennej idsVar načítajte kolekciu identifikátorov, ktoré boli zmenené importom XML.

<?xml version="1.0"?>
<serviceTask id="import" activiti:class="flexibee-xml"> ... <extensionElements><activiti:field name="idsVar" stringValue="listId"/></extensionElements> </serviceTask>

Po úspešnom importe XML bude premenná listId obsahovať kolekciu identifikátorov upravených objektov.

Spracovanie chýb počas importu XML

Ak sa v úlohe flexibee-xml vyskytne chyba importu XML, spracovanie pracovného postupu sa preruší chybou WSBusinessRTException. Výnimka obsahuje opis chyby a zobrazí sa v grafickom používateľskom rozhraní ako dialógové okno s chybou.

Ak má pracovný postup pokračovať aj v prípade chyby importu, definíciu úlohy možno rozšíriť o parametre errorVar a errorMessageVar:

<?xml version="1.0"?>
<serviceTask id="cancellation" activiti:class="flexibee-xml"> ... <extensionElements><activiti:field name="errorVar" stringValue="wasError"/><activiti:field name="errorMessageVar" stringValue="errorMessage"/></extensionElements> </serviceTask>

premenná

dátový typ

popis

errorVar

Boolean

definuje názov premennej (napr. wasError), do ktorej sa počas importu uloží príznak chyby.

errorMessageVar

String

definuje názov premennej (napr. errorMessage), v ktorej je uložený text popisujúci chyby importu

Podmienené vetvenie na základe objektov

V pracovnom postupe môžete ABRA Flexi klásť otázky a reagovať na základe odpovede:

${flexibee.object('objednavka-prijata').sumTotal > 1000}

Je možné sa tiež všeobecne dopytovať, napr. koľko neuhradených faktúr má spoločnosť, ktorá je uvedená na aktuálnej faktúre:

${flexibee.query('invoice-issued').filter('stavUhrK != "stavUhr.paid" and stavUhrK != "stavUhr.paidRucne" and firm='.concat(flexibee.object('invoice-issued').firm.id)).sum('sumTotal') > 1000}

Prenos stavu pracovného postupu do dokumentu

Niekedy je potrebné zmeniť stav dokumentu na základe stavu pracovného postupu. To sa dá dosiahnuť pomocou štítkov, ktoré sú priradené k jednej skupine, pre ktorú je nastavená exkluzivita (potom sa pri nastavení nového štítku z tej istej skupiny ostatné vymažú). To sa potom opäť realizuje pomocou flexibee-xml, ktorý sa volá vždy, keď sa zmení stav pracovného postupu:

<?xml version="1.0"?>
Did this answer your question?