Как подключить дополнительную фильтрацию к воронке
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 из пакета Opportunity (рис. 2).
Рис. 2. — Свойства замещающего модуля
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; } } }; });
После сохранения схемы в воронке продаж будет использоваться новый модуль расчетов: будут отображаться только те продажи, у которых в поле [Клиент] указан контрагент.