Как подключить дополнительную фильтрацию к воронке
Glossary Item Box
Существует возможность подключить дополнительную фильтрацию для расчетов в воронке. Для этого необходимо реализовать следующую последовательность действий.
Последовательность действий для изменения расчетов в воронке:
- Создать унаследованный от провайдера расчетов новый класс, в котором нужно реализовать необходимую логику фильтрации.
- Создать замещающую клиентскую схему FunnelChartSchema и использовать в ней новый класс расчетов.
Описание кейса
Необходимо добавить фильтрацию к расчетам воронки продаж в срезе "по количеству" для выбора только тех продаж, у которых в поле [Клиент] указан контрагент.
Алгоритм реализации кейса
1. В пользовательском пакете создать новый модуль
В пользовательском пакете необходимо создать новый клиентский модуль провайдера расчетов. Провайдер расчетов — это класс, который отвечает за выборку, фильтрацию и обработку данных для графика воронки.
В качестве имени и заголовка для создаваемого модуля необходимо указать, например, UsrFunnelByCountDataProvider (рис. 1).
Рис. 1. — Свойства модуля провайдера расчетов
2. Определить новый класс провайдера и задать логику фильтрации
Для добавления фильтрации к расчетам в срезе “по количеству” нужно наследовать созданный класс от класса FunnelByCountDataProvider и переопределить метод getFunnelFixedFilters.
define("UsrFunnelByCountDataProvider", ["ext-base", "terrasoft", "UsrFunnelByCountDataProviderResources", "FunnelByCountDataProvider"], function(Ext, Terrasoft, resources) { // Определение нового провайдера расчетов. Ext.define("Terrasoft.configuration.UsrFunnelByCountDataProvider", { // Наследование от провайдера 'по количеству'. extend: "Terrasoft.FunnelByCountDataProvider", // Сокращенное имя нового провайдера. alternateClassName: "Terrasoft.UsrFunnelByCountDataProvider", // Расширение метода базового модуля FunnelByCountDataProvider. // Возвращает фильтры для выборки. getFunnelFixedFilters: function() { // Вызов родительского метода. var esqFiltersGroup = this.callParent(arguments); // Добавляет фильтр, который указывает, что в продаже клиентом указан контрагент. esqFiltersGroup.addItem( Terrasoft.createColumnIsNotNullFilter("Account")); return esqFiltersGroup; } }); });
После внесения изменений модуль необходимо сохранить.
3. В пользовательском пакете реализовать модуль для графика воронки
Для того чтобы в расчетах использовался новый модуль провайдера, нужно создать замещающий клиентский модуль и переопределить метод формирования провайдеров расчетов воронки продаж. Для начала необходимо создать замещающий клиентский модуль и указать ему имя замещенной схемы FunnelChartSchema, а также указать ее как родительский объект. (рис. 2).
Рис. 2. — Свойства замещающего модуля
Также необходимо добавить в зависимости новый модуль для расчетов (секция Dependencies), указав его имя в поля [Зависимость] и [Название] значения UsrFunnelByCountDataProvider (рис. 4).
Рис. 3. — Свойства зависимости схемы воронки
4. Указать новый провайдер расчетов в замещенной схеме воронки
Для этого в замещенной схеме необходимо заменить класс провайдера расчетов на новый.
define("FunnelChartSchema", ["UsrFunnelByCountDataProvider"], function() { return { entitySchemaName: "Opportunity", methods: { getProvidersCollectionConfig: function() { // Вызывает родительский метод, который возвращает массив провайдеров. var config = this.callParent(); // Ищет провайдер данных для среза по количеству. var byCount = Terrasoft.findItem(config, {tag: "byNumberConversion"}); // Заменяет на новый класс. byCount.item.className = "Terrasoft.UsrFunnelByCountDataProvider"; return config; } } }; });
После сохранения схемы в воронке продаж будет использоваться новый модуль расчетов воронки и отображать только те продажи, у которых в поле [Клиент] указан контрагент.