Привет, коллеги!
У меня есть виджет, который отображает REM атрибуты запроса в задачах запросов (создан по примеру виджета REM Attributes).
Шаблон:
rem modelId=“{data.model_id}” tableName=“{data.table_name}” recordId=“{data.record_id}”
Через клиент и сервер я получаю id Запроса и id Модели запроса.
Обратите внимание, что если значение isUserScripts остается true, то клиентские скрипты модели, в которых проверяется, является ли запись новой, на уже созданной задаче возвращают, что запись новая, что приводит к некорректной работе логики.
Постараюсь объяснить на примере: мне нужно скрывать REM атрибуты на существующей записи. Для этого был создан клиентский скрипт модели, который скрывает поля, если s_form.isNewRecord() возвращает false.
Однако при выводе в консоль браузера s_form.isNewRecord() на странице запроса возвращает false, а на странице задачи запроса — true.
Кто-нибудь сталкивался с такой проблемой? Как вы её решали?
По умолчанию в задачах запроса нет поля модель запроса, это поле есть только в самом запросе, в момент создания задачи у вас заполняется поле “запрос” и видимо по этому вы получаете true.
Что бы детально разобраться нужно весь код посмотреть
Сервер:
if (input && input.action == ‘get_rem_data’) {
let current = getRecord(input.current_id, input.current_table);
let request = getRecord(current .getValue('request'), 'itsm_request');
data.record_id = request.getValue('sys_id');
data.table_name = request.getTableName();
data.model_id = request.getReModelId();
}
function getRecord(recordId, tableName) {
let record = new SimpleRecord(tableName);
record.get(recordId);
return record;
}
Клиент:
(() => {
window.s_widget_custom = window.s_widget_custom || {};
s_widget.setFieldValue('current_id', window.s_form.getUniqueValue());
s_widget.setFieldValue('current_table', window.s_form.getTableName());
s_widget.setFieldValue('action', 'get_rem_data');
s_widget.serverUpdate().then(() => {
});
})();
Клиентский скрипт модели запроса:
if(s_form.isNewRecord()){
[
‘html’,
‘html1’,
‘html2’,
‘html3’
].forEach(field => {
s_form.setREMVisible(field, true);
});
}