Доступность кнопки на карточке редактирования

Добрый день!
Выведена кнопка на карточку редактирования записи.
Она должна быть активна, если определенное поле в карточке редактирования равно определенному значению.

Метод, который определяет активность
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 доступность кнопки меняется только, если обновить сам реестр. Как сделать автоматическое обновление кнопки?

Нравится

5 комментариев

Дарья, здравствуйте!

Уточните, пожалуйста, точную версию продукта.
А также если можно полный листинг кода.

Добрый день!
Версия 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);
	}
},
Показать все комментарии