Доброго времени суток всем.
Версия 7.8 sales.
Задача следующая: на странице Счёта в меню "Действия" нужно добавить дополнительный пункт "Создание заказа на основе счёта", вызывающий бизнес-процесс. В целом всё по этому кейсу: https://academy.terrasoft.ru/documents/technic-sdk/7-8/dobavlenie-deystv...
Но есть одна особенность: на странице счёта есть поле "Тип счёта" и пункт должен быть доступен только при выборе определённого типа.
Сейчас в схеме InvoicePage добавлен следующий код:
var actionMenuItems = this.callParent(arguments);
actionMenuItems.addItem(this.getButtonMenuItem({
Type: "Terrasoft.MenuSeparator",
Caption: ""
}));
actionMenuItems.addItem(this.getButtonMenuItem({
"Caption": {bindTo: "Resources.Strings.CreateOrderByInvoiceCaption"},//Название пункта в Localizablestrings
"Tag": "CreateOrderByInvoice",//Метод
"Enabled": {"bindTo": "canEntityBeOperated"},
"Visible": {"bindTo": "FormContractVisible"}
}));
return actionMenuItems;
},
FormContractVisible: function(){
if (this.get("UsrAccountType")){
var InvType = this.get("UsrAccountType").value;
if (InvType == "0266a676-9801-477d-aefd-81ae4dd978bf"){
return true;
} else {
return false;
}
} else {
return false;
}
},
Дополнительно функция FormContractVisible вызывается при изменении значения UsrAccountType.
А в схеме InvoiceSection - такой:
return {
entitySchemaName: "Invoice",
details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/,
diff: /**SCHEMA_DIFF*/[]/**SCHEMA_DIFF*/,
methods: {
FormContractVisible: function(activeRowId) {
activeRowId = this.get("ActiveRow");
// Получение коллекции данных списочного представления реестра раздела [Заказы].
var gridData = this.get("GridData");
// Получение модели выбранного заказа по заданому значению первичной колонки.
var selectedInvoice = gridData.get(activeRowId);
// Получение свойства модели - статуса выбранного заказа.
var selectedInvoiceType = selectedInvoice.get("UsrAccountType");
// Значение статуса выбранного заказа сравнивается со значением типа "Исполнение", и в
// зависимости от результата сравнения метод возвращает true или false.
if (selectedInvoiceType){
if (selectedInvoiceType.value == "0266a676-9801-477d-aefd-81ae4dd978bf"){
return true;
} else {
return false;
}
} else {
return false;
}
}
}
};
});
Сейчас получается так: если мы открываем страницу счёта в режиме карточки, то всё работает правильно - при изменении типа счёта пункт в меню появляется, либо исчезает в зависимости от выбранного типа.
Но если мы открываем счёт в режиме с боковым реестром (из страницы списка счетов), то видимость определяется один раз в зависимости от выставленного типа, а изменение не влияет на этот параметр.
Возможно ли сделать отслеживание изменения во втором случае?
Нравится
Можно в схему раздела добавить атрибут - виртуальную колонку булевого типа. Метод FormContractVisible будет возвращать значение этого атрибута.
Первый раз атрибут инициализировать при полной загрузке грида и выборе активной записи.
Затем значение атрибута менять при изменении поля.
"Роман Симута" написал:Можно в схему раздела добавить атрибут - виртуальную колонку булевого типа. Метод FormContractVisible будет возвращать значение этого атрибута.
Первый раз атрибут инициализировать при полной загрузке грида и выборе активной записи.
Затем значение атрибута менять при изменении поля.
Роман, если не сложно - можно поподробнее описать это действо? - у меня аналогичная проблема - в теории понял, что Вы имеете в виду, но как это на практике сделать - вообще без понятия.
Заранее благодарю.
Недавно обновил примеры в документации по разработке.
Наиболее подходящий пример - здесь
https://academy.terrasoft.ru/documents/technic-sdk/7-9/kak-dobavit-knop…
В примере используется атрибут, который связан со свойством доступности кнопки. Вам надо поменять привязку на видимость. Ну и выбросить лишнее.