Табличні атрибути
Основні операції
Події табличних атрибутів
Взяти значення табличного атрибута
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 toolbarreason(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()
}
}