Skip to main content
Version: 56.0.0

Табличні атрибути

Основні операції​

Події табличних атрибутів​

Взяти значення табличного атрибута​

Event: loaded для табличного атрибута. Спрацьовує під час відкриття рядка табличного атрибута. event.documentItem.getAttribute - взяти значення табличного атрибута.

module.exports = {
loaded(event) {
console.log(
'Значення атрибута text001:', event.documentItem.getAttribute('text001')
)
}
}

Встановити значення табличного атрибута​

Event: loaded для табличного атрибута. Спрацьовує під час відкриття рядка табличного атрибута. event.documentItem.setAttribute - встановити значення табличного атрибута.

module.exports = {
loaded(event) {
event.documentItem.setAttribute('text002', 'Значення атрибута')
}
}

Спрацьовує при редагуванні атрибута в таблиці​

Event: attributeChanged для табличного атрибута. Спрацьовує при редагуванні атрибута, який знаходиться в таблиці.

module.exports = {
documentItem_attributeChanged_Attrtext01(event) {
event.documentItem.setAttribute('Attrtext02', event.value)
}
}

Дії: Оновлення атрибута при натисканні на кнопку​

У вказаному прикладі виконання Дії з кодом: actiontest виконується оновлення табличного атрибута. ID табличного атрибута задано у змінній.

module.exports = {
action_executed_actiontest(event) {
const TableAttrNodeID = 4
event.form.getNodeControl(TableAttrNodeID).refreshData()
}
}

Дії над атрибутами Процеси, Завдання​

Оновлення атрибутів зі скрипта.

У зазначеному прикладі виконання Дії з кодом: d1 запускається процес і завдання відповідно. На формі документа є зазначені атрибути. Передбачено "оновлення" зазначених атрибутів із невеликим timeout.

const TASK_LIST_ATTR_NODE_ID1 = 4
const TASK_LIST_ATTR_NODE_ID2 = 5

module.exports = {
action_executed_d1(event) {
setTimeout(() => {
event.form.getNodeControl(TASK_LIST_ATTR_NODE_ID1).refreshData()
event.form.getNodeControl(TASK_LIST_ATTR_NODE_ID2).refreshData()
}, 5000)
}
}

Фільтрація та управління даними​

Налаштовуємо фільтрацію записів по значенням довідника. Фільтруватимемо наступні таблиці:

  • Табличний атрибут
  • Зв'язки між документами
  • Процеси
  • Завдання

Табличний атрибут​

Будуть показані тільки записи, у яких відповідне поле починається з U.

module.exports = {
form_5_getRepository(event) {
event.repository.where('attrValues.a016.code3', 'startsWith', 'U')
}
}

Зв'язки між документами​

Будуть показані тільки записи, у яких відповідне поле починається з А.

module.exports = {
form_7_getRepository(event) {
event.repository.where('linkedDocID.attrValues.a016.code3', 'startsWith', 'A')
}
}

Процеси​

Будуть показані лише процеси у статусі Виконується.

module.exports = {
form_8_getRepository(event) {
event.repository.where('status.name', 'startsWith', 'Виконується')
}
}

Завдання​

Будуть показані лише завдання процесу у статусі Відкрите.

module.exports = {
form_9_getRepository(event) {
event.repository.where('status.name', 'startsWith', 'Відкрите')
}
}

Для рольового атрибута​

Керування списком доступних для вибору значень в атрибутів Dropdown. Може бути застосовано для: рольового атрибута, а також для атрибутів з довідником за умови, що довідник - системний (можливо як для single choice, так і для multi choice довідників). 4 це id рольового атрибута. В результаті в зазначеному рольовому атрибуті будуть доступні тільки записи, які починаються з літери Б.

module.exports = {
form_4_getRepository(event) {
event.repository.where('caption', 'startsWith', 'Б')
}
}

Кастомні кнопки​

Додавання кнопок​

Додавання власних кнопок та дій по їх натисканню.

Можливе додавання кнопок у три місця: toolbar, toolbar меню та контекстне меню.

Додавання кнопки на toolbar​

module.exports = {
form_4_additionalActions(event) {
return [
{
code: 'code1',
label: 'Кнопка 1',
icon: 'u-icon-key',
handler() {
console.log('Натискання Кнопки 1')
},
showForSelectedRow: true
}
]
}
}

Додавання декількох кнопок на toolbar​

module.exports = {
form_4_additionalActions(event) {
return [
{
code: 'code1',
label: 'Кнопка 1',
icon: 'u-icon-message',
handler() {
console.log('Натискання Кнопки 1')
},
showForSelectedRow: true
},
{
code: 'code2',
label: 'Кнопка 2',
icon: 'u-icon-grid',
handler() {
console.log('Натискання Кнопки 2')
},
showForSelectedRow: true
},
{
code: 'code3',
label: 'Кнопка 3',
icon: 'u-icon-book-alt',
handler() {
console.log('Натискання Кнопки 3')
},
showForSelectedRow: true
}
]
}
}

Додавання декількох кнопок на toolbar та їх розміщення​

Додавання декількох кнопок на toolbar та їх сортування (розміщення) в toolbar (sortOrder)

module.exports = {
form_4_additionalActions(event) {
return [
{
code: 'code1',
label: 'Кнопка 1',
icon: 'u-icon-message',
sortOrder: 30,
handler() {
console.log('Натискання Кнопки 1')
},
showForSelectedRow: true
},
{
code: 'code2',
label: 'Кнопка 2',
icon: 'u-icon-grid',
sortOrder: 20,
handler() {
console.log('Натискання Кнопки 2')
},
showForSelectedRow: true
},
{
code: 'code3',
label: 'Кнопка 3',
icon: 'u-icon-book-alt',
sortOrder: 10,
handler() {
console.log('Натискання Кнопки 3')
},
showForSelectedRow: true
}
]
}
}

Додавання пункту в меню інструменту​

Для пунктів цього меню неможливе використання операцій над рядком таблиці.

module.exports = {
form_4_additionalActions(event) {
return [
{
code: 'code1',
label: 'Кнопка 1',
icon: 'u-icon-key',
handler() {
console.log('Натискання Кнопки 1')
},
toolbar: true
}
]
}
}

Додавання декількох пунктів у меню toolbar та їх сортування​

module.exports = {
form_4_additionalActions(event) {
return [
{
code: 'code1',
label: 'Кнопка 1',
icon: 'u-icon-key',
sortOrder: 40,
handler() {
// Дія при натисканні
},
toolbar: true
},
{
code: 'code2',
label: 'Кнопка 2',
icon: 'u-icon-key',
sortOrder: 30,
handler() {
// Дія при натисканні
},
toolbar: true
}
]
}
}

Додавання пункту до контекстного меню​

Для пунктів цього меню неможливе використання операцій над рядком таблиці.

module.exports = {
form_4_additionalActions(event) {
return [
{
code: 'code1',
label: 'Кнопка 1',
icon: 'u-icon-key',
handler() {
console.log('Натискання Кнопки 1')
},
contextMenu: true
}
]
}
}

Додавання кількох пунктів у контекстне меню та їх сортування​

module.exports = {
form_4_additionalActions(event) {
return [
{
code: 'code1',
label: 'Кнопка 1',
icon: 'u-icon-key',
sortOrder: 40,
handler() {
// Дія при натисканні
},
contextMenu: true
},
{
code: 'code2',
label: 'Кнопка 2',
icon: 'u-icon-key',
sortOrder: 30,
handler() {
// Дія при натисканні
},
contextMenu: true
}
]
}
}

Обробка подій кнопок​

До кнопки toolbar додати обробник рядка таблиці, який виділено​

Взяти значення атрибута з рядка таблиці.

const { Repository } = require('@unitybase/ub-pub')

module.exports = {
form_4_additionalActions(event) {
return [
{
code: 'code1',
label: 'Кнопка 1',
icon: 'u-icon-message',
async handler({ rowID }) {
const entry = await Repository('dfx_DocumentItem')
.attrs('attrValues.a003')
.selectById(rowID)
console.log('Значення атрибута:', entry)
},
showForSelectedRow: true
}
]
}
}

Приклад аналогічний до попереднього​

Тільки в даному випадку виконується видалення рядка таблиці.

const { Repository, connection } = require('@unitybase/ub-pub')

module.exports = {
form_4_additionalActions(event) {
return [
{
code: 'code1',
label: 'Видалити запис',
icon: 'u-icon-key',
async handler({ rowID }) {
await connection.run({
entity: 'dfx_DocumentItem',
method: 'delete',
execParams: { ID: rowID }
})
event.form.getNodeControl(4).refreshData()
},
showForSelectedRow: true
}
]
}
}

Для кнопки з табличним атрибутом​

Для кнопки з табличним атрибутом також можна використовувати form_ID_beforeAction_<actionCode>, form_ID_actionExecuted_<actionCode>

По аналогії з файловим атрибутом.

Приклад використання form_ID_beforeAction_<actionCode>:

const { showErrorWindow } = require('@unitybase/ub-pub')

module.exports = {
form_4_additionalActions(event) {
return [
{
code: 'button2',
label: 'Вигрузити файл',
icon: 'fas fa-arrow-down',
handler() {
const fileAttributeNodeID = 6
const fileAttributeControl = event.form.getNodeControl(fileAttributeNodeID)
fileAttributeControl.downloadFile() // Вигрузка файла
},
showForSelectedRow: true
}
]
},
form_4_beforeAction_button2(event) {
const fileAttr = event.document.getNativeFileAttribute()
if (!fileAttr.fileInfo) {
event.cancelAction()
showErrorWindow('Файл повинен бути завантажений')
return
}
if (!fileAttr.isSigned) {
event.cancelAction()
showErrorWindow('Файл повинен бути підписаний')
return
}
if (fileAttr.fileInfo.contentType !== 'application/pdf') {
event.cancelAction()
showErrorWindow('Файл повинен бути формату pdf')
}
}
}

Кнопка для редагування значення в табличному рядку​

Додавання кнопки в табличний атрибут, після натискання якої встановлюється значення атрибута у виділеному рядку

const { Repository, connection } = require('@unitybase/ub-pub')

module.exports = {
form_33_additionalActions(event) { // 33 - код табличного атрибута на формі документа
return [
{
code: 'code1',
label: 'Оновити ms1',
icon: 'u-icon-key',
async handler({ rowID }) {
await connection.update({
entity: 'dfx_DocumentItem',
execParams: {
ID: rowID,
'attrValues.ms01': 'newValue' // код атрибута і значення, яке буде встановлено
},
__skipOptimisticLock: true
})
event.form.getNodeControl(33).refreshData() // оновлення даних в таблиці
},
showForSelectedRow: true
}
]
}
}

Контроль видалення​

Обробник instance_canDelete керує видимістю кнопки Видалити, підтримує параметри:

  • canDelete (boolean) - enable or disable 'delete button'
  • hideButton (boolean) - hide delete button from toolbar
  • reason (string) - tooltip for disabled button with reason to not delete this entry

Обробник instance_canDelete​

Робимо не активною кнопку Видалити у табличному атрибуті при активації перемикача (атрибут типу Toggle). Скрипт потрібно додавати у табличному атрибуті.

module.exports = {
instance_canDelete(event) {
if (event.documentItem.getAttribute('ms15')) { // ms15 - код атрибута типу "Перемикач" на формі табличного атрибута
return {
canDelete: false,
hideButton: false,
reason: event.documentItem.getAttribute('ms06')
} // робимо не активною кнопку "Видалити", при наведенні відображається tooltip з текстом атрибута ms06
}
return {canDelete: true, hideButton: false} // кнопка доступна за замовчуванням
}
}

Управління колонками​

Налаштовуємо відображення колонок наступних таблиць:

  • Табличний атрибут
  • Зв'язки між документами
  • Процеси
  • Завдання

Табличний атрибут​

Сховати колонку залежно від Ролі​

Hide. Сховати колонку залежно від Ролі, під якою відкритий документ.

const TABLE_NODE_ID = 5

module.exports = {
form_5_mounted(event) {
hideColumn(event)
}
}

function hideColumn(event) {
if (event.document.userHasRole('lawyer')) {
const tableControl = event.form.getNodeControl(TABLE_NODE_ID)
const colorColumn = tableControl.getColumn('attrValues.i2')
colorColumn.hide()
}
}

Сховати колонку залежно від Стану документа​

Hide. Сховати колонку залежно від Стану документа.

const TABLE_NODE_ID = 5 // id табличного атрибута

module.exports = {
// приховування колонки при подальшому відкритті документа
form_5_mounted(event) {
if (event.document.state === 'processing') {
hideColumn(event)
}
},
// приховування колонки при виконанні Дії
action_executed_d1(event) {
hideColumn(event)
}
}

function hideColumn(event) {
const tableControl = event.form.getNodeControl(TABLE_NODE_ID)
const Column = tableControl.getColumn('attrValues.a003') // прихований атрибут a003
Column.hide()
}

Показати стовпчик при натисканні на Кнопку​

Show та Hidden. Показати стовпчик при натисканні на Кнопку. Спочатку колонка прихована за умовою Ролі. Також булева змінна Hidden - прихована колонка чи ні.

const TABLE_NODE_ID = 5

module.exports = {
form_5_mounted(event) {
if (event.document.userHasRole('lawyer')) {
getTableI2Column(event).hide()
if (getTableI2Column(event).hidden) {
console.log('Колонка прихована')
}
}
},
form_6_click(event) {
getTableI2Column(event).show()
if (getTableI2Column(event).hidden) {
// колонка прихована
} else {
console.log('Колонка відображається')
}
}
}

function getTableI2Column(event) {
return event.form.getNodeControl(TABLE_NODE_ID).getColumn('attrValues.i2')
}

Атрибут "Зв'язки між документами"​

Hide. Сховати колонку залежно від Ролі, під якою відкритий документ.

const TABLE_NODE_ID = 7

module.exports = {
form_7_mounted(event) {
hideColumn(event)
}
}

function hideColumn(event) {
if (event.document.userHasRole('lawyer')) {
const tableControl = event.form.getNodeControl(TABLE_NODE_ID)
const colorColumn = tableControl.getColumn('linkedDocID.attrValues.i3')
colorColumn.hide()
}
}

Атрибут "Процеси"​

Hide. Сховати колонку залежно від Ролі, під якою відкритий документ.

const TABLE_NODE_ID = 8

module.exports = {
form_8_mounted(event) {
hideColumn(event)
}
}

function hideColumn(event) {
if (event.document.userHasRole('lawyer')) {
const tableControl = event.form.getNodeControl(TABLE_NODE_ID)
const colorColumn = tableControl.getColumn('status')
colorColumn.hide()
}
}

Атрибут "Завдання"​

Hide. Сховати колонку залежно від Ролі, під якою відкритий документ.

const TABLE_NODE_ID = 9

module.exports = {
form_9_mounted(event) {
hideColumn(event)
}
}

function hideColumn(event) {
if (event.document.userHasRole('lawyer')) {
const tableControl = event.form.getNodeControl(TABLE_NODE_ID)
const colorColumn = tableControl.getColumn('description')
colorColumn.hide()
}
}