Добрый день!
Выведена кнопка на карточку редактирования записи.
Она должна быть активна, если определенное поле в карточке редактирования равно определенному значению.
Метод, который определяет активность
isEnableButtonTest: function() {
debugger
var activeRow = this.get("ActiveRow");
if (activeRow)
{
var pc = this.get("GridData").get(activeRow).get("ServiceCategory");
//return (pc || pc !== "") ? true : false;
if (pc.value === UsrConsts.ServiceCategory.Test)
return true
else
return false;
//return (pc.value === UsrConsts.ServiceCategory.Test) ? true : false;
}
else
return false;
}
var pc = this.get("GridData").get(activeRow).get("ServiceCategory")
возвращает какое-то значение только, если колонка ServiceCategory выведена в реестр,
иначе значение undefined.
Почему? Скажите, пожалуйста, как это обойти?
И еще вопрос - при изменении поля ServiceCategory доступность кнопки меняется только, если обновить сам реестр. Как сделать автоматическое обновление кнопки?
Нравится
Дарья, здравствуйте!
Уточните, пожалуйста, точную версию продукта.
А также если можно полный листинг кода.
Добрый день!
Версия 7.6 ITIL
Полный список кода в прикрепленном файле
Дарья, здравствуйте.
GridData не гарантирует получение результата. Для получения значения ServiceCategory, Вам необходимо сделать запрос в базу данных при помощи entityschemaquery. Значение Id (из таблицы Case) для выделенного обращения у Вас хранится в переменной activeRow.
Для изменения доступности кнопки без обновления реестра, Вам следует посмотреть в сторону sandbox.
Спасибо - про запрос с помошью entityschemaquery поняла ( просто в инструкции в sdk было написано GridData)
По поводу изменения доступности кнопки без обновления реестра - подскажите, пожалуйста, где можно посмотреть реализацию сообщений sandbox ?
Дарья, добрый день!
Примеров реализации сообщений в нашей системе довольно много. Самым ярким примером могут служить модули BasePageV2 и BaseSectionV2. В этих модулях при инициализации вызывается метод subscribeSandboxEvents, который выполняет подписку на сообщения sandbox.
Например, в модуле BaseSectionV2 выполняется подписка на сообщение CardChanged, и когда модуль получает это сообщение, он устанавливает изменённое значение соответствующему атрибуту. Само же сообщение отправляет (публикует) модуль BasePageV2 при вызове метода publishPropertyValueToSection. В свою очередь, метод publishPropertyValueToSection вызывается при изменении некоторых атрибутов модели карточки редактирования.
Вы можете поступить похожим образом. Например, в методе init Вашей карточки редактирования (CasePage) подписаться на изменение поля ServiceCategory:
init: function() { this.callParent(arguments); this.on("change:ServiceCategory", function(model, value) { this.publishPropertyValueToSection("CurrentServiceCategory", value); }, this); }
Таким образом, при изменении поля ServiceCategory карточки новое значение будет записываться в атрибут CurrentServiceCategory раздела CaseSection.
После этого в разделе Вы сможете получить значение текущей категории, обратившись к атрибуту CurrentServiceCategory:
isEnableButtonColumbus: function() { var serviceCategory = this.get("CurrentServiceCategory"); if (!serviceCategory) { // Ваш код } else { return (serviceCategory.value === UsrConsts.ServiceCategory.Dynamix); } },