Всем привет!
Есть необходимость создавать предзаполненные записи по нажатию на пункт в меню.
Жму на ссылку в меню > открывается форма создания записи с заполненными полями > пользователь заполняет остальное > создается реквест.
Подскажите, пожалуйста, как это можно реализовать или куда копать.
Нужен функционал Change Template только для Запросов на обслуживание.
Заранее спасибо!
Спасибо большое за ответ!
Еще вырианты
- Жестко в настройках полей прописать дефолтные значения. Работает всегда, даже для бизнес-правил.
- Использовать клиентские скрипты “при загрузке”, проверять, что это новая запись s_form.isNewRecord() и заполнять необходимые поля скриптом.
Первые два вариант - когда надо жестко назначать значения.
-
Если надо из одной записи передавать значения, то можно воспользоваться советом уважаемого molodik - передавать через url.
-
Но данный способ не всегда корректно работает с передачей большого количества полей и данных, в этом случае можно использовать локальное хранилище браузера - sessionStorage.
Пример:
Код кнопки
const storageObj = {};
// Список полей для передачи через Object
const mappingFields = [
'caller',
'subject',
'description',
'impact',
'urgency',
'priority',
'service',
'followers_list'
];
mappingFields.forEach(item => {
if (s_form.getValue(item)) {
storageObj[item] = s_form.getValue(item)
}
});
// Сохраняем данные в localStorage
sessionStorage.setItem('taskData', JSON.stringify(storageObj));
// Переходим на создание Change Request
s_go.open(`/record/itsm_change_request`);
Код пользовательского скрипта “при загрузке”
// Если новая форма и существует в sessionStorage 'taskData'
if (s_form.isNewRecord() && sessionStorage.getItem('taskData')) {
const storageObj = JSON.parse(sessionStorage.getItem('taskData'));
for (let columnName in storageObj) {
await s_form.setValue(columnName, storageObj[columnName]);
}
// Удаляем taskData из Session Storage
sessionStorage.removeItem('taskData');
}
3 лайка