Изменение видимости пункта в меню "Действия"

Доброго времени суток всем.

Версия 7.8 sales.

Задача следующая: на странице Счёта в меню "Действия" нужно добавить дополнительный пункт "Создание заказа на основе счёта", вызывающий бизнес-процесс. В целом всё по этому кейсу: https://academy.terrasoft.ru/documents/technic-sdk/7-8/dobavlenie-deystv...

Но есть одна особенность: на странице счёта есть поле "Тип счёта" и пункт должен быть доступен только при выборе определённого типа.

Сейчас в схеме InvoicePage добавлен следующий код:

getActions: function() {
                                        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 - такой:

define("InvoiceSectionV2", ["ProcessModuleUtilities","BusinessRuleModule", "ConfigurationConstants","jQuery"], function(ProcessModuleUtilities,BusinessRuleModule, ConfigurationConstants) {
        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;
                                }
            }
                }
        };
});

Сейчас получается так: если мы открываем страницу счёта в режиме карточки, то всё работает правильно - при изменении типа счёта пункт в меню появляется, либо исчезает в зависимости от выбранного типа.

Но если мы открываем счёт в режиме с боковым реестром (из страницы списка счетов), то видимость определяется один раз в зависимости от выставленного типа, а изменение не влияет на этот параметр.

Возможно ли сделать отслеживание изменения во втором случае?

Нравится

3 комментария

Можно в схему раздела добавить атрибут - виртуальную колонку булевого типа. Метод FormContractVisible будет возвращать значение этого атрибута.
Первый раз атрибут инициализировать при полной загрузке грида и выборе активной записи.
Затем значение атрибута менять при изменении поля.

"Роман Симута" написал:

Можно в схему раздела добавить атрибут - виртуальную колонку булевого типа. Метод FormContractVisible будет возвращать значение этого атрибута.

Первый раз атрибут инициализировать при полной загрузке грида и выборе активной записи.

Затем значение атрибута менять при изменении поля.


Роман, если не сложно - можно поподробнее описать это действо? - у меня аналогичная проблема - в теории понял, что Вы имеете в виду, но как это на практике сделать - вообще без понятия.

Заранее благодарю.

Недавно обновил примеры в документации по разработке.
Наиболее подходящий пример - здесь
https://academy.terrasoft.ru/documents/technic-sdk/7-9/kak-dobavit-knop…
В примере используется атрибут, который связан со свойством доступности кнопки. Вам надо поменять привязку на видимость. Ну и выбросить лишнее.

Показать все комментарии