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

Добавление нового канала в 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 раздела [Контакты]

© Terrasoft 2002-2020.

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

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