Добавление нового канала в ActionsDashboard
Glossary Item Box
Общие сведения
Начиная с версии 7.8.0, в приложении появился новый модуль страницы редактирования — инструментальная панель действий (ActionsDashboard). Инструментальная панель действий предназначена для отображения информации о текущем состоянии работы с записью.
Подробно этот элемент страницы описан в статье "Инструментальная панель действий". Как добавлять панель действий в страницу редактирования раздела подробно изложено в статье "Добавление инструментальной панели действий".
Каналы в ActionsDashboard — это способ коммуникации с контактом. Канал создается для каждого раздела, в котором он подключен, например, для обращения, контакта или лида.
Описание примера
Добавить новый пользовательский канал в инструментальную панель действий страницы редактирования контакта. Канал должен полностью повторять функциональность канала фиксации результатов звонка (канал CallMessagePublisher).
Исходный код
Пакет с реализацией примера можно скачать по ссылке.
Алгоритм выполнения примера
1. Добавить схему исходного кода UsrCallsMessagePublisher
Для создания схемы исходного кода в разделе [Конфигурация] на вкладке [Схемы] выполните пункт меню [Добавить] — [Исходный код] (рис. 1).
Рис. 1. — Добавление схемы исходного кода
Для созданной схемы укажите (рис. 2):
- [Заголовок] ([Title]) — "Издатель сообщений логирования звонка" (Call message logging publisher);
- [Название] ([Name]) — "UsrCallsMessagePublisher".
Рис. 2. — Свойства схемы исходного кода
В созданной схеме в пространстве имен Terrasoft.Configuration добавьте новый класс CallsMessagePublisher, наследуемый от класса BaseMessagePublisher. Класс BaseMessagePublisher содержит базовую логику сохранения объекта в базу данных и базовую логику обработчиков событий. Класс-наследник будет содержать логику для конкретного отправителя, например, заполнение колонок объекта Activity и последующую отправку сообщения.
Для реализации нового класса CallsMessagePublisher в созданную схему добавьте следующий исходный код:
using System.Collections.Generic; using Terrasoft.Core; namespace Terrasoft.Configuration { // Класс-наследник BaseMessagePublisher. public class CallsMessagePublisher : BaseMessagePublisher { // Конструктор класса. public CallsMessagePublisher(UserConnection userConnection, Dictionary<string, string> entityFieldsData) : base(userConnection, entityFieldsData) { //Схема, с которой будет работать CallsMessagePublisher. EntitySchemaName = "Activity"; } } }
После этого сохраните и опубликуйте схему.
2. Создать замещающую клиентскую схему SectionActionsDashboard
Создайте замещающий клиентский модуль, в котором в качестве родительского объекта укажите SectionActionsDashboard (рис. 3). Процесс создания замещающей страницы описан в статье "Создание клиентской схемы".
Рис. 3. — Свойства замещающей схемы
Если нужно добавить канал только в одну страницу редактирования, то необходимо создать новый модуль с названием [имя_раздела]SectionActionsDashboard (например, BooksSectionActionsDashboard) и в качестве родительской схемы указать SectionActionsDashboard того раздела, в котором будет размещена страница редактирования.
В свойстве diff замещающей схемы установите операции вставки вкладки CallsMessageTab и контейнера сообщений, а также укажите модуль, который будет отрисовываться в данном канале на одной из вкладок. После этого новый канал будет виден на страницах редактирования тех разделов, в которых подключен SectionActionsDashboard.
В свойстве methods переопределите метод getSectionPublishers(), который добавит созданный канал в список издателей сообщений, и метод getExtendedConfig(), в котором определяются параметры вкладки.
Чтобы метод getExtendedConfig() отработал корректно, загрузите изображение иконки канала и укажите ее в параметре ImageSrc. Файл изображения иконки, используемый в данном примере, можно скачать здесь.
Переопределите метод onGetRecordInfoForPublisher() и добавьте метод getContactEntityParameterValue(), определяющие значение контакта из страницы редактирования раздела, в котором находится панель действий.
Исходный код замещающей схемы:
define("SectionActionsDashboard", ["SectionActionsDashboardResources", "UsrCallsMessagePublisherModule"], function(resources) { return { attributes: {}, messages: {}, methods: { // Метод задает настройки отображения вкладки канала в панели действий. getExtendedConfig: function() { // Вызов родительского метода. var config = this.callParent(arguments); var lczImages = resources.localizableImages; config.CallsMessageTab = { // Изображение вкладки. "ImageSrc": this.Terrasoft.ImageUrlBuilder.getUrl(lczImages.CallsMessageTabImage), // Значение маркера. "MarkerValue": "calls-message-tab", // Выравнивание. "Align": this.Terrasoft.Align.RIGHT, // Тэг. "Tag": "UsrCalls" }; return config; }, // Переопределяет родительский и добавляет значение контакта из страницы редактирования // раздела, в котором находится панель действий. onGetRecordInfoForPublisher: function() { var info = this.callParent(arguments); info.additionalInfo.contact = this.getContactEntityParameterValue(info.relationSchemaName); return info; }, // Определяет значение контакта из страницы редактирования раздела, // в котором находится панель действий. getContactEntityParameterValue: function(relationSchemaName) { var contact; if (relationSchemaName === "Contact") { var id = this.getMasterEntityParameterValue("Id"); var name = this.getMasterEntityParameterValue("Name"); if (id && name) { contact = {value: id, displayValue: name}; } } else { contact = this.getMasterEntityParameterValue("Contact"); } return contact; }, //Добавляет созданный канал в список издателей сообщений. getSectionPublishers: function() { var publishers = this.callParent(arguments); publishers.push("UsrCalls"); return publishers; } }, // Массив модификаций, с помощью которых строится представление модуля в интерфейсе системы. diff: /**SCHEMA_DIFF*/[ // Добавление вкладки CallsMessageTab. { // Тип операции — вставка. "operation": "insert", // Название вкладки. "name": "CallsMessageTab", // Название родительского элемента. "parentName": "Tabs", // Название свойства. "propertyName": "tabs", // Конфигурационный объект свойств. "values": { // Массив дочерних элементов. "items": [] } }, // Добавление контейнера сообщений. { "operation": "insert", "name": "CallsMessageTabContainer", "parentName": "CallsMessageTab", "propertyName": "items", "values": { // Тип элемента — контейнер. "itemType": this.Terrasoft.ViewItemType.CONTAINER, // CSS-класс для контейнера. "classes": { "wrapClassName": ["calls-message-content"] }, "items": [] } }, // Добавление модуля UsrCallsMessageModule. { "operation": "insert", "name": "UsrCallsMessageModule", "parentName": "CallsMessageTab", "propertyName": "items", "values": { // CSS-класс для модуля вкладок. "classes": { "wrapClassName": ["calls-message-module", "message-module"] }, // Тип элемента — модуль. "itemType": this.Terrasoft.ViewItemType.MODULE, // Название модуля. "moduleName": "UsrCallsMessagePublisherModule", // Привязка метода, выполняемого после отрисовки элемента. "afterrender": { "bindTo": "onMessageModuleRendered" }, // Привязка метода, выполняемого после перерисовки элемента. "afterrerender": { "bindTo": "onMessageModuleRendered" } } } ]/**SCHEMA_DIFF*/ }; } );
3. Создать модуль UsrCallsMessagePublisherModule
Модуль UsrCallsMessagePublisherModule служит контейнером для прорисовки в SectionActionsDashboard страницы UsrCallsMessagePublisherPage, в которой будет реализована логика добавляемого канала.
Для модуля установите следующие значения (рис. 4):
- [Заголовок] ([Title]) — "Модуль издателя сообщений логирования звонка" ("Call messages logging publisher module");
- [Название] ([Name]) — "UsrCallsMessagePublisherModule".
Рис. 4. — Свойства модуля
Исходный код модуля:
define("UsrCallsMessagePublisherModule", ["BaseMessagePublisherModule"], function() { // Определение класса. Ext.define("Terrasoft.configuration.UsrCallsMessagePublisherModule", { // Базовый класс. extend: "Terrasoft.BaseMessagePublisherModule", // Сокращенное имя класса. alternateClassName: "Terrasoft.UsrCallsMessagePublisherModule", // Инициализация страницы, которая будет отрисовываться в данном модуле. initSchemaName: function() { this.schemaName = "UsrCallsMessagePublisherPage"; } }); // Возвращает объект класса, определенного в модуле. return Terrasoft.UsrCallsMessagePublisherModule; });
4. Создать страницу UsrCallsMessagePublisherPage
Для создаваемой страницы установите в качестве родительского объекта схему BaseMessagePublisherPage пакета MessagePublisher. В качестве названия и заголовка укажите значение "UsrCallsMessagePublisherPage".
В исходном коде страницы укажите имя схемы объекта, с которым будет работать страница (в данном случае Activity), реализуйте логику публикации сообщения и переопределите метод getServiceConfig, в котором укажите имя класса из конфигурации.
//Задает класс, который будет работать с данной страницей. getServiceConfig: function() { return { className: "Terrasoft.Configuration.CallsMessagePublisher" }; }
Реализация логики публикации сообщения содержит довольно большое количество методов, атрибутов и свойств. Полностью исходный код схемы UsrCallsMessagePublisherPage вы можете скачать по ссылке. В исходном коде показана реализация рабочего канала CallMessagePublisher, который используется для логирования входящих и исходящих звонков.
Результатом выполнения данного примера будет новый рабочий канал в SectionActionsDashboard (рис. 5).
Рис. 5. — Пример пользовательского канала CallsMessagePublisher в SectionActionsDashboard раздела [Контакты]