Creatio development guide
PDF
Документация по разработке
Это документация Creatio версии 7.13.0. Мы рекомендуем использовать новую версию документации.

Обработка выбора нескольких записей. Примеры

Glossary Item Box

Общие сведения

Прежде чем приступить к выполнению примеров, рекомендуется предварительно изучить статью "Как добавить действие раздела: обработка выбора нескольких записей".

Пример 1

Описание примера

Для реестра раздела [Активности] реализовать действие, которое установит состояние [Выполнено] для нескольких выбранных в реестре активностей.

Исходный код

Пакет с реализацией примера можно скачать по ссылке.

Алгоритм реализации примера

1. В пользовательском пакете создать замещающую страницу раздела [Активности]

Процесс создания замещающий страницы детально описан в статье "Создание клиентской схемы".

2. В коллекцию локализуемых строк замещающей схемы раздела добавить строку с заголовком пункта меню [Действия]

Для созданной строки укажите (рис. 1):

  • [Название] ([Name]) — "AllDoneCaption";
  • [Значение] ([Value]) — "Отметить как "Завершены"" ("Mark as Completed").

Рис. 1. — Свойства пользовательской локализуемой строки

3. В коллекцию методов модели представления раздела добавить реализацию методов

  • isCustomActionEnabled() — метод, который определяет доступность добавленного пункта меню.
  • setAllDone() — метод-обработчик действия, который устанавливает состояние [Выполнено] для нескольких выбранных в реестре активностей.
  • getSectionActions() — переопределенный метод родительской схемы, возвращающий коллекцию действий раздела.

Исходый код замещающей схемы:

define("ActivitySectionV2", ["ConfigurationConstants"],
    function(ConfigurationConstants) {
        return {
            // Название схемы раздела.
            entitySchemaName: "Activity",
            // Методы модели представления раздела.
            methods: {
                // Определяет, будет ли доступен пункт меню. 
                isCustomActionEnabled: function() {
                    // Попытка получить массив идентификаторов выбранных записей.
                    var selectedRows = this.get("SelectedRows");
                    // Если массив содержит элементы (выбрана хотя бы одна запись в реестре),
                    // то возвращается true, иначе — false.
                    return selectedRows ? (selectedRows.length > 0) : false;
                },
                // Метод-обработчик действия. Устанавливает для выбранных записей статус [Выполнено].
                setAllDone: function() {
                    // Получение массива идентификаторов выбранных записей.
                    var selectedRows = this.get("SelectedRows");
                    // Обработка запускается в случае, если выбрана хотя бы одна запись.
                    if (selectedRows.length > 0) {
                        // Создание экземпляра класса пакетных запросов.
                        var batchQuery = this.Ext.create("Terrasoft.BatchQuery");
                        // Обновление каждой из выбранных записей.
                        selectedRows.forEach(function(selectedRowId) {
                            // Создание экземпляра класса UpdateQuery с корневой схемой Activity.
                            var update = this.Ext.create("Terrasoft.UpdateQuery", {
                                rootSchemaName: "Activity"
                            });
                            // Применение фильтра для определения записи для обновления.
                            update.enablePrimaryColumnFilter(selectedRowId);
                            // Для колонки Status устанавливается значение "Выполнено" с помощью
                            // конфигурационной константы ConfigurationConstants.Activity.Status.Done.
                            update.setParameterValue("Status", ConfigurationConstants.Activity.Status.Done,
                                                    this.Terrasoft.DataValueType.GUID);
                            // Добавление запроса на обновление записи в пакетный запрос.
                            batchQuery.add(update);
                        }, this);
                        // Выполнение пакетного запроса к серверу.
                        batchQuery.execute(function() {
                            // Обновление реестра.
                            this.reloadGridData();
                        }, this);
                    }
                },
                // Переопределение базового виртуального метода, возвращающего коллекцию действий раздела.
                getSectionActions: function() {
                    // Вызывается родительская реализация метода,
                    // возвращающая коллекцию проинициализированных действий раздела.
                    var actionMenuItems = this.callParent(arguments);
                    // Добавление линии-разделителя.
                    actionMenuItems.addItem(this.getButtonMenuItem({
                        Type: "Terrasoft.MenuSeparator",
                        Caption: ""
                    }));
                    // Добавление пункта меню в список действий раздела.
                    actionMenuItems.addItem(this.getButtonMenuItem({
                        // Привязка заголовка пункта меню к локализуемой строке схемы.
                        "Caption": { bindTo: "Resources.Strings.AllDoneCaption" },
                        // Привязка метода-обработчика действия.
                        "Click": { bindTo: "setAllDone" },
                        // Привязка свойства доступности пункта меню к значению, которое возвращает метод isCustomActionEnabled.
                        "Enabled": { bindTo: "isCustomActionEnabled" },
                        // Поддержка режима множественного выбора.
                        "IsEnabledForSelectedAll": true
                    }));
                    // Возврат дополненной коллекции действий раздела.
                    return actionMenuItems;
                }
            }
        };
    });

После сохранения схемы и обновления страницы приложения с очисткой кэша в разделе [Активности] ([Activities]) с помощью нового действия [Отметить как "Завершены"] ([Mark as Completed]) можно будет применить статус [Завершено] ([Completed]) сразу к нескольким выбранным активностям (рис. 2).

Рис. 2. — Демонстрация результата

Пример 2

Описание примера

Для реестра раздела [Активности] реализовать действие, которое вызовет окно выбора ответственного и установит выбранное значение для нескольких выбранных в реестре активностей.

Исходный код

Пакет с реализацией примера можно скачать по ссылке.

Алгоритм реализации примера

1. В пользовательском пакете создать замещающую страницу раздела [Активности]

Процесс создания замещающий страницы детально описан в статье "Создание клиентской схемы".

2. В коллекцию локализуемых строк замещающей схемы раздела добавить строку с заголовком пункта меню [Действия]

Для созданной строки укажите (рис. 3):

  • [Название] ([Name]) — "SetOwnerCaption";
  • [Значение] ([Value]) — "Назначить ответственного" ("Assign Owner").

Рис. 3. — Свойства пользовательской локализуемой строки

3. В коллекцию методов модели представления раздела добавить реализацию методов

  • isCustomActionEnabled() — метод, который определяет доступность добавленного пункта меню.
  • setOwner() — метод-обработчик действия, который вызывает открытие справочника [Контакты].
  • lookupCallback() — callback-метод, который устанавливает выбранный в справочнике контакт в качестве ответственного для выбранных в реестре записей.
  • getSectionActions() — переопределенный метод родительской схемы, возвращающий коллекцию действий раздела.

Исходый код замещающей схемы:

define("ActivitySectionV2", ["ConfigurationConstants"],
    function(ConfigurationConstants) {
        return {
            // Название схемы раздела.
            entitySchemaName: "Activity",
            // Методы модели представления раздела.
            methods: {
                // Определяет, будет ли доступен пункт меню. 
                isCustomActionEnabled: function() {
                    // Попытка получить массив идентификаторов выбранных записей.
                    var selectedRows = this.get("SelectedRows");
                    // Если массив содержит элементы (выбрана хотя бы одна запись в реестре),
                    // то возвращается true, иначе — false.
                    return selectedRows ? (selectedRows.length > 0) : false;
                },
                // Метод-обработчик действия. Вызывает открытие справочника [Контакты].
                setOwner: function() {
                    // Определение конфигурации справочника.
                    var config = {
                        // Cхема [Contact].
                        entitySchemaName: "Contact",
                        // Множественный выбор отключен.
                        multiSelect: false,
                        // Отображаемая колонка — [Name].
                        columns: ["Name"]
                    };
                    // Открытие справочника с определенной конфигурацией и callback-функцией, которая сработает
                    // после нажатия кнопки [Выбрать].
                    this.openLookup(config, this.lookupCallback, this);
                },
                // Выполняет установку выбранного в справочнике контакта в качестве ответственного
                // для выбранных в реестре записей.
                lookupCallback: function(args) {
                    // Идентификатор выбранной из справочник записи.
                    var activeRowId;
                    // Получение выбранных в справочнике записей.
                    var lookupSelectedRows = args.selectedRows.getItems();
                    if (lookupSelectedRows && lookupSelectedRows.length > 0) {
                        // Получение Id первой выбранной в справочнике записи.
                        activeRowId = lookupSelectedRows[0].Id;
                    }
                    // Получение массива идентификаторов выбранных записей.
                    var selectedRows = this.get("SelectedRows");
                    // Обработка запускается в случае, если выбрана хотя бы одна запись в реестре и выбран ответственный
                    // в справочнике.
                    if ((selectedRows.length > 0) && activeRowId) {
                        // Создание экземпляра класса пакетных запросов.
                        var batchQuery = this.Ext.create("Terrasoft.BatchQuery");
                        // Обновление каждой из выбранных записей.
                        selectedRows.forEach(function(selectedRowId) {
                            // Создание экземпляра класса UpdateQuery с корневой схемой Activity.
                            var update = this.Ext.create("Terrasoft.UpdateQuery", {
                                rootSchemaName: "Activity"
                            });
                            // Применение фильтра для определения обновляемой записи.
                            update.enablePrimaryColumnFilter(selectedRowId);
                            // Для колонки [Owner] устанавливается значение, равное идентификатору 
                            // выбранного из справочника контакта.
                            update.setParameterValue("Owner", activeRowId, this.Terrasoft.DataValueType.GUID);
                            // Добавление запроса на обновление записи в пакетный запрос.
                            batchQuery.add(update);
                        }, this);
                        // Выполнение пакетного запроса к серверу.
                        batchQuery.execute(function() {
                            // Обновление реестра.
                            this.reloadGridData();
                        }, this);
                    }
                },
                // Переопределение базового виртуального метода, возвращающего коллекцию действий раздела.
                getSectionActions: function() {
                    // Вызывается родительская реализация метода,
                    // возвращающая коллекцию проинициализированных действий раздела.
                    var actionMenuItems = this.callParent(arguments);
                    // Добавление линии-разделителя.
                    actionMenuItems.addItem(this.getButtonMenuItem({
                        Type: "Terrasoft.MenuSeparator",
                        Caption: ""
                    }));
                    // Добавление пункта меню в список действий раздела.
                    actionMenuItems.addItem(this.getButtonMenuItem({
                        // Привязка заголовка пункта меню к локализуемой строке схемы.
                        "Caption": { bindTo: "Resources.Strings.SetOwnerCaption" },
                        // Привязка метода-обработчика действия.
                        "Click": { bindTo: "setOwner" },
                        // Привязка свойства доступности пункта меню к значению, которое возвращает метод isCustomActionEnabled.
                        "Enabled": { bindTo: "isCustomActionEnabled" },
                        // Поддержка режима множественного выбора.
                        "IsEnabledForSelectedAll": true
                    }));
                    // Возврат дополненной коллекции действий раздела.
                    return actionMenuItems;
                }
            }
        };
    });

После сохранения схемы и обновления страницы приложения с очисткой кэша в разделе [Активности] ([Activities]) с помощью нового действия [Назначить ответственного] ([Assign Owner]) можно будет изменить ответственного сразу у нескольких выбранных активностей (рис. 4).

Рис. 4. — Демонстрация результата

Смотрите также:

© Terrasoft 2002-2019.

Был ли данный материал полезен?

Как можно улучшить эту статью?