Reference API výpočtů: knihovna lib

lib je knihovna obecných funkcí dostupná v každém výpočtu (na záložce Výpočty i ve sdílených skriptech typu Výpočty). Namísto vars/proc/task (viz Reference API výpočtů: proměnné a případ) řeší jednotlivé, často opakované úlohy – práci s datem, textem, uživateli, organizační strukturou nebo rolemi. Tento článek shrnuje funkce dostupné v TAS 5.19.12. Funkce pro soubory, DMS a tisk má samostatný článek Tisk a generování souborů ve výpočtech; dynamické tabulky článek Dynamické tabulky ve výpočtech.

Všechny funkce se volají s předponou lib., např. lib.format(...). U funkcí, které čtou nebo mění proměnné/uživatele/role, je prvním argumentem obvykle název, ID nebo samotný objekt (vars['Supplier'], 'Supplier' i číslo TVAR_ID fungují zaměnitelně).

Datum a čas

FunkceVracíPopis
format(date, phpFormat)stringFormátuje datum podle PHP formátovacího řetězce (yyyy-mm-dd h:MM:ss).
to_date(strDate)DatePřevede text YYYY-MM-DDThh:mi:ss na datum.
alterDate(date, strTime)DateUpraví datum stejně jako PHP strtotime(), např. alterDate(vars['Start'], '+4 months').
wmd(date, businessDaysCount)DatePřidá/odebere počet pracovních dnů.
wmh(date, hoursAdd, startWork, endWork)DatePřidá/odebere počet hodin v rámci pracovní doby a svátků.
whd(startTime, endTime, startWork, endWork)numberPočet pracovních hodin mezi dvěma daty.
wdd(startTime, endTime)numberPočet pracovních dní mezi dvěma daty.
wtd(startTime, endTime, unit, startWork, endWork)numberPracovní čas mezi dvěma daty v zadané jednotce (minutes, hours...).
getExchangeRate(currency)*Aktuální kurz měny (živě z ČNB).
getHistoricExchangeRate(currency, date)*Kurz měny k danému datu.
const days = lib.wdd(vars['DepartureDate'].getValue(), vars['ReturnDate'].getValue());
vars['TravelAllowance'].setValue(days * 600);

Text, čísla a pole

FunkceVracíPopis
fnRound(number)numberZaokrouhlí na celé číslo.
fnNumber(number, decimals, decPoint, thousandsSep)stringNaformátuje číslo na text (oddělovač tisíců, desetinná čárka).
fnFloor(number)numberZaokrouhlí dolů.
fnSubstr(value, startIndex, endIndex)stringOřízne text podle pozic.
fnStrLength(str)numberDélka textu.
fnStrPad(input, padLength, padString) / fnStrPadRight(...)stringDoplní text zleva/zprava na danou délku.
truncate(string, maxLength)stringZkrátí text na danou délku.
nl2p(text)stringPřevede nové řádky na odstavce (<p>).
random_text(length)stringNáhodný text ze znaků A–Z, a–z, 0–9.
gen_passc(length)stringJednoduché náhodné heslo.
getChr(asciiCode)stringZnak podle ASCII kódu.
fnPregMatch(pattern, subject)booleanTest proti regulárnímu výrazu (bez lomítek).
fnEq/fnNe/fnLt/fnGt... (a jejich ...10 varianty pro 10 hodnot)booleanPorovnání hodnot (===, !==, <, >...); argumenty mohou být i funkce.
fnAnd(v1, v2) / fnOr(v1, v2)booleanLogické AND/OR, i pro funkce jako argumenty.
fnEmpty(v1)booleantrue, pokud je hodnota undefined, null nebo ''.
fnContain(v1, v2)booleanZjistí, jestli v1 obsahuje v2.
fnToArray(v1)Array<string>Rozdělí text znakem | na pole.
fnFromArray(glue, arr)stringSlepí pole znakem glue.
fnArrayDiff(array1, array2) / fnArrayMerge(...) / fnArrayUnique(array1)arrayRozdíl, sjednocení a odstranění duplicit v poli.
fnInArray(needle, haystack) / fnDelFromArray(needle, haystack)boolean/arrayHledání a odebrání prvku v poli.
jsonSumArray(json, pathInJson)numberSoučet pole v JSON podle cesty, např. obj.arr.
csvToArray(file) / csvToJson(data, delimiter, firstLineColNames) / jsonToCsv(data, mapping)–Převody mezi CSV, polem a JSON.
xmlToJson(xml) / jsonToXml(jsonObj) / xmlSanitize(text)–Převody XML ↔ JSON a sanitizace &, <, >.
htmlToText(html)stringOdstraní HTML značky.
md5/sha1/sha256/sha512(input, digest='hex')stringHash vstupního řetězce.
encrypt(input, algorithm, digest) / supportedEncryptAlgorithms()string/string[]Obecný hash zvoleným algoritmem Node.js crypto.
getUUID() / validateUUID(id)string/booleanVygeneruje nebo ověří UUID v4.
createQrCodeBase64(text, options) / createBarcodeBase64(text, options)stringQR kód / čárový kód jako base64 obrázek.
const rate = vars['VatRate'].getValue();
const totalWithVat = lib.fnRound(vars['TotalPrice'].getValue() * (1 + rate));
vars['TotalWithVat'].setValue(lib.fnNumber(totalWithVat, 2, ',', ' '));

Uživatelé, role a organizační struktura

FunkceVracíPopis
initiator()UserApiVlastník (zakladatel) aktuálního případu.
solver()UserApiŘešitel aktuálního úkolu.
supervisor()UserApiSupervizor aktuálního případu.
lastSolverOf(task)UserApiPoslední řešitel zadaného úkolu.
getCurrentUser()UserApiUživatel, pod kterým výpočet běží.
manager(orgstr) / orgManager(org)UserApiManažer organizační jednotky (manažer jednotky, resp. její podřízené).
user(login)string„Příjmení Jméno“ uživatele.
userToFirstName(login) / userToLastName(login) / usersToFullName(login) / usersToDisplayName(login)stringJednotlivé tvary jména uživatele.
getUserNameById(login)stringPřihlašovací jméno uživatele.
getUserAttr(login, attributeName) / getOrgAttr(input, attributeName)*Hodnota libovolného sloupce uživatele/organizace (např. USER_EMAIL, ORGSTR_NAME).
getUserByAttr(attributeName, attributeValue, userStatus?)arrayVyhledá uživatele podle sloupce a hodnoty.
getOrgByAttr(attributeName, attributeValue, singleResult=true)OrgStrApiOrganizační jednotka podle sloupce (ORGSTR_NAME, PARENT_ORGSTR_ID...).
orgUnitOfUser(login)numberID organizační jednotky uživatele.
orgStrNameToId(orgstr)numberID organizační jednotky podle názvu.
userInOrg(login, org) / userInOrgTree(login, org)booleanJe uživatel v dané jednotce / jejím stromu?
userIsManager(login, org) / userIsManagerTree(login, org)booleanJe uživatel manažerem dané jednotky / jejího stromu?
isUserInLevel(userName, level) / isManagerInLevel(userName, level)booleanJe uživatel (manažer) na dané úrovni organizační struktury?
hasOrgChild(orgstr)booleanMá jednotka podřízené jednotky?
roleToId(roleName) / idToRole(roleId)number/stringPřevod mezi názvem a ID role.
userHasRole(login, role)booleanMá uživatel danou roli?
getUserWithRole(role, filterInactive?) / getUsersWithRole(role, filterInactive?, returnOnlyFirst?)UserApi/UserApi[]První, resp. všichni uživatelé s danou rolí.
getUserWithOrganization(org, filterInactive?) / getUsersWithOrganization(...)UserApi/UserApi[]První, resp. všichni uživatelé dané organizační jednotky.
getUserFromOrgWithRole(destVariableName, functionName, roleName, orgstrId)stringNajde uživatele dané role v organizační jednotce a uloží ho do proměnné.
setRoleToUser(user, roleName, roleCategory) / removeRoleFromUser(user, role) / clearRoleFromUsers(role)*Přiřadí, odebere roli uživateli, nebo ji odebere všem.
getUsers(query) / getRoles(query) / getOrgUnits(query)objectStránkovaný seznam uživatelů/rolí/org. jednotek – stejné chování jako služby GET /users, /roles, /org-units (filters, sort, page).
// Doplní e-mail manažera nákupu do proměnné jen pro čtení
const buyerManager = lib.getUserWithRole('Purchasing manager');
vars['ApproverEmail'].setValue(lib.getUserAttr(buyerManager, 'USER_EMAIL'));

Případ, úkoly a čísla řady

FunkceVracíPopis
iprocId() / itaskId(itaskName?)numberID aktuálního případu / úkolu podle názvu (case-sensitive).
getSequenceNumber(name) / getSequenceNumberCond(name, cond)numberDalší číslo z číselné řady (číslování objednávek apod.), případně jen když platí podmínka.
createNote(note) / createNonEmptyNote(note)*Přidá poznámku k případu (druhá varianta jen když text není prázdný).
setCaseOwner(login)*Změní vlastníka případu.
changeCaseStatus(iprocId, status)–Nastaví IPROC_CASE_STATUS cizímu případu.
setHeaderByName(headerName) / setHeaderByCode(headerCode)*Přiřadí hlavičku vícehlavičkové šablony případu.
getHeaderCode()stringKód hlavičky aktuálního případu.
getParentProcessStatus()stringStav nadřazeného procesu (u podprocesu).
finishSubProcesses() / finishSubprocessTree()–Ukončí podprocesy první úrovně, resp. celý strom podprocesů.
getListSubProcess(archivedIncluded=false)*Seznam ID podprocesů případu.
getSharedVariables(iprocId, {tvarIds, tvarNames})objectProměnné cizího případu označené ke sdílení.
findShareVariables(filter, iprocStatus, tProcId)–Najde případy, kde sdílená proměnná odpovídá filtru.
setEventFilter(taskName, processVarName, eventVarName)*Nastaví filtr na čekání na externí událost.
addStaticRights(userNames, groupName) / removeStaticRightsGroup(groupName) / removeStaticRightsUser(user)*Přidá/odebere statická práva viditelnosti případu.
assignRightsToSubprocesses()*Přidá právo viditelnosti podprocesu.
changeITaskComment(itaskId, comment, lang?)–Změní komentář jiného úkolu stejného případu.
changeMailRecipient(mails) / changeMailAttribute(attribute, value, language?)stringZmění příjemce/atribut e-mailové notifikace navázané na tento úkol.
generalApprover(dtLimit, limitRowId, dtSchval, schvalRowId, actual, totalValue)numberVrátí číslo odpovídající schvalovací podmínce v grafu procesu podle limitů v dynamické tabulce.
customView(cvId, filter, order, sort, offset, limit)*Načte data přehledu stejně jako služba cv/:id.
vars['OrderNumber'].setValue('PO-' + new Date().getFullYear() + '-' + lib.getSequenceNumber('purchaseOrders'));

Dynamické seznamy a legacy funkce dynamické tabulky

Novější kód pro dynamické tabulky používá dt.from(...) (viz Dynamické tabulky ve výpočtech); tyto funkce lib jsou starší ekvivalenty zachované kvůli zpětné kompatibilitě a práci s proměnnou Dynamický seznam/Dynamické řádky:

FunkceVracíPopis
fillDLList(listVarName) / fillList(listVarName)*Vybere/naplní všechny povolené hodnoty proměnné typu seznam.
fullList(varName)*Seznam povolených hodnot proměnné typu seznam.
setUserList(listVarName, source, delimiter)*Naplní dynamický seznam uživatelskými jmény odděleným zadaným znakem.
defDynList(dynListName, operation, fnc, param1, param2, onlyActive) / defDynListOrg(...)*Upraví filtr nabídky dynamického seznamu.
dynListToString(listVarName, glue)stringSpojí hodnoty seznamu zadaným znakem.
changeVariableDLName(varName, newDLName)stringZmění DLIST_NAME proměnné za běhu (časté s hlavičkami).
dynamicTableGetCell(dlName, colIndex, rowIndex) / dynamicTableUpdateCell(...) / dynamicTableUpdateCellCond(...)–Přečte/upraví buňku dynamické tabulky podle indexu.
dynamicTableGetRowId(dlName, colIndex, rowValue) / dynamicTableGetNewRowId(dlName, method) / dynamicTableGetNewRowIdCond(...)stringNajde, nebo založí a vrátí index řádku.
dynamicTableGetRowCounts(dt)numberPočet řádků tabulky.
updateDTFromCsv(dynTableName, csvContent, firstLineHeaders, delimiter, operation, fileName) / updateDtFromDb(dbTableName, dynTableName, mapping, operation, rowCb)*Naplní dynamickou tabulku z CSV, resp. z databázové tabulky.
getDRCell(varName, colName, rowIndex) / getDRCol(varName, drColName) / getCurrentRowOfDRCell(varName, colName)stringHodnoty Dynamického řádku podle sloupce/řádku/aktuální iterace.
addRowsToDR(drName, value) / fnDelFromDR(drName, colName, value)*Přidá, resp. smaže řádky Dynamického řádku.
extendDR(srcDRName, dstSrcName, map)*Naplní cílový Dynamický řádek daty ze zdrojového podle mapování sloupců.
translateDynamicRowTemplate(template, drName)stringNahradí v textu @Index a @{ColName} hodnotami z Dynamického řádku.
setDRAsIterator(varName, drColName) / getCurrentIteration() / getIteratorIndex() / iterator(position)–Práce s proměnnou jako s iterátorem (multiinstance).

Ostatní služby ve výpočtu

Kromě lib má výpočet úkolu k dispozici i tyto samostatné objekty:

ObjektCo umí
html.parse(input)Naparsuje HTML řetězec do stromu, po kterém lze procházet querySelector/querySelectorAll – hodí se pro čtení dat z HTML odpovědí nebo šablon.
sql.execute(query, params?)Spustí raw SQL dotaz nad databází TAS a vrátí pole řádků. Parametry vždy přes druhý argument, nikdy přímo v řetězci (SQL injection).
jwt.sign/verify/decode(...)Podepíše, ověří nebo dekóduje JWT token (knihovna jsonwebtoken). jwt.secureSign/secureVerify navíc podepisují tajemstvím z Vaultu podle securitySelector.
vault.get(name)Vrátí neserializovatelnou referenci na tajemství z Vaultu – předává se jen důvěryhodným API, např. axios...setVaultHeader().
identity.findUser(userName) / findByExternalId/findByObjectGUID/findByImmutableId / findOrCreateUser(...) / assignManagers(...) / setOrganization(...) / createOrganizationStructure(...)Vyhledání a správa uživatelů/organizační struktury napojená na externí identity (Azure AD apod.).
ai.processDocument(fileName, schema?)Pošle přiložený dokument do AI a vyplní jím proměnné úkolu (nebo proměnné podle vlastního JSON schématu).
ftp.getFtpClient(config) / getFtpClientWithVaultPassword(config, passwordRef)Vrátí klienta pro FTP/SFTP server s metodami list, upload, download, delete, exists, createDirectory, removeDirectory, rename.
axios.getAxios(config)Vrátí HTTP klienta s metodami get/post/put/patch/delete/request, podporou formulářových souborů (sendFile, sendFormData) a vložením tajemství z Vaultu do hlaviček (setVaultHeader).
// Volání externího API s tokenem z Vaultu
const tokenRef = await vault.get('erp-api-token');
const client = await axios.getAxios({ baseURL: 'https://erp.example.com', timeout: 10000 });
client.setVaultHeader('Authorization', tokenRef, 'Bearer ');
const { data: supplier } = await client.get('/suppliers/' + vars['SupplierId'].getValue());
vars['SupplierName'].setValue(supplier.name);

Související: Reference API výpočtů: proměnné a případ, Dynamické tabulky ve výpočtech, Tisk a generování souborů ve výpočtech, Jak a kdy běží výpočty.

Jak a kdy běží výpočty

Reference API výpočtů: proměnné a případ

Team assistant (opens in a new tab)

Powered by HelpDocs (opens in a new tab)