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

Добавление нового канала в ActionsDashboard

Glossary Item Box

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

Начиная с версии 7.8.0, в bpm'online появился новый модуль страницы редактирования — инструментальная панель действий (ActionsDashboard). Инструментальная панель действий предназначена для отображения информации о текущем состоянии работы с записью.

Подробно этот элемент страницы описан в статье "Инструментальная панель действий".

Как добавлять панель действий в страницу редактирования раздела, подробно изложено в статье "Добавление инструментальной панели действий".

Каналы в ActionsDashboard — это способ коммуникации с контактом. Канал создается для каждого раздела, в котором он подключен, например, для обращения, контакта или лида.

Описание кейса

Добавить новый пользовательский канал в инструментальную панель действий страницы редактирования контакта. Канал должен полностью повторять функциональность канала фиксации результатов звонка (канал CallMessagePublisher).

Алгоритм выполнения кейса

1. Добавить схему исходного кода CallsMessagePublisher

Для создания схемы исходного кода необходимо в режиме настройки перейти в раздел [Конфигурация] и на вкладке [Схемы] выполнить пункт меню [Добавить] > [Исходный код] (рис. 1).

Рис. 1. — Добавление схемы исходного кода

Для созданной схемы установить следующие значения (рис. 2):

  • свойству [Заголовок] — "Издатель сообщений логирования звонка";
  • свойству [Название] — "CallsMessagePublisher".

Рис. 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

Для этого необходимо в режиме настройки перейти в раздел [Конфигурация] и на вкладке [Схемы] выполнить пункт меню [Добавить] > [Замещающий клиентский модуль] (рис. 1). Для замещающей клиентской схемы необходимо установить в качестве родительского объекта схему SectionActionsDashboard пакета ActionsDashboard. В качестве заголовка также можно указать значение SectionActionsDashboard.

Подробнее о создании замещающих схем можно узнать из статьи "Создание клиентской схемы".

На заметку

Если нужно добавить канал только в одну страницу редактированя, то необходимо создать новый модуль с названием [имя_раздела]SectionActionsDashboard (например, BooksSectionActionsDashboard) и в качестве родительской схемы указать SectionActionsDashboard того раздела, в котором будет размещена страница редактирования.

В свойстве diff замещающей схемы необходимо указать модуль, который будет отрисовываться в данном канале на одной из вкладок. После этого новый канал будет виден на страницах редактирования тех разделов, в которых подключен SectionActionsDashboard. Также в этом свойстве необходимо установить операции вставки вкладки CallsMessageTab и контейнера сообщений.

// Массив модификаций, с помощью которых строится представление модуля в интерфейсе системы.
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": []
        }
    },
    // Добавление модуля CallsMessageModule.
    {
        "operation": "insert",
        "name": "CallsMessageModule",
        "parentName": "CallsMessageTab",
        "propertyName": "items",
        "values": {
            // CSS-класс для модуля вкладок.
            "classes": {
                "wrapClassName": ["calls-message-module", "message-module"]
            },
            // Тип элемента — модуль.
            "itemType": this.Terrasoft.ViewItemType.MODULE,
            // Название модуля.
            "moduleName": "callsMessagePublisherModule",
            // Привязка метода, выполняемого после отрисовки элемента.
            "afterrender": {
                "bindTo": "onMessageModuleRendered"
            },
            // Привязка метода, выполняемого после перерисовки элемента.
            "afterrerender": {
                "bindTo": "onMessageModuleRendered"
            }
        }
    }
]/**SCHEMA_DIFF*/

Также необходимо переопределить метод getSectionPublishers, который добавит созданный канал в список издателей сообщений, и метод getExtendedConfig, в котором определяются параметры вкладки.

Для того чтобы метод getExtendedConfig отработал корректно, необходимо загрузить изображение иконки канала и указать ее в параметре ImageSrc. Файл изображения иконки, используемый в данном примере, можно скачать здесь.

Также необходимо переопределить метод onGetRecordInfoForPublisher и добавить метод getContactEntityParameterValue, определяющие значение контакта из страницы редактирования раздела, в котором находится панель действий.

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": "Calls"
        };
        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("Calls");
        return publishers;
    }
},

Созданную схему необходимо сохранить и опубликовать.

3. Создать модуль CallsMessagePublisherModule

Модуль CallsMessagePublisherModule служит контейнером для прорисовки в SectionActionsDashboard страницы CallsMessagePublisherPage, в которой будет реализована логика добавляемого канала.

Для того чтобы создать модуль, необходимо в режиме настройки перейти в раздел [Конфигурация] и на вкладке [Схемы] выполнить пункт меню [Добавить] > [Модуль] (рис. 1).

Для созданного модуля необходимо установить следующие значения (рис. 2):

  • свойству [Заголовок] — "Модуль издателя сообщений логирования звонка";
  • свойству [Название] — "CallsMessagePublisherModule".

В созданный модуль необходимо добавить следующий исходный код.

define("CallsMessagePublisherModule", ["BaseMessagePublisherModule"],
    function() {
        // Определение класса.
        Ext.define("Terrasoft.configuration.CallsMessagePublisherModule", {
            // Базовый класс.
            extend: "Terrasoft.BaseMessagePublisherModule",
            // Сокращенное имя класса.
            alternateClassName: "Terrasoft.CallsMessagePublisherModule",
            // Инициализация страницы, которая будет отрисовываться в данном модуле.
            initSchemaName: function() {
                this.schemaName = "CallsMessagePublisherPage";
            }
        });
        // Возвращает объект класса, определенного в модуле.
        return Terrasoft.CallsMessagePublisherModule;
    });

После внесения исходного кода модуль необходимо сохранить.

4. Создать страницу CallsMessagePublisherPage

Для этого необходимо в режиме настройки перейти в раздел [Конфигурация] и на вкладке [Схемы] выполнить пункт меню [Добавить] > [Схема модели представления карточки]. Для создаваемой страницы необходимо установить в качестве родительского объекта схему BaseMessagePublisherPage пакета MessagePublisher. В качестве названия и заголовка необходимо указать значение "CallsMessagePublisherPage".

В исходном коде страницы необходимо указать имя схемы объекта, с которым будет работать страница (в данном случае Activity), реализовать логику публикации сообщения и переопределить метод getServiceConfig, в котором нужно указать имя класса из конфигурации.

//Задает класс, который будет работать с данной страницей.
getServiceConfig: function() {
return {
className: "Terrasoft.Configuration.CallsMessagePublisher"
};
}

Поскольку реализация логики публикации сообщения содержит довольно большое количество методов, атрибутов и свойств, полностью исходный код схемы CallsMessagePublisherPage прилагается ниже в конце статьи. В исходном коде показана реализация рабочего канала CallMessagePublisher, который используется для логирования входящих и исходящих звонков.
Результатом выполнения данного кейса будет новый рабочий канал в SectionActionsDashboard (рис. 3).

Рис. 3. — Пример пользовательского канала CallsMessagePublisher в SectionActionsDashboard раздела [Контакты]

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

© Terrasoft 2002-2016.

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

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