Čo sa mení oproti pôvodnému nastavovaniu ProjectWise
Tento prehľad je určený ľuďom, ktorí poznajú administráciu ProjectWise, atribúty, formuláre a Environmenty používané ako číselníky, ale nemusia poznať programovanie ani CEL.
CEL teda nie je nová databáza, klient SQL ani univerzálne API nad ProjectWise. Je to bezpečný jazyk na výpočet hodnoty z vopred povoleného kontextu.
Čo nám Bentley reálne zatrhlo
Zmena sa týka podpory výrazov SQL v atribútoch služby ProjectWise Cloud. Bentley zavádza nastavenie Prevent new SQL expressions in attributes.
Praktický význam:
- nemožno vytvárať nové SQL výrazy v atribútoch,
- pri úprave existujúceho atribútu SQL ho treba prepísať do PW CEL,
- existujúce atribúty SQL sa automaticky nevymažú a majú ďalej fungovať, kým ich nie je potrebné upraviť,
- Bentley momentálne neposkytuje automatický konvertor, ktorý by starú konfiguráciu spoľahlivo prepísal do CEL.
Toto nie je úplný zákaz všetkého, čo sme používali v pôvodnom nastavení ProjectWise. V starších výrazoch sa miešali najmenej tri odlišné veci:
- Systémové premenné ProjectWise, napríklad aktuálny používateľ alebo hodnota iného atribútu.
- Funkcie SQL, napríklad
ISNULL,IIFaleboCHARINDEX. - Skutočný prístup k databáze, napríklad tabuľky, pohľady, spojenia (
JOIN) a uložené procedúry.
Prvé dve skupiny sa často dajú prepísať do CEL pomerne priamo. Tretia skupina predstavuje hlavné obmedzenie: CEL nedostane voľný prístup k databáze SQL.
Čo je CEL
CEL znamená Common Expression Language. ProjectWise používa vlastnú implementáciu jazyka CEL, ktorú tu nazývame PW CEL.
Výraz dostane povolené vstupy, vyhodnotí nad nimi jednoduchú logiku a vráti výsledok. Napríklad:
thisUser.nameVýsledkom je meno aktuálneho používateľa, pretože ProjectWise vložil do kontextu objekt thisUser.
Dôležitá myšlienka: CEL nevie nič o databáze sám od seba. Vie iba to, čo mu ProjectWise v konkrétnom mieste sprístupní.
V kontexte atribútov dokumentu môže výraz pristupovať napríklad k:
- aktuálnemu formuláru cez
thisForm, - aktuálnemu dokumentu cez
thisDocument, - jeho priečinku cez
thisFolder, - Work Area cez príslušný objekt,
- aktuálnemu používateľovi cez
thisUser, - aktuálnemu UTC času,
- registrovaným lookupom.
Iný kontext, napríklad Workflow Rules Engine, môže mať inú množinu objektov. To, že niečo funguje v jednom kontexte, ešte neznamená, že je to dostupné všade.
Pôvodný spôsob a PW CEL vedľa seba
| Pôvodné nastavovanie | PW CEL |
|---|---|
| Výraz mohol obsahovať premenné ProjectWise, funkcie SQL alebo databázovú logiku. | Výraz používa syntax jazyka CEL a objekty, ktoré poskytol ProjectWise. |
| Administrátor často potreboval poznať názvy tabuliek, stĺpcov, pohľadov alebo procedúr. | Interná databázová schéma nie je súčasťou podporovaného rozhrania. |
| Pomocou SQL bolo možné vytvárať spojenia a čítať údaje z rôznych tabuliek. | CEL pracuje s aktuálnym kontextom a registrovanými lookupmi. |
| Logika mohla byť úzko naviazaná na databázu a konkrétnu verziu produktu. | Bentley kontroluje zverejnené objekty, funkcie a datasety. |
| Zmena databázovej schémy alebo cloudové obmedzenia mohli výraz znefunkčniť. | Oddelenie od databázy poskytuje spoločnosti Bentley stabilnejšiu a bezpečnejšiu hranicu. |
| Veľká časť riadenia bola v rukách databázového administrátora. | Väčšia časť riadenia spočíva v registrácii lookupov a v podporovanom rozhraní API PW CEL. |
Najdôležitejšie obmedzenia
CEL zároveň neznamená, že Bentley „nevie“ zobraziť ďalšie údaje. Výrobca by principiálne mohol pridať nový riadený objekt alebo dataset lookupu. My ako administrátori si však nevieme ľubovoľnú tabuľku SQL sami vyhlásiť za vstup CEL. Musíme použiť podporovaný objekt, registrovaný lookup alebo externú synchronizáciu.
Aké tabuľky sa dajú použiť
V dokumentácii ProjectWise Administrator 2026 spoločnosť Bentley uvádza týchto osem vstavaných lookupov:
| Built-in lookup | Stĺpce dostupné pre výber | Povinný filter | Čo poskytuje |
|---|---|---|---|
DMS.Users | name, description, email | — | Používatelia zdroja údajov (datasource) |
DMS.UserLists | name, description | — | Zoznamy používateľov |
DMS.UsersInList | name, description, email | list | Používatelia v konkrétnom zozname |
DMS.UserGroups | name, description | — | Skupiny používateľov |
DMS.UsersInGroup | name, description, email | group | Používatelia v konkrétnej skupine |
DMS.Workflows | name, description | — | Definície workflow |
DMS.States | name, description | — | Stavy v zdroji údajov (datasource) |
DMS.StatesInWorkflow | name, description | workflow | Stavy konkrétneho workflow |
Stĺpce list, group a workflow slúžia na filtrovanie. Nie sú to bežné stĺpce, ktoré možno vrátiť vo výsledku.
Predpona DMS. je rezervovaná pre vstavané lookupy ProjectWise. Vlastný lookup by sa takto pomenovať nemal.
Tento zoznam neobsahuje dokumenty, priečinky ani ľubovoľné tabuľky Environmentov. K aktuálnemu dokumentu a priečinku sa pristupuje cez kontextové objekty. Údaje z Environmentu sa sprístupňujú samostatným lookupom typu Environment.
Tri druhy lookupov
1. Lookup typu Environment
Lookup typu Environment používa dokumenty vo vybranom Environmente ProjectWise ako riadky lookupu. Pri registrácii sa určí:
- ktorý Environment je zdrojom,
- ktoré jeho atribúty budú dostupné ako stĺpce,
- ktorý stĺpec je hodnota a ktorý popis,
- prípadné fixné filtre a zoradenie.
Je to najbližšia náhrada za pôvodný Environment používaný ako číselník. Samotná existencia Environmentu však nestačí. Aby ho CEL vedel použiť, musí byť nad ním zaregistrovaný lookup pre CEL.
Pozor na dve veci:
- CEL vidí iba atribúty, ktoré boli v definícii lookupu sprístupnené.
- Ak sa do Environmentu neskôr pridá nový atribút, treba upraviť konfiguráciu lookupu a podľa dokumentácie spoločnosti Bentley znovu otvoriť a uložiť existujúce výrazy, ktoré ho majú používať.
Princíp použitia:
getLookup('Lkp.Originator')
.filterEquals('PW_CODE', thisForm.FI_ORIGIN_CODE)
.selectOne('PW_DESCRIPTION', '')Výraz vezme registrovaný lookup, ponechá záznamy so zhodným kódom a vráti jeden popis. Ak sa nenájde presne jeden záznam, vráti prázdny text.
2. Lookup typu Standard
Lookup typu Standard je dátová tabuľka spravovaná systémom ProjectWise, do ktorej sa údaje nahrajú podporovaným postupom využívajúcim PowerShell alebo SDK. Hodí sa napríklad pre údaje z ERP, CRM alebo iného externého systému.
Nie je to automaticky živý dotaz SQL. Je to riadená kópia alebo snímka údajov. Keď sa zmení zdrojový systém, treba zabezpečiť nové nahratie alebo synchronizáciu.
3. Vstavaný lookup
Vstavaný lookup poskytuje ProjectWise. Sem patrí presný zoznam ôsmich datasetov DMS.* uvedený vyššie. Ich obsah spravuje ProjectWise a my používame iba dokumentované stĺpce a filtre.
Ako sa čítajú údaje z lookupu
Základný postup má tri kroky:
getLookup('Názov')vyberie registrovaný lookup.filterEquals(...),filterIn(...)a podobné funkcie zúžia riadky.select(...)aleboselectOne(...)vráti výsledok.
Podporované operácie zahŕňajú:
getLookup,listLookups,filterEquals,filterNotEquals,filterContains,filterNotContains,filterIn,filterNotIn,select,selectOne.
Pri veľkých lookupoch treba filtrovať čo najskôr a až potom vyberať výsledok. Funkcia selectOne bez náhradnej hodnoty očakáva presne jeden záznam. Ak sa nájde nula alebo viac záznamov, vznikne chyba. Ak sa zadá náhradná hodnota, v oboch prípadoch sa vráti práve táto hodnota.
Príklad nad vstavaným lookupom:
getLookup('DMS.Users')
.filterEquals('name', thisForm.PW_USERNAME)
.selectOne('description', '')Výraz nájde používateľa podľa prihlasovacieho mena a vráti jeho popis, ktorý sa v danej konfigurácii používa ako celé meno.
Jednoduché príklady pre predstavu
Hodnota iného atribútu na tom istom formulári
Pôvodný zápis v ProjectWise mohol používať systémovú premennú typu $EDIT#Discipline$. V PW CEL sa používa objekt formulára:
thisForm.DisciplinePodmienka namiesto IIF
thisForm.TRIG_MINOR_REV == '1' ? thisForm.RV_REV_1 : ''Ak má spúšťač hodnotu 1, výsledkom je revízia. Inak sa vráti prázdny text.
Hodnota podľa aktuálneho používateľa
getLookup('Lkp.UserSupl')
.filterEquals('PW_USERNAME', thisUser.name)
.selectOne('PW_ORIGINATOR_CODE', '')CEL zistí aktuálne prihlasovacie meno, vyhľadá ho v registrovanom lookupe a vráti priradený kód organizácie.
Dajú sa čítať údaje z iného Environmentu?
Nie priamo cez kontext formulára. thisForm predstavuje aktuálny formulár a neexistuje všeobecný príkaz „otvor ľubovoľný Environment a načítaj jeho riadky“.
Ak máme pôvodný Environment používaný ako číselník, odporúčaný model je:
- Environment zostane miestom, kde sa spravujú hodnoty.
- Nad Environmentom sa zaregistruje lookup, ktorý sprístupní vybrané atribúty.
- Výraz CEL ho načíta cez
getLookup(...), vyfiltruje a vyberie hodnotu.
Ak zdrojové údaje nie sú vo vhodnom Environmente, alternatívou je lookup typu Standard so synchronizáciou. Ak je potrebná zložitá relačná logika nad viacerými tabuľkami, zvyčajne ju treba realizovať mimo CEL, výsledok predpočítať a jazyku CEL sprístupniť už pripravené údaje.
Čo použiť v konkrétnej situácii
| Potreba | Správny prvý kandidát |
|---|---|
| Aktuálny používateľ | thisUser |
| Hodnota na aktuálnom formulári | thisForm |
| Aktuálny dokument, priečinok alebo Work Area | Príslušný PW CEL objekt |
| Číselník spravovaný v Environmente ProjectWise | Lookup typu Environment |
| Používatelia, skupiny, zoznamy, workflow a stavy | Vstavaný DMS.* lookup |
| Údaje z ERP, CRM alebo iného externého systému | Lookup typu Standard a riadená synchronizácia |
| Opakovaná spoločná logika CEL | Library Expression |
Zložité spojenie (JOIN), agregácia alebo procedúra nad databázou | Redizajn, predvýpočet alebo externá integrácia |
Library Expression umožňuje uložiť opakovane používanú logiku CEL pod lib a volať ju z viacerých výrazov. Nie je to cesta k databáze a nerozširuje oprávnenia CEL na prístup k údajom.
Ako pristúpiť k migrácii
Pri každom starom atribúte je dobré najprv zistiť, čo v skutočnosti robí:
- Číta iba aktuálneho používateľa, dokument, priečinok alebo iný atribút?
- Používa iba jednoduchú podmienku alebo textovú funkciu?
- Číta číselník z pôvodného Environmentu používaného ako lookup?
- Pripája údaje z viacerých tabuliek?
- Volá uloženú procedúru?
- Vracia jednu hodnotu, alebo zostavuje zoznam pre výber?
- Aké má správanie pri nulovom, jednom a viacerých výsledkoch?
Potom sa vyberie cieľ:
- kontextový objekt, ak je údaj súčasťou aktuálneho kontextu ProjectWise,
- operácia CEL, ak ide o podmienku, text, zoznam alebo čas,
- lookup typu Environment, ak ide o spravovaný číselník ProjectWise,
- vstavaný lookup, ak ide o podporované systémové údaje,
- lookup typu Standard, ak údaje prichádzajú zvonka,
- redizajn, ak staré riešenie závisí od ľubovoľného SQL alebo procedúry.
Časté nedorozumenia
Je CEL náhrada za SQL?
Nie v plnom rozsahu. Nahrádza výrazovú logiku v podporovaných scenároch ProjectWise, ale nie všeobecné databázové dotazovanie.
Sú názvy ako DMS.Users názvami tabuliek SQL?
Pre používateľa CEL nie. Sú to vstavané datasety lookupov s presne určenými stĺpcami a filtrami.
Môžem použiť ľubovoľnú tabuľku SQL, ak poznám jej názov?
Nie. Názov databázovej tabuľky nie je podporovaným rozhraním CEL.
Môžem čítať hodnoty z pôvodného Environmentu používaného ako lookup?
Áno, ak sa nad ním zaregistruje lookup typu Environment a sprístupnia sa potrebné atribúty. Nie však prostredníctvom svojvoľného priameho dotazu.
Musím lookup typu Environment znovu vytvoriť po každom novom zázname?
Nie. Riadky sa čítajú dynamicky zo zdrojového Environmentu. Definíciu treba upraviť vtedy, keď pridávame alebo meníme sprístupnené stĺpce či konfiguráciu lookupu.
Je lookup typu Standard dynamický?
Nie rovnakým spôsobom. Jeho obsah sa musí nahrať alebo synchronizovať podporovaným nástrojom.
Môže Bentley v budúcnosti sprístupniť ďalšie údaje?
Áno, výrobca môže rozšíriť podporované objekty alebo datasety. To však neznamená, že dnešný administrátor môže sám otvoriť ľubovoľnú tabuľku.
Záver
PW CEL mení základný princíp konfigurácie:
- predtým sme často začínali otázkou „kde je údaj v databáze?“,
- teraz musíme začať otázkou „prostredníctvom ktorého podporovaného objektu alebo lookupu získam v ProjectWise tento údaj?“.
Jednoduché výpočty, podmienky, textové úpravy a prácu s aktuálnym dokumentom možno riešiť priamo v CEL. Číselníky možno sprístupniť prostredníctvom lookupov. Ľubovoľná databázová logika sa do CEL neprepisuje priamo; musí sa nahradiť podporovaným dátovým tokom alebo prepracovať.
To je zároveň hlavná výhoda aj nevýhoda PW CEL: je bezpečnejší a kontrolovanejší, ale zámerne neposkytuje možnosti všeobecného SQL.
Oficiálne zdroje
Vysvetlenia a ukážky vychádzajú z verejnej dokumentácie Bentley pre ProjectWise Administrator 2026 a z reálnych spôsobov použitia PW CEL.
- SQL Attribute Support changes – Moving to CEL
- ProjectWise CEL – hlavná dokumentácia
- CEL Contexts
- ProjectWise CEL Objects
- ProjectWise CEL Lookups
- List of Built-in Lookups
- Lookup Functions
- Replacing SQL Attribute System Variables
- Replacing Built-in SQL Functions
- Library Expressions
Stav zdrojov overený: 18. 8. 2026.