Добавить в раздел действие для единичной записи

Средний
PDF

Пример реализован для продуктов линейки Sales Creatio.

Пример. Для записи реестра раздела Заказы (Orders) добавить действие, которое в информационном окне отображает дату создания заказа. Действие активно для заказов, которые находятся на стадии Исполнение (In progress).

Создать схему замещающей модели представления раздела 

  1. Перейдите в раздел Конфигурация (Configuration) и выберите пользовательский пакет, в который будет добавлена схема.
  2. На панели инструментов реестра раздела нажмите Добавить —> Замещающая модель представления (Add —> Replacing view model).

  3. Заполните свойства схемы.

    • Код (Code) — "OrderSectionV2".
    • Заголовок (Title) — "Раздел заказа" ("Order section").
    • Родительский объект (Parent object) — выберите "OrderSectionV2".
  4. Добавьте локализуемую строку с текстом пункта меню, который планируется добавить.

    1. В контекстном меню узла Локализуемые строки (Localizable strings) нажмите кнопку scr_add_button.png.
    2. Заполните свойства локализуемой строки.

      • Код (Code) — "CreationDateActionCaption".
      • Значение (Value) — "Показать дату создания" ("Show creation date").
    3. Для добавления локализуемой строки нажмите Добавить (Add).
  5. Реализуйте логику работы пункта меню. Для этого в свойстве methods реализуйте методы:

    • isRunning() — проверяет, находится ли выбранный в реестре заказ на стадии Исполнение (In progress).
    • isCustomActionEnabled() — определяет доступность добавленного пункта меню.
    • showOrderInfo() — метод-обработчик действия, который отображает в информационном окне дату создания выбранного заказа.
    • getSectionActions() — переопределенный метод родительской схемы, который возвращает коллекцию действий раздела.

    Обращение к выделенной записи выполняется через атрибут ActiveRow модели представления раздела. Атрибут возвращает значение первичной колонки выделенной записи. В свою очередь, значение первичной колонки выделенной записи может использоваться для получения значений, загруженных в реестр полей выбранного объекта.

    Исходный код схемы замещающей модели представления раздела представлен ниже.

    OrderSectionV2
    define("OrderSectionV2", ["OrderConfigurationConstants"], function(OrderConfigurationConstants) {
        return {
            /* Название схемы объекта раздела. */
            entitySchemaName: "Order",
            /* Методы модели представления раздела. */
            methods: {
                /* Проверяет стадию заказа. activeRowId — значение первичной колонки выделенной записи реестра.*/
                isRunning: function(activeRowId) {
                    /* Получает коллекцию данных списочного представления реестра раздела. */
                    var gridData = this.get("GridData");
                    /* Получает модель выбранного заказа по заданному значению первичной колонки. */
                    var selectedOrder = gridData.get(activeRowId);
                    /* Получает свойства модели — статуса выбранного заказа. */
                    var selectedOrderStatus = selectedOrder.get("Status");
                    /* Метод возвращает true, если статус заказа [Исполнение], иначе возвращает false. */
                    return selectedOrderStatus.value === OrderConfigurationConstants.Order.OrderStatus.Running;
                },
                /* Определяет доступность пункта меню. */
                isCustomActionEnabled: function() {
                    /* Попытка получения идентификатора активной записи. */
                    var activeRowId = this.get("ActiveRow");
                    /* Если идентификатор определен и статус выбранного заказа [Исполнение], то возвращается true, иначе — false. */
                    return activeRowId ? this.isRunning(activeRowId) : false;
                },
                /* Метод-обработчик действия. Отображает в информационном окне дату создания заказа. */
                showOrderInfo: function() {
                    var activeRowId = this.get("ActiveRow");
                    var gridData = this.get("GridData");
                    /* Получает дату создания заказа. Колонка должна быть добавлена в реестр. */
                    var dueDate = gridData.get(activeRowId).get("Date");
                    /* Отображает информационное окно. */
                    this.showInformationDialog(dueDate);
                },
                /* Переопределение базового виртуального метода, который возвращает коллекцию действий раздела. */
                getSectionActions: function() {
                    /* Вызывается родительская реализация метода для получения коллекции проинициализированных действий раздела. */
                    var actionMenuItems = this.callParent(arguments);
                    /* Добавляет линию-разделитель. */
                    actionMenuItems.addItem(this.getButtonMenuItem({
                        Type: "Terrasoft.MenuSeparator",
                        Caption: ""
                    }));
                    /* Добавляет пункт меню в список действий раздела. */
                    actionMenuItems.addItem(this.getButtonMenuItem({
                        /* Привязка заголовка пункта меню к локализуемой строке схемы. */
                        "Caption": {bindTo: "Resources.Strings.CreationDateActionCaption"},
                        /* Привязка метода-обработчика действия. */
                        "Click": {bindTo: "showOrderInfo"},
                        /* Привязка свойства доступности пункта меню к значению, которое возвращает метод isCustomActionEnabled. */
                        "Enabled": {bindTo: "isCustomActionEnabled"}
                    }));
                    /* Возврат дополненной коллекции действий раздела. */
                    return actionMenuItems;
                }
            }
        };
    });
    
  6. На панели инструментов дизайнера нажмите Сохранить (Save).

Результат выполнения примера 

Чтобы посмотреть результат выполнения примера:

  1. Очистите кэш браузера.
  2. Обновите страницу раздела Заказы (Orders).

В результате выполнения примера на страницу заказа добавлено действие Показать дату создания (Show creation date).

Если заказ находится на стадии Исполнение (In progress), то действие Показать дату создания (Show creation date) активно.

В результате выбора действия Показать дату создания (Show creation date), в информационном окне отображается дата создания заказа.

Если заказ не находится на стадии Исполнение (In progress), то действие Показать дату создания (Show creation date) неактивно.