ubjs issueshttps://git-pub.intecracy.com/unitybase/ubjs/-/issues2018-09-06T18:28:59+03:00https://git-pub.intecracy.com/unitybase/ubjs/-/issues/10Specifying "browser" in package.json (as UB advices in warning messages by s...2018-09-06T18:28:59+03:00Andrii BezuglyiSpecifying "browser" in package.json (as UB advices in warning messages by server) lead to crashThe package.json of model:
```json
{
"config": {
"ubmodel": {
"name": "mdm"
}
},
"browser": "./public/initModel.js",
"private": true
}
```
The crash:
```
20180802 22352935 " ERROR assertPath@path.js:13:11 join@p...The package.json of model:
```json
{
"config": {
"ubmodel": {
"name": "mdm"
}
},
"browser": "./public/initModel.js",
"private": true
}
```
The crash:
```
20180802 22352935 " ERROR assertPath@path.js:13:11 join@path.js:474:7 getServerConfiguration/<@C:\projects-nectain\ub-app\node_modules\@unitybase\base\argv.js:323:44 getServerConfiguration@C:\projects-nectain\ub-app\node_modules\@unitybase\base\argv.js:301:3 @C:\projects-nectain\ub-app\node_modules\@unitybase\ub\modules\App.js:221:22 Module.prototype._compile@module.js:641:14 Module._extensions[".js"]@module.js:652:3 Module.prototype.load@module.js:560:3 tryModuleLoad@module.js:503:5 Module._load@module.js:495:3 Module.prototype.require@module.js:585:10 require@internal/module.js:11:14 @C:\projects-nectain\ub-app\node_modules\@unitybase\ub\modelUB.js:5:13 Module.prototype._compile@module.js:641:14 Module._extensions[".js"]@module.js:652:3 Module.prototype.load@module.js:560:3 tryModuleLoad@module.js:503:5 Module._load@module.js:495:3 Module.prototype.require@module.js:585:10 require@internal/module.js:11:14 @C:\projects-nectain\ub-app\index.js:1:74 Module.prototype._compile@module.js:641:14 Module._extensions[".js"]@module.js:652:3 Module.prototype.load@module.js:560:3 tryModuleLoad@module.js:503:5 Module._load@module.js:495:3 Module.prototype.require@module.js:585:10 @UB.js:42:3
20180802 22352935 " EXC C:\\projects-nectain\\ub-app\\node_modules\\@unitybase\\ub\\modules\\App.js:240\n\nError: App.serverConfig is undefined\n@C:\\projects-nectain\\ub-app\\node_modules\\@unitybase\\ub\\modules\\App.js:240:1\n@C:\\projects-nectain\\ub-app\\node_modules\\@unitybase\\ub\\modelUB.js:5:13\n@C:\\projects-nectain\\ub-app\\index.js:1:74\n@UB.js:42:3\n
20180802 22352935 " ERROR GET init ERROR=500 (App.serverConfig is undefined)
```
Adding/removing "browser" attribute to/from package.json makes UB work or not.Pavel MashliakovskiyPavel Mashliakovskiyhttps://git-pub.intecracy.com/unitybase/ubjs/-/issues/13AdminUI BUG - Drag-and-Drop file attempt leave the drop target element on the...2018-10-05T13:20:50+03:00Andrii BezuglyiAdminUI BUG - Drag-and-Drop file attempt leave the drop target element on the screenSTR:
* Open a form for any entity with "Document" attribute, for example User (it has "Avatar" document attribute)
* Start dragging file
* Do NOT put cursor on the drop target area ("Add Avatar" / "Replace Avatar")
* Stop dragging
AR:
*...STR:
* Open a form for any entity with "Document" attribute, for example User (it has "Avatar" document attribute)
* Start dragging file
* Do NOT put cursor on the drop target area ("Add Avatar" / "Replace Avatar")
* Stop dragging
AR:
* The area not disappeared
ER:
* The area must disappearPavel MashliakovskiyPavel Mashliakovskiyhttps://git-pub.intecracy.com/unitybase/ubjs/-/issues/18TimeZome conversion issue with "Date" attributes2019-01-24T19:42:58+02:00Andrii BezuglyiTimeZome conversion issue with "Date" attributesSTR:
* Have an entity with `Date` attribute.
* For example (a real example):
```json
{
"name": "deliveryDate",
"caption": "Delivery Date",
"dataType": "Date",
"allowNull": false
}
```
* Client-si...STR:
* Have an entity with `Date` attribute.
* For example (a real example):
```json
{
"name": "deliveryDate",
"caption": "Delivery Date",
"dataType": "Date",
"allowNull": false
}
```
* Client-side: generate a value for the attribute. Many UI controls (most) generate begin of the date in local TZ of the browser.
* That would be a value like `Tue Nov 13 2018 00:00:00 GMT+0200 (Eastern European Standard Time)`:
* Save (insert or update) an instance of the entity with the value.
* Request would looke like:
```json
{
"entity": "pln_ProjectSkuCategory",
"method": "update",
"execParams": {
"ID": 3000000062661,
"mi_modifyDate": "2018-11-05T14:53:44.000Z",
"deliveryDate": "2018-11-12T22:00:00.000Z"
}
}
```
* Note - no handling in `UB.connection` happened, no TZ shifting, nothing. Date value goes to JSON "as is" and in UTC it is not a start of a day anymore.
* In DB you would have:
```
| ID | deliveryDate |
| 3000000062661 | 2018-11-12 22:00:00.000 |
```
* And when you query that value from the server, you'd get (`resultData.data[0]`):
```json
[
3000000062661,
"2018-11-12T22:00:00Z"
]
```
* This value returned by `selectAsArray`:
![image](/uploads/d96a3fccf3eacdcc3f0c8698914e9c89/image.png)
* NOTE: now the value is all wrong.
EXPECTED:
* The best would be to `UB.connection.query` to patch date values, so that DB would store them as start of the day in UTC.
* Though "fixing" `selectAsArray` (to not change value) may look like a fix, it would be not: users with local TZ differ from the user saved the value would see different result, which is highly undesiraeble.
WORKAROUND APPLIED:
* We manually patch value before sending to server as the following:
```javascript
const deliverDateConverted = new Date((deliveryDate.getTime() / 60000 - deliveryDate.getTimezoneOffset())*60000)
```
Nectain 01Pavel MashliakovskiyPavel Mashliakovskiyhttps://git-pub.intecracy.com/unitybase/ubjs/-/issues/21Allow to append custom CSP rules2019-12-20T11:35:00+02:00Pavel MashliakovskiyAllow to append custom CSP rulesAs proposed by @rumata - add a additionalCSPSources custom setting to config
```
"customSettings":{
"additionalCSPSources": {
"default": [""],
"image": ["https://my-cdn"],
"connect": ["wss://my-external-chart.com", "..",
...As proposed by @rumata - add a additionalCSPSources custom setting to config
```
"customSettings":{
"additionalCSPSources": {
"default": [""],
"image": ["https://my-cdn"],
"connect": ["wss://my-external-chart.com", "..",
"....": ["..."]
}
}
```Pavel MashliakovskiyPavel Mashliakovskiyhttps://git-pub.intecracy.com/unitybase/ubjs/-/issues/25DDL Generator - support "strict" mode for DDL SQL generation - to be safe on ...2018-12-07T14:37:23+02:00Andrii BezuglyiDDL Generator - support "strict" mode for DDL SQL generation - to be safe on productionCurrently DDL generator makes it best to generate SQL which would run smoothly.
Even if you add NOT NULL reference to a dictionary - it will figure out and put a value in the added column.
That is awesome! ...for DEV environment.
And d...Currently DDL generator makes it best to generate SQL which would run smoothly.
Even if you add NOT NULL reference to a dictionary - it will figure out and put a value in the added column.
That is awesome! ...for DEV environment.
And dangerously scaring for production enviornment.
I suggest to provide the "strict" mode for DDL generator, which would not try to put default / technically valid values in added columns.
That would make me feel a lot safer :)Pavel MashliakovskiyPavel Mashliakovskiyhttps://git-pub.intecracy.com/unitybase/ubjs/-/issues/28Localization: allow UB request to specify (override) locale2019-01-28T12:35:47+02:00Andrii BezuglyiLocalization: allow UB request to specify (override) localeThere must be a way for request to pass the current language, so that developer won't need to do painful, form to form, request to request work by specifying "_lang^" suffixes manually. I believe it would be beneficiary for platform to ...There must be a way for request to pass the current language, so that developer won't need to do painful, form to form, request to request work by specifying "_lang^" suffixes manually. I believe it would be beneficiary for platform to be able to pass something like __lang: 'uk' in mParams.
Cases: anonymous user, which does not even have uData and rest of goodies available for regular users.https://git-pub.intecracy.com/unitybase/ubjs/-/issues/29Localization: provide translations UI for "Text" UB attributes2020-02-03T13:38:44+02:00Andrii BezuglyiLocalization: provide translations UI for "Text" UB attributesWe do have translation (the globe icon) for "String" attributes.
But what about "Text" attributes?We do have translation (the globe icon) for "String" attributes.
But what about "Text" attributes?https://git-pub.intecracy.com/unitybase/ubjs/-/issues/35TreeStructure table mixin for hierarchies2019-01-03T17:50:21+02:00Andrii BezuglyiTreeStructure table mixin for hierarchiesСделать возможность указывания в миксине - нужно ли вести специальную таблицу - Tree Structure.
Пример для `org_unit` - должна создасться таблица `org_unit_ts`:
```sql
CREATE TABLE org_unit_ts (
parentID bigint NOT NULL
, objectID...Сделать возможность указывания в миксине - нужно ли вести специальную таблицу - Tree Structure.
Пример для `org_unit` - должна создасться таблица `org_unit_ts`:
```sql
CREATE TABLE org_unit_ts (
parentID bigint NOT NULL
, objectID bigint NOT NULL
, level smallint NOT NULL
);
/*
-- MSSQL ONLY, Postgres does not have conception of clustered indexes and before version 11 does not support covered index (INCLUDE).
CREATE CLUSTERED INDEX idx_org_unit_ts_parentID ON org_unit_ts (parentID, objectID, level);
CREATE INDEX idx_org_unit_ts_objectID ON org_unit_ts (objectID, parentID) INCLUDE (level);
*/
-- This will work on all DB vendors, but where possible, it is better to use INLCUDE columns and clustered index.
-- ...better for huge hierarchies, for small - does not really matter.
CREATE INDEX idx_org_unit_ts_parentID ON org_unit_ts (parentID, objectID, level);
CREATE INDEX idx_org_unit_ts_objectID ON org_unit_ts (objectID, parentID, level);
```
Таблица должна для каждого объекта содержать по записи на каждый из предков, начиная с себя.
Т.е. для структуры
| ID | parentID | code |
| --- | --- | --- |
| 1 | null | Org1 |
| 2 | 1 | Org1_1 |
| 3 | 2 | Dep1_1_1 |
Должны быть такие записи
| objectID | parentID | level |
| --- | --- | --- |
| 1 | 1 | 0 |
| 2 | 2 | 0 |
| 2 | 1 | 1 |
| 3 | 3 | 0 |
| 3 | 2 | 1 |
| 3 | 1 | 2 |
Таблица должна первоначально - сразу после создания - должна заполняться подобным скриптом (писать циклы или CTE - лень :) ):
```sql
INSERT
INTO org_unit_ts (parentID, objectID, level)
SELECT ID
, ID
, 0
FROM org_unit;
INSERT
INTO org_unit_ts (parentID, objectID, level)
SELECT parentID, ID, 1
FROM org_unit
WHERE parentID IS NOT NULL;
INSERT
INTO org_unit_ts (parentID, objectID, level)
SELECT p.parentID, u.ID, 2
FROM org_unit u
JOIN org_unit p ON p.ID = u.parentID
WHERE p.parentID IS NOT NULL;
INSERT
INTO org_unit_ts
SELECT p2.parentID, u.ID, 3
FROM org_unit u
JOIN org_unit p ON p.ID = u.parentID
JOIN org_unit p2 ON p2.ID = p.parentID
WHERE p2.parentID IS NOT NULL;
INSERT
INTO org_unit_ts
SELECT p3.parentID, u.ID, 4
FROM org_unit u
JOIN org_unit p ON p.ID = u.parentID
JOIN org_unit p2 ON p2.ID = p.parentID
JOIN org_unit p3 ON p3.ID = p2.parentID
WHERE p3.parentID IS NOT NULL;
INSERT
INTO org_unit_ts
SELECT p4.parentID, u.ID, 5
FROM org_unit u
JOIN org_unit p ON p.ID = u.parentID
JOIN org_unit p2 ON p2.ID = p.parentID
JOIN org_unit p3 ON p3.ID = p2.parentID
JOIN org_unit p4 ON p4.ID = p3.parentID
WHERE p4.parentID IS NOT NULL;
INSERT
INTO org_unit_ts
SELECT p5.parentID, u.ID, 6
FROM org_unit u
JOIN org_unit p ON p.ID = u.parentID
JOIN org_unit p2 ON p2.ID = p.parentID
JOIN org_unit p3 ON p3.ID = p2.parentID
JOIN org_unit p4 ON p4.ID = p3.parentID
JOIN org_unit p5 ON p5.ID = p4.parentID
WHERE p5.parentID IS NOT NULL;
```
Для поддержания таблиц в актуальном состоянии нужно добавить такие обработчики к сущности:
```javascript
const dom = require('@unitybase/dom')
const me = global[require('path').basename(__filename).split('.')[0]]
me.on('insert:after', orgUnit_insertTreeStructure)
me.on('delete:before', orgUnit_deleteTreeStructure)
me.on('update:before', orgUnit_beforeUpdate)
me.on('update:after', orgUnit_afterUpdate)
/**
* @param {ubMethodParams} ctx
*/
function orgUnit_insertTreeStructure(ctx) {
const {ID, parentID} = ctx.mParams.execParams
if (parentID) {
console.debug('orgUnit_insertTreeStructure: insert links to ancestors: parentID=%d', parentID)
ctx.dataStore.execSQL(
`
INSERT
INTO org_unit_ts (parentID, objectID, level)
SELECT parentID, :ID:, level + 1
FROM org_unit_ts ts
WHERE ts.objectID = :parentID:
`,
{ID, parentID}
)
}
console.debug('orgUnit_insertTreeStructure: link to itself (level=0)')
ctx.dataStore.execSQL(`
INSERT
INTO org_unit_ts (parentID, objectID, level)
VALUES (:ID:, :ID:, 0)
`,
{ID}
)
console.debug('orgUnit_insertTreeStructure: done')
}
/**
* @param {ubMethodParams} ctx
*/
function orgUnit_deleteTreeStructure(ctx) {
const {ID} = ctx.mParams.execParams
console.debug('orgUnit_deleteTreeStructure: deleting links with ancestors')
ctx.dataStore.execSQL(`
DELETE
FROM org_unit_ts
WHERE objectID = :ID:
`,
{ID}
)
console.debug('orgUnit_deleteTreeStructure: done')
}
/**
* If change parent from non-empty value to a new empty or non-empty value, delete all the links between descendants and ancestors.
* @param {ubMethodParams} ctx
*/
function orgUnit_beforeUpdate(ctx) {
const {ID, parentID} = ctx.mParams.execParams
if (parentID === undefined) {
console.debug('orgUnit_beforeUpdate: parentID is not updated, do nothing')
return
}
let oldParentID = null
dom.store.switchContext(ctx.dataStore, 'selectBeforeUpdate', /** @type {TubDataStore} */store => {
oldParentID = store.get('parentID')
})
if (oldParentID === null) {
console.debug('orgUnit_beforeUpdate: old parent is null, do nothing')
return
}
if (parentID === oldParentID) {
console.debug('orgUnit_beforeUpdate: parentID has not been changed, do nothing')
return
}
console.debug(
'orgUnit_beforeUpdate: parentID has been changed from %d to %d; delete links with ancestors',
parentID, oldParentID
)
// Delete links between object descendants and object ascendants
ctx.dataStore.execSQL(`
DELETE
FROM ts
FROM org_unit_ts ts
WHERE EXISTS (SELECT 1 FROM org_unit_ts ts_anc WHERE ts_anc.parentID = ts.parentID AND ts_anc.objectID = :ID: AND ts_anc.level >= 1)
AND EXISTS (SELECT 1 FROM org_unit_ts ts_dsc WHERE ts_dsc.objectID = ts.objectID AND ts_dsc.parentID = :ID:)
`,
{ID}
)
console.debug('orgUnit_beforeUpdate', 'links with ancestors deleted!')
}
/**
* If change parent to a new non-empty value, insert all the new links between descendants and new ancestors.
* @param {ubMethodParams} ctx
*/
function orgUnit_afterUpdate(ctx) {
const {ID, parentID} = ctx.mParams.execParams
if (parentID === undefined) {
console.debug('orgUnit_beforeUpdate: parentID is not updated, do nothing')
return
}
if (parentID === null) {
console.debug('orgUnit_beforeUpdate: parentID is set empty, do nothing')
return
}
let oldParentID = null
dom.store.switchContext(ctx.dataStore, 'selectBeforeUpdate', /** @type {TubDataStore} */store => {
oldParentID = store.get('parentID')
})
if (parentID === oldParentID) {
console.debug('orgUnit_afterUpdate: parentID has not been changed, do nothing')
return
}
console.debug('orgUnit_afterUpdate', 'adding links to ancestors')
ctx.dataStore.execSQL(`
INSERT
INTO org_unit_ts (parentID, objectID, level)
SELECT ts_anc.parentID
, ts_dsc.objectID
, ts_dsc.level + ts_anc.level + 1
FROM org_unit_ts ts_dsc
, org_unit_ts ts_anc
WHERE ts_dsc.parentID = :ID:
AND ts_anc.objectID = :parentID:
`,
{ID, parentID}
)
console.debug('orgUnit_afterUpdate: done')
}
```
Все это легко может быть изменено для того, чтобы оно было применимо для любой сущности с иерархией, не только для org_unit.
Я бы для миксина tree сделал опции:
* Флаг "нужно поле mi_treePath"
* Флаг "нужна таблица _ts"
Теперь пару слов о том, чем это все полезно:
* Вывести список организаций для каждого staffunit - в грид, например (а попробуй сделать тоже самое без tree structure?! :) ):
```sql
SELECT su.ID
, (SELECT TOP 1 FROM org_organization o JOIN org_unit_ts ts ON ts.parentID = o.ID WHERE objectID = su.ID ORDER BY level) organizationID
FROM org_staffunit su
```
Подобный запрос может быть полезен в очень большом количестве случаев. Можно реализовывать настройки с наслендованием.
Работает БЫСТРО!
Также можно делать RLS который базируется на ACL с наследованием и т.п.Pavel MashliakovskiyPavel Mashliakovskiyhttps://git-pub.intecracy.com/unitybase/ubjs/-/issues/36AdminUI - grid - export to Excel / CSV / HTML - provide cell and row to forma...2019-03-12T16:13:42+02:00Andrii BezuglyiAdminUI - grid - export to Excel / CSV / HTML - provide cell and row to format functionsWhen a cell in grid has a custom format function, it accepts 3 parameters:
- value
- cell
- row
But when you export the very same grid to excel / html / csv - you have only the "value" parameter.
I found my peace with undefined cell and...When a cell in grid has a custom format function, it accepts 3 parameters:
- value
- cell
- row
But when you export the very same grid to excel / html / csv - you have only the "value" parameter.
I found my peace with undefined cell and just check its type - if it is object or not. Though that is not too comfortable :)
But I really do need row - I need to be able to look at other columns values. Otherwise, all I could do - return empty cells for columns, which builds their value client-side from other column's values.Nectain 01Pavel MashliakovskiyPavel Mashliakovskiyhttps://git-pub.intecracy.com/unitybase/ubjs/-/issues/38ELS - possibility to set multiple method names as mask value2019-10-17T10:45:17+03:00Andrii BezuglyiELS - possibility to set multiple method names as mask valueCurrently there is rather insecure way of specifying mask, like `[iuda]*`.
This would give access for unexprected method names, like `addMember`.
Specifying method names individually just pollutes ELS table.
It would be good to be able...Currently there is rather insecure way of specifying mask, like `[iuda]*`.
This would give access for unexprected method names, like `addMember`.
Specifying method names individually just pollutes ELS table.
It would be good to be able to specify method names using separator, comma or | or any other.Pavel MashliakovskiyPavel Mashliakovskiyhttps://git-pub.intecracy.com/unitybase/ubjs/-/issues/39AdminUI: ShowList - to allow display queries without ID column2019-01-28T15:15:12+02:00Andrii BezuglyiAdminUI: ShowList - to allow display queries without ID columnI have entities mapped to views.
Any chance to allow queries which do NOT contain ID column? It is a bit of a pain to add some meaningless, unique value as ID for such entities - just to be able to "showList" them.I have entities mapped to views.
Any chance to allow queries which do NOT contain ID column? It is a bit of a pain to add some meaningless, unique value as ID for such entities - just to be able to "showList" them.Nectain 01Pavel MashliakovskiyPavel Mashliakovskiyhttps://git-pub.intecracy.com/unitybase/ubjs/-/issues/40ORG: Add "organizationID" to "org_department"2019-01-28T12:27:22+02:00Andrii BezuglyiORG: Add "organizationID" to "org_department"There are lots of cases, when it is required to output in grid organization of departments or organization staff units.
Please consider adding `org_department.organizationID` - it would help a lot.There are lots of cases, when it is required to output in grid organization of departments or organization staff units.
Please consider adding `org_department.organizationID` - it would help a lot.Nectain 01Pavel MashliakovskiyPavel Mashliakovskiyhttps://git-pub.intecracy.com/unitybase/ubjs/-/issues/43AdminUI: ShowList - to allow columns without "name"2019-01-27T18:40:23+02:00Andrii BezuglyiAdminUI: ShowList - to allow columns without "name"Sometimes, I need calculated columns on client.
But ShowList requires "name", which it puts to the query to DB.
Please don't require it. I need columns, which would not cause extra column to be queries from DB.
A trick with specifying ...Sometimes, I need calculated columns on client.
But ShowList requires "name", which it puts to the query to DB.
Please don't require it. I need columns, which would not cause extra column to be queries from DB.
A trick with specifying "ID" works only if I have just one such column. If I have more - I need more "fake" attributes.
Please just allow columns with "format", but without "name".Nectain 01Pavel MashliakovskiyPavel Mashliakovskiyhttps://git-pub.intecracy.com/unitybase/ubjs/-/issues/44DocNet. При первом входе в Систему по домену запрашиваются авторизационные да...2019-02-06T16:17:34+02:00Жукова ВикторияDocNet. При первом входе в Систему по домену запрашиваются авторизационные данные пользователя.1. Пользователь на форме входа в Документооборот выбирает доменный вход.
2. Нажимает кнопку "Продолжить".
Результат: Открывается дополнительное окно для указания имени пользователя и пароля. ![Domain_enter](/uploads/6663a105ec2ec7dcc346...1. Пользователь на форме входа в Документооборот выбирает доменный вход.
2. Нажимает кнопку "Продолжить".
Результат: Открывается дополнительное окно для указания имени пользователя и пароля. ![Domain_enter](/uploads/6663a105ec2ec7dcc34627e415893294/Domain_enter.PNG)
Ожидаемый результат: Никаких дополнительный форм для указания параметров входа быть не должно.Pavel MashliakovskiyPavel Mashliakovskiyhttps://git-pub.intecracy.com/unitybase/ubjs/-/issues/52При закрытии закладки формы, пока на форме крутится "Loading...", нужно запре...2019-06-12T14:16:38+03:00Zimina ValentynaПри закрытии закладки формы, пока на форме крутится "Loading...", нужно запретить закрывать закладку.https://tstora.docflow2.unitybase.info/
tester1 (пароль 1111)
1. Создать проект внутреннего документа, заполнить обяз. поля, сохранить.
2. на вкл.Исполнение добавить пункт, заполнить форму пункта добавить через контрол исполнителя.
3. по...https://tstora.docflow2.unitybase.info/
tester1 (пароль 1111)
1. Создать проект внутреннего документа, заполнить обяз. поля, сохранить.
2. на вкл.Исполнение добавить пункт, заполнить форму пункта добавить через контрол исполнителя.
3. пока крутиться "Loading..." закрыть вкладку с документом
Вкладка закрывается и выдается ошибка:
Виникла невідома помилка. Зверніться, будь ласка, до адміністратора системи.file: "" line: TypeError: Cannot read property 'mask' of undefined
at e.mask (/models/adminui-pub/dist/ext-all.min.js:1:318367)
at e.setRecord (/clientRequire/@docflow/doc/public/dist/doc.app.min.js:1:53833)
at e.newRecord (/clientRequire/@docflow/doc/public/dist/doc.app.min.js:1:53729)
at eval (/clientRequire/@docflow/doc/public/dist/doc.app.min.js:1:53280)
at r (/clientRequire/@unitybase/adminui-pub/dist/adminui.app.min.js:1:9999)
at o._settlePromiseFromHandler (/clientRequire/@unitybase/adminui-pub/dist/adminui.app.min.js:1:413188)
at o._settlePromise (/clientRequire/@unitybase/adminui-pub/dist/adminui.app.min.js:1:413988)
at o._settlePromise0 (/clientRequire/@unitybase/adminui-pub/dist/adminui.app.min.js:1:414687)
at o._settlePromises (/clientRequire/@unitybase/adminui-pub/dist/adminui.app.min.js:1:416039)
at l (/clientRequire/@unitybase/adminui-pub/dist/adminui.app.min.js:1:417592)
at s (/clientRequire/@unitybase/adminui-pub/dist/adminui.app.min.js:1:417531)
at i._drainQueues (/clientRequire/@unitybase/adminui-pub/dist/adminui.app.min.js:1:419099)
at drainQueues (/clientRequire/@unitybase/adminui-pub/dist/adminui.app.min.js:1:417273)
-------------------
Необходимо запретить закрывать вкладку на форме пока форма не догружена.Pavel MashliakovskiyPavel Mashliakovskiyhttps://git-pub.intecracy.com/unitybase/ubjs/-/issues/58ability to switch between applications from one menu2019-09-02T10:19:06+03:00Седнева Ольгаability to switch between applications from one menuImplement the ability to integrate different products on the UB(DocNet, Nectain, A5) in one user interface on the principle Jira+Confluence
![jira-conf](/uploads/be4f689060e8bbdceb965fc93e164823/jira-conf.png)Implement the ability to integrate different products on the UB(DocNet, Nectain, A5) in one user interface on the principle Jira+Confluence
![jira-conf](/uploads/be4f689060e8bbdceb965fc93e164823/jira-conf.png)Pavel MashliakovskiyPavel Mashliakovskiyhttps://git-pub.intecracy.com/unitybase/ubjs/-/issues/59Entity: Support INCLUDE in INDEX2019-08-10T13:47:10+03:00Andrii BezuglyiEntity: Support INCLUDE in INDEXSQL Server has a nice feature: field inclusion into index.
It allows in some scenarios to take values from index, instead of looking up clustered index.
I suggest to add support for the following:
```json
"idx_ldoc_Document_eav_int"...SQL Server has a nice feature: field inclusion into index.
It allows in some scenarios to take values from index, instead of looking up clustered index.
I suggest to add support for the following:
```json
"idx_ldoc_Document_eav_int": {
"type": "INDEX",
"definition": {
"keys": {
"intValue": {}
},
"include": {
"attrID": {},
"docID": {}
}
}
},
```
This shall generate for MS SQL:
```sql
CREATE NONCLUSTERED INDEX idx_ldoc_Document_eav_int ON dbo.doc_Document_eav
(intValue) INCLUDE (attrID, docID)
```
For other vendors, columns in "include" may be part of index, unless index is unique.
For unique index, for other vendors, just ignore "include".
I whole, this would allow:
* Take advantage of a nice SQL Server feature, and have a better performance on some cases
* When other vendors support it, we will be ready:
* https://www.depesz.com/2018/04/26/waiting-for-postgresql-11-indexes-with-include-columns-and-their-support-in-b-tree/Pavel MashliakovskiyPavel Mashliakovskiyhttps://git-pub.intecracy.com/unitybase/ubjs/-/issues/68When you try to populate the table with data, a conflict occurs.2020-02-21T15:24:03+02:00Ghost UserWhen you try to populate the table with data, a conflict occurs.When you try to populate the table with data, a conflict occurs
For field "Description" set attribute “isMultilang”: true.
```
dataLoader.loadArrayData(conn, data, 'uba_role', ['name', 'description_en^', 'description_ru^', 'description_...When you try to populate the table with data, a conflict occurs
For field "Description" set attribute “isMultilang”: true.
```
dataLoader.loadArrayData(conn, data, 'uba_role', ['name', 'description_en^', 'description_ru^', 'description_tg^'], [0, 1, 2, 3], 1)
```
![UBbug](/uploads/e08865e7d16f12d091602c49741cb81b/UBbug.png)
MPV: the reason is what uba_role.description attribute (multilang) is mapped to uba_subject.name
https://git-pub.intecracy.com/unitybase/ubjs/-/issues/77Error in the console "Maximum call stack size exceeded".2020-02-03T17:33:29+02:00Ghost UserError in the console "Maximum call stack size exceeded".Error in the console "Maximum call stack size exceeded" when hovering over a minimized menu item.
Steps to Reproduce:
1. Open app.
2. Navigate to the Menu item.
3. Look at the console.
![Error](/uploads/14919ec556f4166ad2b91107f9af2e60/...Error in the console "Maximum call stack size exceeded" when hovering over a minimized menu item.
Steps to Reproduce:
1. Open app.
2. Navigate to the Menu item.
3. Look at the console.
![Error](/uploads/14919ec556f4166ad2b91107f9af2e60/Error.png)https://git-pub.intecracy.com/unitybase/ubjs/-/issues/80Json fields. Error scripts on first display.2019-10-02T17:35:06+03:00Ghost UserJson fields. Error scripts on first display.Json fields. Error scripts on first display.
![Json_fields._Creating_portal.](/uploads/18aba8310dbc69cf04b3277f23790de3/Json_fields._Creating_portal..png)Json fields. Error scripts on first display.
![Json_fields._Creating_portal.](/uploads/18aba8310dbc69cf04b3277f23790de3/Json_fields._Creating_portal..png)