Спеціальні типи форм
Документи
Стани та заголовки
Перевірка стану документа
При зміні атрибута text001 перевіряємо поточний стан документа. Якщо стан draft (Чернетка) записуємо значення атрибута text002.
module.exports = {
document_attributeChanged_text001(eventa) {
if (event.document.state === 'draft') {
eventa.document.setAttribute('text002', eventa.value) // draft - код стану документа
}
}
}
Таб документа: Встановлення значення з текстового атрибута
module.exports = {
formTitle(event) {
return `Документ/${event.document.getAttribute('ms01')}` // ms01 - текстовий атрибут
}
}
Таб документа: При редагуванні атрибута "Короткий опис"
module.exports = {
formTitle(event) {
if (event.document.getNativeAttribute('subject') != null) { // якщо заповнений атрибут "Короткий опис" відображається кастомний таб документа
return `2022/${event.document.getAttribute('ms01')}`
}
}
}
Ролі та учасники документа
Перевірка ролі користувача
При натисканні на кнопку виводимо повідомлення, якщо поточний користувач документа має роль Автор.
const { showErrorWindow } = require('@unitybase/ub-pub')
module.exports = {
form_3_click(event) {
if (event.document.userHasRole('author')) { // author - код ролі автор
showErrorWindow('Це автор документа')
}
}
}
Кількість учасників ролі
Перед збереженням документа виводимо повідомлення з кількістю учасників ролі "Відповідальний виконавець". Функція getParticipants повертає дані у вигляді масиву {ID: 3000012, unitType: 'ORG', code: '0123123', name: 'organization1', isFixed: true}
const { showErrorWindow } = require('@unitybase/ub-pub')
module.exports = {
beforeSave(event) {
const participantsOfResponsibleRole =
event.document.getParticipants('responsible') // responsible - код ролі "Відповідальний виконавець"
showErrorWindow('Кількість учасників ролі:' + participantsOfResponsibleRole.length)
}
}
Поточні ролі користувача
При відкритті документа записати в атрибут text001 поточні ролі користувача.
module.exports = {
loaded(event) {
const userRoles = event.document.getCurrentUserRoles() // функція яка повертає поточні ролі у вигляді масиву ['author', 'manager']
event.document.setAttribute('text001', userRoles)
}
}
Видалення учасника ролі по ID при натисканні кнопки
module.exports = {
form_14_click(event) {
event.document.removeParticipant('lawyer', 3000002212453) // lawyer - код ролі документа, 3000002212453 - ID організаційної одиниці
}
}
Встановлення учасника ролі типу "Суб'єкти адміністрування"
Встановлення учасника ролі типу "Суб'єкти адміністрування" (користувача) по ID при натисканні кнопки
module.exports = {
form_14_click(event) {
event.document.addParticipant('lawyer', 3000002212453, 'admSubj') // lawyer - код ролі документа, 3000002212453 - ID користувача
}
}
Індикатори документа/завдання
Індикатор з статичним текстом і заданими налаштуваннями
module.exports = {
createIndicators(event) {
const text = 'Терміново' // установка тексту індикатора
const visible = true // статус індикатора включений
return [{
text,
visible,
type: 'danger',
size: 'medium',
style: 'dark'
}]
// можливі параметри опцій type - success, info, warning, danger, none - optional, default none ;
// size - medium, small, mini - optional, default small ;
// style - dark, light, plain - optional, default light
}
}
Індикатор по значенню текстового атрибута
Індикатор активується по перемикачу (атрибут типу Логічний).
module.exports = {
createIndicators(event) {
const text = event.document.getAttribute('ms01') // установка тексту зі значення атрибута ms01 типу "Текст"
const visible = event.document.getAttribute('ms15') // установка статусу індикатора по значенню перемикача - атрибут ms15 типу "Логічний"
return [{text, visible, type: 'danger', size: 'medium', style: 'dark'}]
}
}
Індикатор по значенню числового атрибута
Індикатор активується по перемикачу (атрибут типу Логічний). Тип індикатору змінюється при завантаженні файла в атрибут Образ документа.
module.exports = {
createIndicators(event) {
const text = String(event.document.getAttribute('ms05')) // установка значення з атрибута ms05 типу "Число", конвертуємо значення в String
const visible = event.document.getAttribute('ms15') // установка статусу індикатора по значенню перемикача - атрибут ms15 типу "Логічний"
const aaa = event.document.getNativeFileAttribute()
const type = event.document.getNativeFileAttribute()?.fileInfo?.fileName
? 'success'
: 'danger'
return [{text, visible, type, size: 'medium', style: 'dark'}]
}
}
Завдання
Особливості скрипта для завдань BPMN
При виконанні дій з нативними атрибутами завдання, замість об'єкта document використовується об'єкт task.
module.exports = {
loaded(event) {
console.log('Значення опису завдання:', event.task.getNativeAttribute('comment'))
}
}
Таб завдання
Використовується та ж сама конструкція, що і для документа. У випадку, якщо в скрипті нічого не задавати, заголовок завдання за замовчуванням "Завдання".
module.exports = {
formTitle(event) {
return `Завдання/${event.task.getNativeAttribute('subject')}`
}
}
Контроль значення в текстовому полі для Завдання
Використано нативний атрибут Завдання: description.
module.exports = {
task_validateNativeAttribute_description(event) {
if (event.value == 'Не погоджено') {
return 'Неможливо зберегти завдання якщо воно не погоджене'
}
}
}
Заповнення нативного атрибута "Коментар" кнопкою на формі завдання
module.exports = {
form_22_click(event) { // 22 - id атрибута Кнопка
event.task.setNativeAttribute('comment', 'Взято в роботу ' +
event.task.getNativeAttribute('assigneeID'))
}
}
Користувацькі довідники
Події довідників
Виведення в консоль значень атрибутів користувацького довідника
Виведення в консоль значень кастомних та нативних атрибутів користувача довідника. Спрацьовує при відкритті форми редагування запису Користувацького довідника.
module.exports = {
loaded(event) {
console.log(
'Значення кастомного атрибута Текст02:', event.dictionaryItem.getAttribute('Attrtext02'),
'Значення нативного атрибута Опис:', event.dictionaryItem.getNativeAttribute('description')
)
}
}
Перезаписує значення їх одного атрибута в інший атрибут
Спрацьовує під час редагування вихідного атрибута на формі редагування запису Користувацького довідника.
Для кастомних атрибутів
module.exports = {
dictionaryItem_attributeChanged_Attrtext01(event) {
event.dictionaryItem.setAttribute('Attrtext02', event.value)
}
}
Для нативних атрибутів
module.exports = {
dictionaryItem_nativeAttributeChanged_name(event) {
event.dictionaryItem.setNativeAttribute('description', event.value)
}
}
Управління видимістю кнопки видалення
Обробник 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
Приховуємо кнопку видалити в елементів користувацького довідника, якщо текстовий атрибут не порожній. Скрипт необхідно додавати на формі користувацького довідника.
module.exports = {
instance_canDelete(event) {
if (event.dictionaryItem.getAttribute('ms01') != null) { // ms01 - код текстового атрибута на формі користувацького довідника
return {canDelete: false, hideButton: true} // ховаємо кнопку "Видалити", якщо атрибут ms01 не порожній
}
return {canDelete: true, hideButton: false} // кнопка доступна за замовчуванням
}
}