Реестр формы
Скрипты позволяют использовать в вычислениях реестр задач текущей формы.
Есть форма «Публикация приказа» с полями «Год», «Номер» и «Документ» (файл с приказом). С помощью запроса реестра из скрипта можно убедиться, что приказ за тот же год и с тем же номером еще не был опубликован:
form.onChange(['Год', 'Номер']) .validateAsync('Номер', async state => { const [year, num] = state.changes; if (!year || !year.text || !num || !num.text) return null; const duplicates = await form.fetchSelfRegister(f => f .fieldEquals('Год', year) .fieldEquals('Номер', num), [] ); if (!duplicates || !duplicates.tasks) return null; const firstDuplicate = duplicates.tasks[0]; if (firstDuplicate) return { errorMessage: `Приказ <a href="#id${firstDuplicate.task_id}">уже опубликован</a>` }; return null; });
Теперь при попытке повторно заполнить форму теми же данными пользователь увидит ошибку со ссылкой на уже существующий приказ:
Чтобы скачать реестр формы, используйте в запросе параметр fetchSelfRegister.
По умолчанию по этому запросу приходят все включенные в реестр задачи — как открытые, так и закрытые. Для этого используется запрос вида:
const duplicates = await form.fetchSelfRegister(f => f .fieldEquals('Год', year) .fieldEquals('Номер', num), [] );
Чтобы получить из реестра только активные задачи, используйте запрос вида:
const duplicates = await form.fetchSelfRegister(f => f .fieldEquals('Год', year) .fieldEquals('Номер', num), [], { activeOnly: true, } );
А чтобы отфильтровать и выгрузить из реестра только завершенные задачи, используйте запрос вида:
const duplicates = await form.fetchSelfRegister(f => f .fieldEquals('Год', year) .fieldEquals('Номер', num), [], { archivedOnly: true } );
Обратите внимание: скрипт фильтрации реестра сработает только в тех формах, к которым у пользователя, редактирующего задачу по этой форме, есть доступ.
С помощью скрипта можно из одной формы обращаться к реестру другой. Для этого используйте запрос вида:
const duplicates = await form.fetchRegister(id_form, f => f .fieldEquals('Номер', num), [] );
где в id_form следует указать id формы, реестр которой нужно получить.