Added
5.24.12 2024-04-23
- new icons:
u-icon-code
u-icon-deploy
u-icon-curly-braces
5.24.11 2024-04-16
- added check that pasted text contains only printable characters. For <textarea>
\n
is also allowed. For CodeMirror
- \n
and \t
.
Attempt to paste non-printable characters throws ERR_UNPRINTABLE_CHARS
exception
5.24.10 2024-04-10
5.24.9 2024-04-05
- new icons:
u-icon-stamp
u-icon-file-import
u-icon-barcode
u-icon-qrcode
u-icon-compress
u-icon-file-zip
u-icon-file-zip2
u-icon-email
u-icon-email-profile
u-icon-email-settings
Fixed
5.24.12 2024-04-23
- allow paste text what contains
\r
(in addition to \n
) for <textarea>
5.24.8 2024-04-01
UTableEntity
fixed webDav.getURI
method call - added await
Changed
5.24.80 2024-04-10
PDFComponent
: added fallback to @unitybase/pdf-viewer
on Ext.form
Added
5.24.5 2024-04-23
- added an example of using the call
App.dbConnections.execParsed
method to execute a stored procedure with
output parameters (ODBC driver, UB 5.24.11)
Fixed
5.24.3 2024-04-16
- LocalDataStore doFiltration method instantly returns empty array, when input is an empty array
5.24.2 2024-04-05
LocalDataStore.whereListToFunctions
: do not fail for 1=1
and 0=1
custom conditions for cached entities
They likely were assigned as always negative or always positive ones inside the CustomRepository.where()
Added
5.24.9 2024-04-23
- Localization for server error
ERR_SET_REFERENCE_ERROR
, which means insert / update a record, which
contains reference to a non-existing entity
5.24.7 2024-04-10
- added
502 Bad gateway
server-side error response handling - now instead of unhandled exception client throws
ERR_WAITING_SERVER_TO_START
message and global error handler translate it as
The server is undergoing short routine maintenance. After 1-2 minutes, you will be able to continue working without losing data and reloading the page. If the error occurs again, reload the page
- for
index
page and in case nginx is used as a reverse proxy - HTTP 502 error will be redirected to /models/cust/502.html or /models/ub-pub/502.html page (if 502.html not found in cust
model)
- added i18n for
requireDigitalSignature
(used in pki
interface for Ukrainian cryptography)
UbPkiInterface
: added setAllowPrivateKeyCache
method, added parameter clearCache
for closePrivateKey
method
For a while, implemented in @ub-d/iit-web-crypto
only
Changed
5.24.8 2024-04-16
- Improvements in
LocalRepository
class:
- Now it is not required to pass
rowCount
, which may be implied from the data
array length
- Added support of the
#maxdate
macro in LocalRepository
class for mi_deleteDate
attributes, for example:return UB.LocalRepository(
{
data: attributes.map(({value, label}) => [value, label, '#maxdate']),
fields: ['code', 'name', 'mi_deleteDate']
},
'frm_Attribute'
)
.attrs('code', 'name', 'mi_deleteDate')
.orderBy('name')
This will return the value mi_deleteDate
, which corresponds to the not deleted rows.
- Added support for initializing from array of objects, for example:
const data = [
{code: '1', name: 'One'},
{code: '2', name: 'Two'}
]
return UB.LocalRepository(data, 'frm_Attribute')
.attrs('code', 'name')
.orderBy('name')
If entity contains mi_deleteDate
and data objects do not contain this attribute,
the data store will be extended with the mi_deleteDate
attribute with the value #maxdate
.
Added
5.25.22 2024-04-05
- metadata loader will throw on server startup in case metafile with localization contains mapping for either an entity or any attribute
Changed
5.25.24 2024-04-23
App.*Cache*
functions family signature changed - last parameter ignoreTenants
of type boolean replaced by options
Object.
This should not break an existed applications, since ignoreTenants
is used only by ubq
model af far as we know.
The new options object allows us to be more flexible in the future. For a while a most important additions are:
options.nx
- if true
only set the key if it does not already exist. Can be used to atomically set value
options.px
- REDIS backend only. Set the specified expire time, in milliseconds (a positive integer); 0 - not expired
Example:
// old code
if (App.globalCacheGet(GLOBAL_CACHE_KEY) === '1') {
console.warn('SCHEDULER: task %s is already running', taskName)
return false
App.globalCachePut(GLOBAL_CACHE_KEY, '1')
try {
// run a sceduler
} finally {
App.globalCachePut(GLOBAL_CACHE_KEY, '0')
// new code
// use nx option (Put if Not Exists) instead of get + put to atomically validate what task is not running
// in case of Redis backend px option prevent key to be stored forever if server crashes
if (!App.globalCachePut(GLOBAL_CACHE_KEY, '1', { nx: true, px: ONE_HOUR_MS })) {
console.warn('SCHEDULER: task %s is already running', taskName)
return false
try {
// run a scheduler
} finally {
App.globalCachePut(GLOBAL_CACHE_KEY, null) // remove key
5.25.21 2024-04-01
- multi-tenancy: new parameter
ignoreTenants
added to App.globalCacheGet
, App.globalCachePut
, App.memCachePut
and App.memCacheGet
. By default, it's false
, so in case of multi-tenancy environment both global and in-mem cache
will be separated by tenantID (keys will be appended by ':tid'+tenantID
).
In case ignoreTenants=true
keys are global (:tid not added). Require UB@5.24.9
Added
5.24.6 2024-04-16
- new system role
ServiceAccount
. For a while user with ServiceAccount
role will ignore 2FA and not allowed to use UI.
In future some other rules can be applied to ServiceAccount
role
Added
5.25.27 2024-04-16
DDL generator
: for Oracle database VARCHAR2(4000)
column will not be altered to NVARCHAR2(2000)
- first one is
used to store Document
attributes in some old projects
5.25.26 2024-04-10
ubcli generateNginxCfg
will add redirection to custom "Maintenance" page in case server is down (502 Bad Gateway).
Default page can be replaced by 502.html
in cust
model.
5.25.25 2024-04-05
- new command
ubcli crypt certParse path/to/file.cer
- parse binary certificate and output it content as JSON into stdout.
Can accept folder ubcli crypt certParse path/to/folder/
- in this case will parse all files on folder
5.25.24 2024-04-01
ubcli generateNginxCfg
now can accept -r
, -l
, -sslkey
, -sslcert
and -maxDocBody
command line parameters
as environment variables UB_SSLREDIRECT
, UB_LB
, UB_SSLKEY
,UB_SSLCERT
and UB_MAXDOCBODY
.
This allows to avoid writing custom lifecycle/ub-app-upgrade.sh
script. Example:
UB_SSLREDIRECT=true \
UB_LB=true \
UB_SSLKEY="/etc/letsencrypt/live/myapp.mydomain.com/privkey.pem" \
UB_SSLCERT="/etc/letsencrypt/live/myapp.mydomain.com/fullchain.pem" \
UB_MAXDOCBODY=70m
ubcli generateNginxCfg
ubcli generateNginxCfg -r -l -optimistic \
-sslkey /etc/letsencrypt/live/myapp.mydomain.com/privkey.pem \
-sslcert /etc/letsencrypt/live/myapp.mydomain.com/fullchain.pem \
-maxDocBody 70m
ubcli migrate
now can accept -optimistic
command line parameter as environment variable UB_OPTIMISTIC
.
This allows to avoid writing custom lifecycle/ub-app-upgrade.sh
script. Example:
UB_OPTIMISTIC=true ubcli migrate -u root
ubcli migrate -u root -optimistic
Changed
5.24.5 2024-04-01
- adopt scheduler to changes in
memCacheGet|Put
for multi-tenancy environment
Fixed
5.24.8 2024-04-23
- fixed possible suspension of execution of a schedulers task what marked as
singleton
in case redis is used as a globalCache
backend and server crashed during task execution.
Now model sets a globalCache mark that indicates the task is being performed with a one hour TTL, so even server cash,
the mark will disappear instead of staying in redis forever
5.24.5 2024-04-01
ubs_numcounter.getRegnumLoosely
: fix possible range intersection for loosely counter in case of several
server instance (either load balancing or separate scheduler)
Added
5.24.7 2024-04-05
ubs_settings.loadKey
now internally uses globalCache
(cache is flushed after value is edited, so restart do not required).
This can dramatically reduce DB queries count in some existed scenarios (we saw 25 DB query per second into ubs_settings).
For a multi-instance deployment what require edition of ubs_settings
in runtime redis
must be configured as a globalCache
storage
Fixed
5.24.8 2024-04-10
ubs_setting
cache flush happens now even if fieldList on insert/update does not contain "settingKey"
5.24.7 2024-04-05
- softLock mixin: on before update - renew lock if it is not exists instead of throwing an error, because in long transaction lock can expire
- fixed
ubs_numcounter.getRegnumLoosely
if called without startNum
parameter and key not exists (added default startNum=0)