Расчет из списка значений в Archer GRC на основе даты (с непустой проверкой)
Я пытался реализовать то, что было задано в этом вопросе переполнения стека, здесь:
Расчет статуса в Archer GRC на основе даты
Попытка создать поле состояния на основе ряда списков значений, из которых выбирают пользователи, но был сделан запрос, чтобы мы проверили поле даты на значение, чтобы убедиться, что оценочная дата была установлена, чтобы вычисление могло определить, является ли статус записи "Выполняется", "Поздно" или "Не начато".
... и теперь у меня есть требование к какому-то действительному всплывающему предупреждающему сообщению, чтобы пользователь мог убедиться, что поле даты не пустое.
Как бы я добавил эту функциональность?
1 ответ
Для предоставления нужной вам функциональности вы должны использовать "Пользовательский объект". Это объект, который вы помещаете в макет приложения в Archer, который содержит код JavaScript. Этот код будет выполнен, как только форма приложения будет загружена. Существует специальный тип поля "Пользовательский объект", доступный в редакторе макетов для каждого приложения в Application Builder в Archer.
Примечание. Я не рекомендую использовать пользовательские объекты в целом и не поддерживать RSA. Каждый раз, когда вы изменяете макет в данном приложении, у вас есть повторное тестирование и иногда правильные идентификаторы для вашего пользовательского объекта. Вы можете написать независимый от идентификатора пользовательский объект и использовать имена полей, но в этом случае пользовательский объект будет иметь больше кода. Я предпочитаю делать пользовательские объекты максимально короткими.
Ваш пользовательский объект должен сделать следующее:
- Переопределите поведение кнопок "Сохранить" и "Применить" на верхней панели инструментов, доступных для каждой формы приложения в Archer.
- Как только кнопки "Сохранить" и "Применить" будут "перезаписаны", при каждом нажатии на них будет вызываться ваша функция. Так что вам нужно создать функцию обработчика кликов.
- Ваша функция обработчика кликов проверит значения, которые пользователь должен заполнить, и либо выдаст предупреждение, либо вызовет оригинальный обработчик для кнопок "Сохранить / Применить".
Это шаблон кода, с которого вы можете начать:
<script type="text/javascript">
// ids are used to locate buttons
var buttons_ids = [
"master_btnSave", // "Save" button ID
"master_btnApply" // "Apply" button ID
];
// parameters are used in the "onclick" default handlers to call original handlers
var buttons_parameters = [
"master$btnSave", // "Save" parameter
"master$btnApply" // "Apply" parameter
];
document.getElementById(buttons_ids[0]).onclick = function(){ Validator_of_required_fields(buttons_parameters[0])};
document.getElementById(buttons_ids[1]).onclick = function(){ Validator_of_required_fields(buttons_parameters[1])};
// end of the script body
//==== Validator function attached to Save and Apply buttons
function Validator_of_required_fields(parameter){
// ids of the input fields to validate
var inputs_to_validate_ip_address = [ "master_DefaultContent_rts_XXX_YYY_t" ];
// jQuery selector is used here. Archer v5.x has jQuery library loaded by default
// you will need to modify this selector
var field_value = $('#'+inputs_to_validate_ip_address[0]+':first').val();
if(field_value.length = 0) {
// Here you are calling Archer Warning function
var msg = "[Text to display to user]";
var title = 'Required Field';
WarningAlert(msg,title);
return false;
};
// default onclick processor
ShowAnimationAndPostback(parameter);
return false;
};
Некоторые комментарии к этому коду:
- Вам нужно будет изменить функцию проверки для работы со значениями, хранящимися в нужных вам полях.
- Я использовал довольно "необычный" способ переопределить поведение кнопок "Сохранить" и "Применить", используя следующий код:
document.getElementById(buttons_ids[0]).onclick = function(){ bla, bla, bla }
Есть более простой способ сделать то же самое, но этот способ отлично работает в IE8-11, FF, Chrome и Opera. Дайте мне знать, если вы найдете более простой способ переопределить кнопки, которые не зависят от браузера. - функция
WarningAlert(msg,title);
встроенная функция предупреждения Archer В Archer v5.4 все работало нормально. Возможно, вам придется использовать простую функцию JavaScript Alert, если WarningAlert не работает в вашей версии Archer. - Обратите внимание, что поведение кнопок "Сохранить" и "Применить" может быть перезаписано обратно по умолчанию в случае, если пользователь открывает какие-либо всплывающие диалоговые окна для заполнения списка значений или поля перекрестных ссылок. Если это так, вам придется обернуть предоставленный код в другую функцию и присоединить его к событию OnLoadWindow (или аналогичному).
- Я стараюсь избегать использования любых библиотек JavaScript в моих пользовательских объектах. Таким образом, их проще поддерживать, и у вас будет меньше зависимостей. Я использовал jQuery в представленном примере только потому, что Archer уже использует эту библиотеку после загрузки страницы.
Flak, обязательно проверь свой пользовательский объект и удачи!