Раздел

PDF
Основы

Интерфейс элемента "Раздел" 

Элемент "Раздел" отображается в рабочей области пользовательского интерфейса после выбора соответствующего пункта меню в боковой панели либо на главной странице приложения.

Как правило, раздел имеет два представления: отображение данных в реестре раздела и отображение аналитики раздела.

Каждому разделу соответствует определенная схема. Например, конфигурирование раздела Контакты выполняется в схеме ContactSectionV2. Все схемы разделов унаследованы от родительской схемы BaseSectionV2.

Элементы пользовательского интерфейса приложения, относящиеся к разделу, размещены в соответствующих контейнерах, которые конфигурируются в базовой или унаследованной схеме раздела. К основным контейнерам раздела относятся:

  • контейнер кнопок действий (ActionButtonsContainer), в котором размещены кнопка действия раздела (1) и кнопка с выпадающим списком действий (2);
  • контейнер фильтров (FiltersContainer), в котором размещаются фильтры (3) и теги (4);
  • контейнер отображения реестра раздела (GridDataView), в активной записи которого размещаются кнопки действий редактирования (5), копирования (6) и удаления (7) текущей записи;
  • контейнер отображения аналитики раздела (AnalyticsDataView).

Расположение и состав основных контейнеров раздела, в зависимости от режима отображения данных, показаны на рисунках.

К основным элементам интерфейса и функциональным элементам раздела относятся: реестр, аналитика раздела, действия, фильтры и теги.

Реестр раздела — компонент, в котором в плиточном или списочном представлении отображаются записи, относящиеся к разделу. Реестр раздела отображается в контейнере GridDataView.

Аналитика раздела — используется для визуализации статистических данных с помощью графиков, единичных показателей или списков. Блоки итогов и пользовательские виджеты отображаются в контейнере отображения аналитики раздела AnalyticsDataView.

Действия раздела — функциональные элементы раздела, которые представляют собой набор операций над активной записью реестра. Действия могут быть вызваны при помощи кнопок разного вида, размещенных в контейнере ActionsButtons и контейнере активной записи.

Фильтр — элемент для поиска и фильтрации записей в разделе. Различают быстрый, стандартный, расширенный фильтры, а также группы фильтрации. Кнопки Фильтр размещаются в контейнере фильтров FiltersContainer.

Тег — предназначен для быстрого и удобного поиска записей в разделе по ключевым словам. Как и фильтр, размещен в контейнере фильтров.

Реестр раздела 

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

Плиточное представление отображает поля каждой записи в несколько строк. Это представление для реестра установлено по умолчанию. Так, например, для раздела Контакты в каждой записи отображены следующие поля:

  • ФИО (1);
  • Должность (2);
  • Рабочий телефон (3);
  • Контрагент (4);
  • Email (5);
  • Мобильный телефон (6).

Списочное представление отображает записи в виде простой таблицы, в которой каждой записи соответствует одна строка. При этом последовательность расположения полей в списочном представлении может не совпадать с последовательностью расположения полей в плиточном представлении.

Чтобы избежать избыточности представляемых данных, реестр раздела отображает как правило только самые значимые колонки таблицы. Все данные отображаются и редактируются на страницах редактирования разделов.

Каждому разделу соответствует своя схема бизнес-объекта, описывающая структуру таблицы базы данных, в которой и хранятся данные записей, а также описывающая определенные инструкции по обработке этих даных. Из этих данных и формируется реестр раздела. Условно каждая строка таблицы соответствует записи раздела. Так, например, разделу Контакты соответствует схема бизнес-объекта Contact, которая содержит перечень и свойства колонок таблицы [Contact].

Схема объекта Contact в дизайнере объектов
Таблица [Contact]

Положение и состав отображаемых полей в записях реестра раздела для существующих колонок схемы бизнес-объекта можно изменить при помощи мастера раздела или мастера настройки списка, доступных из меню кнопки Вид.

Если же необходимо добавить пользовательскую колонку в схему бизнес-объекта и отобразить ее в реестре, то это можно выполнить двумя способами.

Первый способ — использовать мастер разделов. При этом в текущем пользовательском пакете будет создан замещающий объект Contact, который унаследует все колонки базового объекта Contact из пакета Base, и к которому будет добавлена новая пользовательская колонка. Подробнее о работе с мастером раздела и результатами его работы можно узнать из статьи.

Второй способ — используя дизайнер объектов, создать в пользовательском пакете замещающий объект Contact, который унаследует все колонки базового объекта Contact из пакета Base. Добавить к замещающему объекту необходимые колонки и настроить их свойства. Далее, используя мастер разделов или мастер настройки списка, настроить отображение добавленных колонок в реестре.

Настроить внешний вид реестра 

В Creatio существует возможность настраивать внешний вид реестра, выделяя в нем определенные записи при выполнении заданного условия. Такая настройка помогает выделять записи, на которые необходимо обратить особое внимание.

За отображение строки реестра отвечает свойство customStyle записи реестра.

Свойство customStyle — это объект, свойства которого являются аналогами CSS-свойств и формируют стиль отображения записи реестра. Например:

item.customStyle = {
    // Цвет текста — белый.
    "color": "white",
    // Цвет фона — оранжевый.
    "background": "orange"
};

Для настройки отображения отдельных записей реестра выполните следующие действия:

  1. В замещенной схеме раздела переопределите базовый метод prepareResponseCollectionItem(item), который модифицирует строку данных перед загрузкой в реестр.
  2. Реализуйте в методе prepareResponseCollectionItem(item) присвоение определенного значения свойству customStyle для необходимых записей реестра.

Аналитика раздела 

Для анализа статистических данных разделов используются элементы аналитики Creatio. Для работы с аналитикой раздела необходимо перейти в представление аналитики необходимого раздела, нажав на кнопку Итоги (1). Если подразумевается работа с данными всех разделов приложения, то необходимо перейти в раздел Итоги.

Информация элементов аналитики отображается в специальных блоках, которые называются блоками итогов. Область раздела, на которой размещены блоки итогов, называется панелью итогов.

В приложении Creatio используются следующие блоки итогов:

  • График (2) — в наглядной форме отображает множественные данные из системы. Например, с помощью графика можно отобразить распределение активностей по пользователям системы. График может отображать информацию в виде диаграмм разных типов, либо в виде реестра данных. Подробнее о настройке графиков можно узнать из статьи.

  • Показатель (3) — отображает информацию, полученную в результате запроса к данным системы, например, общее количество активностей. Подробнее настройки показателей описываются в статье.

  • Шкала (4) — отображает информацию, полученную в результате запроса к данным системы относительно нормативной шкалы. Основные сведения и настройка индикаторов изложены в статье.

  • Список (5) — отображает информацию из системы в виде списка. Подробности настройки списка изложены в статье.

  • Web-страница (6) — предназначен для отображения веб-страниц. Это может быть, например, страница поисковой системы, онлайн-калькулятор валют или корпоративный сайт. Настройка блока итогов веб-страниц описана в статье.

  • Воронка продаж (7) — используется для анализа динамики продвижения продаж по стадиям. Подробности о настройке воронки продаж описаны в статье.

  • Виджет — отображает дополнительные пользовательские виджеты, например, виджет курсов валют, виджет погоды. Подробнее о пользовательских виджетах можно узнать из статьи.

Действия раздела 

Действиями раздела называют функциональные элементы, которые представляют собой набор операций с одной или несколькими записями реестра. Действия могут быть вызваны при помощи кнопок разного вида, размещенных как в контейнере действий текущего раздела, так и в контейнере активной записи.

Действия раздела доступны:

  • по кнопкам непосредственного вызова действий (1), (16)...(18).
  • по кнопкам с выпадающим меню (2), (3).
  • из пунктов меню вызова действий (4)...(15), (19), (20).

Различают стандартные и дополнительные действия разделов.

К стандартным относят следующие действия раздела:

  • Добавить контакт (New contact) (1) — вызывает всплывающее окно для добавления и сохранения новой записи раздела.
  • Открыть (Open) (16) — открывает страницу редактирования выбранной записи раздела.
  • Копировать (Copy) (17) — открывает страницу редактирования раздела, копирует в нее данные выбранной записи и при сохранении создает новую запись.
  • Удалить (Delete) (18) — удаляет активную запись.
  • Выбрать несколько записей (Select multiple records) (4) — выполнение множественного выбора записей реестра.
  • Выбрать все (Select all) (5) — выполнение выбора всех записей реестра.
  • Экспорт в Excel (Export to Excel) (6) — экспортирует все записи реестра текущего раздела в файл в формате *.xlsx.
  • Импорт данных (Data import) (7) — импортирует в Creatio данные из файла в формате *.xlsx. Дополнительная информация о процессе импорта данных содержится в статье.
  • Настроить журнал изменений (Change log setup) (8) — открывает страницу управления логированием и выбора колонок раздела, которые будут логироваться при изменении записи.

Дополнительные действия реализуют функциональность, в зависимости от бизнес-логики раздела. Дополнительными для раздела Контакты (Contacts) являются следующие действия:

  • Запустить синхронизацию (Synchronize now) (19) — выполнение синхронизации Creatio с контактами Google. Синхронизация контактов из Creatio в Google выполняется только для записей, отмеченных личным тегом, указанным в настройках синхронизации.
  • Добавить аккаунт для синхронизации (Add new account for synchronization) (20) — выполнение синхронизации с Google для Creatio Cloud.
  • Поместить в группу (Add to folder) (9) — вызывает всплывающее окно для выбора группы, в которую необходимо поместить выбранную запись.
  • Исключить из группы (Exclude from folder) (10) — исключить активную запись из всех групп, в которую она входит.
  • Перейти к дублям раздела 'Контакты' (Show duplicate 'Contacts') (11) — открывает дополнительную страницу, которая содержит все предполагаемые дубли контактов. Записи добавляются на эту страницу автоматически после выполнения поиска дублей.
  • Показать на карте (Show on map) (12) — позволяет отобразить на карте местонахождение выбранных контактов. По действию открывается окно с картой, на которой отмечены выбранные в реестре контакты. Если для всех выбранных контактов адрес не заполнен, то действие не будет выполнено. Если для некоторых контактов адрес не заполнен или заполнен некорректно, то в окне отобразится соответствующая информация.
  • Обновить возраст (Update the values in the 'Age' column) (13) — обновление значения в колонке Возраст (Age) на странице активной записи контакта.
  • Настроить время обновления возраста (Schedule daily update of the 'Age' column) (14) — вызывает всплывающее окно для настройки времени ежедневного обновления информации о возрасте контакта.
  • Снять признак 'Неактуальный' у email-адресов (Mark all email addresses as valid) (15) — устанавливает признак Является актуальным email-адресу выбранной записи контакта.

В приложении Creatio существует возможность создавать пользовательские действия.

Список действий раздела представляет собой экземпляр класса Terrasoft.BaseViewModelCollection. Каждый элемент списка действий – это модель представления.

Настройка действия выполняется в конфигурационном объекте, в котором можно как явно задавать свойства модели представления действий, так и использовать базовый механизм привязки.

Базовое наполнение меню Действия страницы раздела реализовано в базовом классе раздела BaseSectionV2. Список действий раздела возвращает защищенный виртуальный метод getSectionActions() из схемы BaseSectionV2.

Добавление отдельного действия в коллекцию выполняется вызовом метода addItem(). В качестве параметра ему передается callback-метод getButtonMenuItem(). Метод создает экземпляр модели представления действия по конфигурационному объекту, который передан ему в качестве параметра.

Базовая реализация добавления действия:

Базовая реализация добавления действия
/**
* Возвращает коллекцию действий раздела в режиме отображения реестра.
* @protected
* @virtual
* @return {Terrasoft.BaseViewModelCollection} Коллекция действий раздела.
*/
getSectionActions: function() {
    // Коллекция действий. Экземпляр Terrasoft.BaseViewModelCollection.
    var actionMenuItems = this.Ext.create("Terrasoft.BaseViewModelCollection"); 
    // Добавления действия в коллекцию. В качестве callback- метода передается метод,
    // инстанцирующий экземпляр модели действия пр переданному конфигурационному
    // объекту.   
    actionMenuItems.addItem(
        this.getButtonMenuItem({
        // Конфигурационный объект настройки действия.
        ...
        })
    );
    return actionMenuItems;
}

Свойства конфигурационного объекта действия раздела, который передается параметром в метод getButtonMenuItem() представлены в таблице.

Свойство Описание
Type

Тип элемента меню Действия. С помощью этого свойства можно добавить в меню действия горизонтальную линию для отделения блоков меню. Для этого в качестве значения свойства нужно указать строку Terrasoft.MenuSeparator. Если значение свойства не указано, то по умолчанию будет добавлен пункт меню.

Caption Заголовок пункта меню Действия. Для задания заголовков рекомендуется использовать локализуемые строки схемы.
Click В этом свойстве выполняется привязка метода-обработчика действия по имени метода.
Enabled Логическое свойство, регулирующее доступность пункта меню.
Visible Логическое свойство, которое регулирует видимость пункта меню.

Общий алгоритм добавления пользовательского действия в раздел 

  1. Создать замещающую схему существующего раздела или схему нового раздела.
  2. Переопределить метод getSectionActions().
  3. Добавить действие в коллекцию действий методом addItem().
  4. В callback-метод getButtonMenuItem() передать конфигурационный объект с настройками добавляемого действия.

При замещении базовых разделов в методе getSectionActions() замещающего модуля, сначала нужно вызвать родительскую реализацию этого метода для инициализации действий родительского раздела. Для этого необходимо выполнить метод this.callParent(arguments), который возвратит коллекцию действий базового раздела. 

Фильтры 

Фильтры предназначены для поиска и фильтрации записей в разделах. В Creatio предусмотрены быстрый, стандартный и расширенный фильтры, а также группы.

Элементы управления фильтрами отображаются над реестром разделов системы. Управление быстрым фильтром осуществляется непосредственно из панели инструментов Быстрый фильтр, а управление стандартным, расширенным фильтрами и группами — из меню Фильтр.

Быстрый фильтр используется для фильтрации данных по наиболее часто используемым параметрам. Например, в разделе Активности чаще всего необходимо просматривать активности одного сотрудника за указанный период времени. Для этого предусмотрены следующие быстрые фильтры:

  • Сегодня (1) — отображает записи текущего дня.
  • Текущая неделя (2) — отображает записи текущей недели.
  • Выбрать период (3) — отображает записи стандартного периода, например, "Вчера", "Текущая неделя" и т.п. Также можно установить произвольный период, указав даты его начала и завершения во встроенном календаре.
  • Выбрать ответственного (4) — используется для отображения активностей одного или нескольких сотрудников.

Стандартный фильтр используется для поиска записей в разделах системы по указанным значениям одной или нескольких колонок. Например, если необходимо найти всех специалистов компании в разделе, то нужно установить фильтры полям Контрагент (5) и Должность (6).

Установка стандартных фильтров в разделе выполняется при помощи команды Добавить условие (7) меню Фильтр.

Расширенный фильтр используется в случае если к записям необходимо применить более сложный фильтр, состоящий из нескольких параметров и условий поиска. Например, если необходимо из всех специалистов компании отобразить только тех, кто работает в департаментах "Разработка" и "Администрация".

Для установки расширенного фильтра необходимо использовать команду Перейти в расширенный режим (8).

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

Включение записи в группу, как и исключение из нее, не может быть выполнено вручную. Запись будет автоматически отображена в группе, если она отвечает условиям фильтрации группы. Если запись более не соответствует условиям фильтра группы, она исключается из группы автоматически.

Для отображения в режиме фильтрации данных по группам необходимо выполнить команду Показать группы (8). При этом отобразятся уже существующие в системе группы для активного раздела. При необходимости можно создать нужную структуру групп и определить правила их наполнения.

В приложении Creatio существует возможность создавать пользовательские фильтры в разделе.

Теги 

Теги используются для быстрого поиска информации по ключевым словам. Например, в разделе Контакты с помощью тегов можно выделить, например, VIP-контактов или определить черный список клиентов. При фильтрации записей по тегу в разделе будут отображены только те записи, для которых установлен выбранный тег.

Тегирование записей выполняется вручную. Для каждого раздела Sales Creatio используется отдельный перечень тегов.

В Sales Creatio используются такие виды тегов:

  • Личные — теги, которые может видеть и использовать только создавший из пользователь. Ни администраторы системы, ни руководители не смогут увидеть личные теги сотрудников. Личные теги отображаются зеленым цветом.
  • Корпоративные — теги, которые отображаются для всех сотрудников компании. Любой сотрудник может установить или снять корпоративный тег. Создавать новые корпоративные теги могут все сотрудники/роли, которым предоставлено право на операцию Управление корпоративными тегами. Корпоративные теги отображаются голубым цветом.
  • Публичные — теги, которые отображаются для всех сотрудников компании, а также для пользователей портала самообслуживания. Любой сотрудник может установить или снять публичный тег. Создавать новые публичные теги могут все сотрудники/роли, которым предоставлено право на операцию Управление публичными тегами. Публичные теги отображаются красным цветом.

Создать новый раздел 

Одной из типовых задач разработки в Creatio является добавление нового раздела. Для реализации этой задачи используется мастер разделов. С помощью мастера можно настроить основные свойства раздела и его страниц, бизнес-правила и кейсы.

Результатом выполненных настроек будут схемы объектов и страниц раздела, добавленные в текущий пользовательский пакет.

Схемы объектов, создаваемые мастером разделов
Правила именования Назначение Родитель
[Имя объекта раздела] Основной объект раздела Базовый объект (BaseEntity)
[Имя объекта раздела]Folder

Группа объекта.

Служебный объект для корректной группировки записей в разделе. Формирует общую структуру дерева групп раздела.

Базовая группа (BaseFolder)
[Имя объекта раздела]InFolder

Объект в группе.

Служебный объект для корректной работы группировки записей в разделе. Определяет связи между записями раздела и группами, в которые они входят.

Базовый элемент в группе (BaseItemInFolder)
[Имя объекта раздела]File Объект для детали Файлы и ссылки. Файл (File)
[Имя объекта раздела]Tag Тег раздела. Базовый тег (BaseTag)
[Имя объекта раздела]InTag Тег в объекте раздела. Базовый тег в базовом объекте (BaseEntityInTag)
Клиентские схемы, создаваемые мастером раздела
Правила именования Назначение Родитель
[Имя объекта раздела]Section Схема раздела

Базовая схема раздела (BaseSectionV2)

[Имя объекта раздела]Page Схема страницы редактирования раздела Базовая схема страницы редактирования раздела (BaseModulePageV2)

Мастер разделов и пакет Custom 

Мастер разделов не только создает различные схемы, но и привязывает данные к текущему пакету. Однако, если текущим пакетом является пакет Custom, то перенести привязанные данные в другой пользовательский пакет невозможно. Пакет Custom не предназначен для фиксации в системе контроля версий и переноса изменений на другие среды. Поэтому пакет Custom не рекомендуется использовать в качестве текущего пользовательского пакета. 

На заметку.

Чтобы изменить текущий пакет, необходимо использовать системную настройку Текущий пакет (CurrentPackageId). Перед запуском мастера разделов рекомендуется проверить значение этой системной настройки.

Последовательность создания раздела 

  1. С помощью мастера разделов создайте раздел и добавьте его в нужное рабочее место.
  2. Добавьте необходимые колонки в схему объекта раздела и настройте их отображение в реестре, на странице редактирования и на деталях.

Удалить раздел 

На заметку. Если на основании объекта, который требуется удалить, создан раздел, то этот раздел удаляется в первую очередь.

Чтобы удалить пользовательский раздел Creatio, необходимо иметь доступ к конфигурации системы и базе данных.

Важно. Прежде чем удалить пользовательский раздел, необходимо снять блокировку с соответствующего этому разделу файла в хранилище версий SVN.

В первую очередь потребуется удалить записи из базы данных. 

Скрипт удаления раздела
DECLARE @UId UNIQUEIDENTIFIER
DECLARE @ModuleEntityUID UNIQUEIDENTIFIER;
DECLARE @ModuleID UNIQUEIDENTIFIER;
DECLARE @Name NVARCHAR(max) = 'ToDelete';
select @UId = UId from SysSchema where Name Like @Name
select @ModuleEntityUID = Id from SysModuleEntity where
SysEntitySchemaUId = @UId
select @ModuleID = Id from SysModule where SysModuleEntityId = @ModuleEntityUID;
delete from SysModuleInWorkplace where SysModuleId = @ModuleID;
delete from SysModule where Id = @ModuleID;
delete from SysModuleEdit where SysModuleEntityId = @ModuleEntityUID;
delete from SysModuleEntity where Id = @ModuleEntityUID;
delete from SysDetail where EntitySchemaUId = @UId;
delete from SysLookup where SysEntitySchemaUId = @UId;
delete from [Lookup] where SysEntitySchemaUId = @UId;

Обратите внимание, что значение “ToDelete” нужно заменить на название схемы пользовательского раздела. После очистки базы данных необходимо удалить пользовательские схемы в разделе Управление конфигурацией (Advanced settings) в следующем порядке:

  1. ToDeleteFile
  2. ToDeleteInFolder
  3. ToDeleteInTag
  4. ToDeleteTag
  5. ToDeleteFolder
  6. ToDelete
Создать новый раздел
Легкий

Пример. В приложение добавить рабочее место Автосалон (Car showroom). В созданное рабочее место добавить пользовательский раздел Грузовые автомобили (Trucks). Схема объекта грузового автомобиля должна содержать обязательные для заполнения колонки:

  • Название (Name) — строка.
  • Владелец (Owner) — справочник Контакт (Contact).
  • Организация (Organization) — справочник Контрагент (Account).
  • Цена (Price) — строка.

1. С помощью мастера разделов создать раздел и добавить его в нужное рабочее место 

Процесс создания рабочего места подробно описан в статье "Настройка рабочих мест". Для нового рабочего места укажите Название (Name) — "Автосалон" ("Car showroom") и добавьте группу пользователей, для которой будет доступно создаваемое рабочее место.

Работа с мастером разделов подробно описана в статье "Мастер разделов". Для создания нового раздела достаточно использовать первый шаг мастера. При этом в основной объект раздела будут добавлены колонка Название (Name) с типом "строка" и колонки, унаследованные от базового объекта. Для первоначальной настройки раздела на первом шаге мастера укажите:

  • Код раздела (Code) — "UsrTruck";
  • Заголовок (Title) — "Грузовые автомобили" ("Trucks").

Важно. Название объекта раздела, вводимое в поле Код раздела в мастере разделов, не должно содержать префиксов "Base", "Sys" или "Vw". Также оно не должно содержать суффиксов "InFolder", "Lcz", "Lookup" и "Settings". В противном случае для такого объекта будет невозможно настроить импорт данных из Excel.

Если работа в системе ведется с настройками по умолчанию, то при вводе значения в поле Код раздела возникнет сообщение о том, что значение должно начинаться с префикса "Usr". Значение префикса задается в системной настройке Префикс названия объекта (SchemaNamePrefix). При необходимости можно сменить значение префикса на пользовательское. Использовать пустую строку в качестве префикса не рекомендуется из-за возможных совпадений названий с другими элементами базовой конфигурации.

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

2. Добавить необходимые колонки в схему объекта раздела и настроить их отображение 

Существует два способа добавления новых колонок в схему объекта:

1. При помощи мастера создать новую колонку и сразу же добавить ее на страницу редактирования. При этом колонка будет автоматически добавлена в схему основного объекта раздела. Подробно о настройке полей страницы редактирования записи раздела читайте в статье "Как настроить поля страницы".

2. Добавить колонку в схему основного объекта раздела с помощью дизайнера объекта в разделе Конфигурация. Затем с помощью мастера разделов добавить колонки на страницу. Подробнее о возможностях раздела Конфигурация можно узнать из статьи "Разработка во встроенной IDE. Раздел Конфигурация".

Поскольку мастер раздела задействован в любом случае, удобнее использовать первый способ.

Колонка Название (Name) создается и добавляется на страницы раздела мастером раздела автоматически.

Для остальных колонок заполните следующие свойства:

Колонка Тип Заголовок Title Название в базе данных Name in DB
Владелец Справочник Контакт (Contact) Владелец (Owner) UsrOwner
Организация Справочник Контрагент (Account) Организация (Organization) UsrOrganization
Цена Дробное число (Decimal) Цена, USD (Price, USD) UsrPrice

Для всех колонок установите признак Является обязательным (Is required).

После сохранения изменений в мастере разделов в схему объекта UsrTruck будут добавлены новые колонки, а в массив модификаций diff схемы страницы редактирования UsrTruckPage — соответствующие им конфигурационные объекты.

Настройте отображение колонок в реестре раздела. Страница настройки колонок реестра открывается по команде Настроить колонки (Select fields to display) меню кнопки Вид (View). Подробнее о настройке колонок раздела можно узнать из статьи "Настройка колонок реестра".

Результат выполнения примера

Добавить действие раздела для единичной записи
Средний

Пример. Для реестра раздела Заказы реализовать действие, которое в информационном окне будет отображать дату создания заказа. Действие должно быть доступно только для заказов, находящихся на стадии Исполнение.

Важно. Пример актуален для кастомизации линейки продуктов Sales Creatio.

Обращение к выделенной записи выполняется через атрибут модели представления раздела ActiveRow, который возвращает значение первичной колонки выделенной записи. Далее это значение может использоваться для получения значений, загруженных в реестр полей выбранного объекта, например, из коллекции данных списочного реестра, которая хранится в свойстве GridData модели представления реестра.

1. В пользовательском пакете создать замещающую страницу раздела Заказы 

Создайте замещающий клиентский модуль, в котором в качестве родительского объекта укажите схему OrderSectionV2 . Процесс создания замещающей страницы описан в статье "Cоздать клиентскую схему".

2. В коллекцию локализуемых строк замещающей схемы раздела добавить строку с заголовком пункта меню Действия 

Создайте новую локализуемую строку.

Для созданной строки укажите:

  • Название (Name) — "CreationDateActionCaption";
  • Значение (Value) — "Показать дату создания заказа" (“Show order creation date”).

3. В коллекцию методов модели представления раздела добавить реализацию методов 

  • isRunning() — проверяет, находится ли выбранный в реестре заказ на стадии Исполнение.
  • isCustomActionEnabled() — определяет доступность добавленного пункта меню.
  • showOrderInfo() — метод-обработчик действия, который отображает в информационном окне планируемую дату завершения выбранного заказа.
  • getSectionActions() — переопределенный метод родительской схемы, возвращающий коллекцию действий раздела.

Исходный код замещающей схемы:

OrderSectionV2.js
define("OrderSectionV2", ["OrderConfigurationConstants"],
    function(OrderConfigurationConstants) {
    return {
        // Название схемы объекта раздела.
        entitySchemaName: "Order",
        // Методы модели представления раздела.
        methods: {
            // Проверяет, на какой стадии находится заданный заказ.
            // activeRowId — значение первичной колонки выделенной записи реестра.
            isRunning: function(activeRowId) {
                // Получение коллекции данных списочного представления реестра раздела.
                var gridData = this.get("GridData");
                // Получение модели выбранного заказа по заданному значению первичной колонки.
                var selectedOrder = gridData.get(activeRowId);
                // Получение свойства модели — статуса выбранного заказа.
                var selectedOrderStatus = selectedOrder.get("Status");
                // Метод возвращает true, если статус заказа [Исполнение]. Иначе возвращает false.
                return selectedOrderStatus.value === OrderConfigurationConstants.Order.OrderStatus.Running;
            },
            // Определяет, будет ли доступен пункт меню. 
            isCustomActionEnabled: function() {
                // Попытка получения идентификатора активной (выбранной в реестре) записи.
                var activeRowId = this.get("ActiveRow");
                // Если идентификатор определен и статус выбранного заказа
                // [Исполнение], то возвращается true, иначе — false.
                return activeRowId ? this.isRunning(activeRowId) : false;
            },
            // Метод-обработчик действия. Отображает в информационном окне дату создания заказа.
            showOrderInfo: function() {
                var activeRowId = this.get("ActiveRow");
                var gridData = this.get("GridData");
                // Получение даты создания заказа. Колонка должна быть добавлена в реестр.
                var dueDate = gridData.get(activeRowId).get("Date");
                // Отображение информационного окна.
                this.showInformationDialog(dueDate);
            },
            // Переопределение базового виртуального метода, возвращающего коллекцию действий раздела.
            getSectionActions: function() {
                // Вызывается родительская реализация метода для получения коллекции
                // проинициализированных действий раздела.
                var actionMenuItems = this.callParent(arguments);
                // Добавление линии-разделителя.
                actionMenuItems.addItem(this.getButtonMenuItem({
                    Type: "Terrasoft.MenuSeparator",
                    Caption: ""
                }));
                // Добавление пункта меню в список действий раздела.
                actionMenuItems.addItem(this.getButtonMenuItem({
                    // Привязка заголовка пункта меню к локализуемой строке схемы.
                    "Caption": {bindTo: "Resources.Strings.CreationDateActionCaption"},
                    // Привязка метода-обработчика действия.
                    "Click": {bindTo: "showOrderInfo"},
                    // Привязка свойства доступности пункта меню к значению, которое возвращает метод isCustomActionEnabled.
                    "Enabled": {bindTo: "isCustomActionEnabled"}
                }));
                // Возврат дополненной коллекции действий раздела.
                return actionMenuItems;
            }
        }
    };
});

Результат выполнения примера

После сохранения схемы и обновления страницы приложения с очисткой кэша в разделе Заказы (Orders) появится новое действие, которое будет активно при выборе заказа, находящегося на стадии Исполнение (In progress).

Добавить действие раздела для нескольких записей
Средний

По умолчанию для реестра используется режим выбора одной записи. Для выбора в реестре нескольких активных записей в меню кнопки Действия нажмите Выбрать несколько записей. После этого изменится визуальное представление реестра — появятся элементы для выбора записей. Для отмены режима выбора нескольких записей в меню кнопки Действия нажмите Отменить множественный выбор.

Пример. Для реестра раздела Заказы реализовать действие, которое в информационном окне будет отображать названия контрагентов у нескольких выбранных в реестре заказов.

Важно. Пример актуален для кастомизации линейки продуктов Sales Creatio.

Значение первичных колонок выбранных записей хранится в свойстве SelectedRows модели представления раздела. Эти значения могут быть использованы для получения значений, загруженных в реестр полей выбранных объектов, например, из коллекции данных списочного реестра, которая хранится в свойстве GridData модели представления реестра.

1. В пользовательском пакете создать замещающую страницу раздела Заказы 

Создайте замещающий клиентский модуль, в котором в качестве родительского объекта укажите схему OrderSectionV2 . Процесс создания замещающей страницы описан в статье "Cоздать клиентскую схему".

2. В коллекцию локализуемых строк замещающей схемы раздела добавить строку с заголовком пункта меню Действия 

Создайте новую локализуемую строку.

Для созданной строки укажите:

  • Название (Name) — "AccountsSectionAction";
  • Значение (Value) — "Отобразить контрагентов по выбранным заказам" (“Accounts for the selected orders”).

3. В коллекцию методов модели представления раздела добавить реализацию методов 

  • isCustomActionEnabled() — определяет доступность добавленного пункта меню.
  • showOrdersInfo() — метод-обработчик действия, который отображает в информационном окне список контрагентов выбранных заказов.
  • getSectionActions() — переопределенный метод родительской схемы, возвращающий коллекцию действий раздела.
OrderSectionV2.js
define("OrderSectionV2", ["OrderConfigurationConstants"],
    function(OrderConfigurationConstants) {
    return {
        // Название схемы раздела.
        entitySchemaName: "Order",
        // Методы модели представления раздела.
        methods: {
            // Определяет, будет ли доступен пункт меню. 
            isCustomActionEnabled: function() {
                // Попытка получить массив идентификаторов выбранных записей.
                var selectedRows = this.get("SelectedRows");
                // Если массив содержит элементы (выбрана хотя бы одна запись в реестре),
                // то возвращает true, иначе — false.
                return selectedRows ? (selectedRows.length > 0) : false;
            },
            // Метод-обработчик действия. Отображает в информационном окне список контрагентов.
            showOrdersInfo: function() {
                // Получение массива идентификаторов выбранных записей.
                var selectedRows = this.get("SelectedRows");
                // Получение коллекции данных записей реестра.
                var gridData = this.get("GridData");
                // Переменная для хранения модели объекта выбранного заказа. 
                var selectedOrder = null;
                // Переменная для хранения названия контрагента выбранного заказа.
                var selectedOrderAccount = "";
                // Переменная для формирования текста информационного окна.
                var infoText = "";
                // Обработка массива идентификаторов выбранных записей реестра.
                selectedRows.forEach(function(selectedRowId) {
                    // Получение модели объекта выбранного заказа.
                    selectedOrder = gridData.get(selectedRowId);
                    // Получение названия контрагента выбранного заказа. Колонка должна быть добавлена в реестр.
                    selectedOrderAccount = selectedOrder.get("Account").displayValue;
                    // Добавление названия контрагента в текст информационного окна.
                    infoText += "\n" + selectedOrderAccount;
                });
                // Отображение информационного окна.
                this.showInformationDialog(infoText);
            },
            // Переопределение базового виртуального метода, возвращающего коллекцию действий раздела.
            getSectionActions: function() {
                // Вызывается родительская реализация метода,
                // возвращающая коллекцию проинициализированных действий раздела. 
                var actionMenuItems = this.callParent(arguments);
                // Добавление линии-разделителя.
                actionMenuItems.addItem(this.getButtonMenuItem({
                    Type: "Terrasoft.MenuSeparator",
                    Caption: ""
                }));
                // Добавление пункта меню в список действий раздела.
                actionMenuItems.addItem(this.getButtonMenuItem({
                    // Привязка заголовка пункта меню к локализуемой строке схемы.
                    "Caption": {bindTo: "Resources.Strings.AccountsSectionAction"},
                    // Привязка метода-обработчика действия.
                    "Click": {bindTo: "showOrdersInfo"},
                    // Привязка свойства доступности пункта меню к значению,
                    // которое возвращает метод isCustomActionEnabled.
                    "Enabled": {bindTo: "isCustomActionEnabled"},
                    // Поддержка режима множественного выбора.
                    "IsEnabledForSelectedAll": true
                }));
                // Возврат дополненной коллекции действий раздела.
                return actionMenuItems;
            }
        }
    };
});

Результат выполнения примера

После сохранения схемы и обновления страницы приложения с очисткой кэша в разделе Заказы (Orders) появится новое действие, которое будет активно при выборе заказов в режиме выбора нескольких записей реестра.

Обработка выбора нескольких записей. Примеры
Средний

Пример 1 

Пример. Для реестра раздела Активности реализовать действие, которое установит состояние Выполнено для нескольких выбранных в реестре активностей.

1. В пользовательском пакете создать замещающую страницу раздела Активности 

Процесс создания замещающий страницы детально описан в статье "Cоздать клиентскую схему".

2. В коллекцию локализуемых строк замещающей схемы раздела добавить строку с заголовком пункта меню Действия 

Для созданной строки укажите:

  • Название (Name) — "AllDoneCaption";
  • Значение (Value) — "Отметить как "Завершены"" ("Mark as Completed").

3. В коллекцию методов модели представления раздела добавить реализацию методов 

  • isCustomActionEnabled() — метод, который определяет доступность добавленного пункта меню.
  • setAllDone() — метод-обработчик действия, который устанавливает состояние Выполнено для нескольких выбранных в реестре активностей.
  • getSectionActions() — переопределенный метод родительской схемы, возвращающий коллекцию действий раздела.

Исходый код замещающей схемы:

ActivitySectionV2.js
define("ActivitySectionV2", ["ConfigurationConstants"],
    function(ConfigurationConstants) {
        return {
            // Название схемы раздела.
            entitySchemaName: "Activity",
            // Методы модели представления раздела.
            methods: {
                // Определяет, будет ли доступен пункт меню. 
                isCustomActionEnabled: function() {
                    // Попытка получить массив идентификаторов выбранных записей.
                    var selectedRows = this.get("SelectedRows");
                    // Если массив содержит элементы (выбрана хотя бы одна запись в реестре),
                    // то возвращается true, иначе — false.
                    return selectedRows ? (selectedRows.length > 0) : false;
                },
                // Метод-обработчик действия. Устанавливает для выбранных записей статус [Выполнено].
                setAllDone: function() {
                    // Получение массива идентификаторов выбранных записей.
                    var selectedRows = this.get("SelectedRows");
                    // Обработка запускается в случае, если выбрана хотя бы одна запись.
                    if (selectedRows.length > 0) {
                        // Создание экземпляра класса пакетных запросов.
                        var batchQuery = this.Ext.create("Terrasoft.BatchQuery");
                        // Обновление каждой из выбранных записей.
                        selectedRows.forEach(function(selectedRowId) {
                            // Создание экземпляра класса UpdateQuery с корневой схемой Activity.
                            var update = this.Ext.create("Terrasoft.UpdateQuery", {
                                rootSchemaName: "Activity"
                            });
                            // Применение фильтра для определения записи для обновления.
                            update.enablePrimaryColumnFilter(selectedRowId);
                            // Для колонки Status устанавливается значение "Выполнено" с помощью
                            // конфигурационной константы ConfigurationConstants.Activity.Status.Done.
                            update.setParameterValue("Status", ConfigurationConstants.Activity.Status.Done,
                                                    this.Terrasoft.DataValueType.GUID);
                            // Добавление запроса на обновление записи в пакетный запрос.
                            batchQuery.add(update);
                        }, this);
                        // Выполнение пакетного запроса к серверу.
                        batchQuery.execute(function() {
                            // Обновление реестра.
                            this.reloadGridData();
                        }, this);
                    }
                },
                // Переопределение базового виртуального метода, возвращающего коллекцию действий раздела.
                getSectionActions: function() {
                    // Вызывается родительская реализация метода,
                    // возвращающая коллекцию проинициализированных действий раздела.
                    var actionMenuItems = this.callParent(arguments);
                    // Добавление линии-разделителя.
                    actionMenuItems.addItem(this.getButtonMenuItem({
                        Type: "Terrasoft.MenuSeparator",
                        Caption: ""
                    }));
                    // Добавление пункта меню в список действий раздела.
                    actionMenuItems.addItem(this.getButtonMenuItem({
                        // Привязка заголовка пункта меню к локализуемой строке схемы.
                        "Caption": { bindTo: "Resources.Strings.AllDoneCaption" },
                        // Привязка метода-обработчика действия.
                        "Click": { bindTo: "setAllDone" },
                        // Привязка свойства доступности пункта меню к значению, которое возвращает метод isCustomActionEnabled.
                        "Enabled": { bindTo: "isCustomActionEnabled" },
                        // Поддержка режима множественного выбора.
                        "IsEnabledForSelectedAll": true
                    }));
                    // Возврат дополненной коллекции действий раздела.
                    return actionMenuItems;
                }
            }
        };
    });

Результат выполнения примера

После сохранения схемы и обновления страницы приложения с очисткой кэша в разделе Активности (Activities) с помощью нового действия Отметить как "Завершены" (Mark as Completed) можно будет применить статус Завершено (Completed) сразу к нескольким выбранным активностям.

Пример 2 

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

1. В пользовательском пакете создать замещающую страницу раздела Активности 

Процесс создания замещающий страницы детально описан в статье "Cоздать клиентскую схему".

2. В коллекцию локализуемых строк замещающей схемы раздела добавить строку с заголовком пункта меню Действия 

Для созданной строки укажите:

  • Название (Name) — "SetOwnerCaption";
  • Значение (Value) — "Назначить ответственного" ("Assign Owner").

3. В коллекцию методов модели представления раздела добавить реализацию методов 

  • isCustomActionEnabled() — метод, который определяет доступность добавленного пункта меню.
  • setOwner() — метод-обработчик действия, который вызывает открытие справочника Контакты.
  • lookupCallback() — callback-метод, который устанавливает выбранный в справочнике контакт в качестве ответственного для выбранных в реестре записей.
  • getSectionActions() — переопределенный метод родительской схемы, возвращающий коллекцию действий раздела.

Исходый код замещающей схемы:

ActivitySectionV2.js
define("ActivitySectionV2", ["ConfigurationConstants"],
    function(ConfigurationConstants) {
        return {
            // Название схемы раздела.
            entitySchemaName: "Activity",
            // Методы модели представления раздела.
            methods: {
                // Определяет, будет ли доступен пункт меню. 
                isCustomActionEnabled: function() {
                    // Попытка получить массив идентификаторов выбранных записей.
                    var selectedRows = this.get("SelectedRows");
                    // Если массив содержит элементы (выбрана хотя бы одна запись в реестре),
                    // то возвращается true, иначе — false.
                    return selectedRows ? (selectedRows.length > 0) : false;
                },
                // Метод-обработчик действия. Вызывает открытие справочника [Контакты].
                setOwner: function() {
                    // Определение конфигурации справочника.
                    var config = {
                        // Cхема [Contact].
                        entitySchemaName: "Contact",
                        // Множественный выбор отключен.
                        multiSelect: false,
                        // Отображаемая колонка — [Name].
                        columns: ["Name"]
                    };
                    // Открытие справочника с определенной конфигурацией и callback-функцией, которая сработает
                    // после нажатия кнопки [Выбрать].
                    this.openLookup(config, this.lookupCallback, this);
                },
                // Выполняет установку выбранного в справочнике контакта в качестве ответственного
                // для выбранных в реестре записей.
                lookupCallback: function(args) {
                    // Идентификатор выбранной из справочник записи.
                    var activeRowId;
                    // Получение выбранных в справочнике записей.
                    var lookupSelectedRows = args.selectedRows.getItems();
                    if (lookupSelectedRows && lookupSelectedRows.length > 0) {
                        // Получение Id первой выбранной в справочнике записи.
                        activeRowId = lookupSelectedRows[0].Id;
                    }
                    // Получение массива идентификаторов выбранных записей.
                    var selectedRows = this.get("SelectedRows");
                    // Обработка запускается в случае, если выбрана хотя бы одна запись в реестре и выбран ответственный
                    // в справочнике.
                    if ((selectedRows.length > 0) && activeRowId) {
                        // Создание экземпляра класса пакетных запросов.
                        var batchQuery = this.Ext.create("Terrasoft.BatchQuery");
                        // Обновление каждой из выбранных записей.
                        selectedRows.forEach(function(selectedRowId) {
                            // Создание экземпляра класса UpdateQuery с корневой схемой Activity.
                            var update = this.Ext.create("Terrasoft.UpdateQuery", {
                                rootSchemaName: "Activity"
                            });
                            // Применение фильтра для определения обновляемой записи.
                            update.enablePrimaryColumnFilter(selectedRowId);
                            // Для колонки [Owner] устанавливается значение, равное идентификатору 
                            // выбранного из справочника контакта.
                            update.setParameterValue("Owner", activeRowId, this.Terrasoft.DataValueType.GUID);
                            // Добавление запроса на обновление записи в пакетный запрос.
                            batchQuery.add(update);
                        }, this);
                        // Выполнение пакетного запроса к серверу.
                        batchQuery.execute(function() {
                            // Обновление реестра.
                            this.reloadGridData();
                        }, this);
                    }
                },
                // Переопределение базового виртуального метода, возвращающего коллекцию действий раздела.
                getSectionActions: function() {
                    // Вызывается родительская реализация метода,
                    // возвращающая коллекцию проинициализированных действий раздела.
                    var actionMenuItems = this.callParent(arguments);
                    // Добавление линии-разделителя.
                    actionMenuItems.addItem(this.getButtonMenuItem({
                        Type: "Terrasoft.MenuSeparator",
                        Caption: ""
                    }));
                    // Добавление пункта меню в список действий раздела.
                    actionMenuItems.addItem(this.getButtonMenuItem({
                        // Привязка заголовка пункта меню к локализуемой строке схемы.
                        "Caption": { bindTo: "Resources.Strings.SetOwnerCaption" },
                        // Привязка метода-обработчика действия.
                        "Click": { bindTo: "setOwner" },
                        // Привязка свойства доступности пункта меню к значению, которое возвращает метод isCustomActionEnabled.
                        "Enabled": { bindTo: "isCustomActionEnabled" },
                        // Поддержка режима множественного выбора.
                        "IsEnabledForSelectedAll": true
                    }));
                    // Возврат дополненной коллекции действий раздела.
                    return actionMenuItems;
                }
            }
        };
    });

Результат выполнения примера

После сохранения схемы и обновления страницы приложения с очисткой кэша в разделе Активности (Activities) с помощью нового действия Назначить ответственного (Assign Owner) можно будет изменить ответственного сразу у нескольких выбранных активностей.

Настроить внешний вид реестра
Средний

Пример. Для раздела Заказы реализовать выделение тех записей реестра, которые находятся на стадии Исполнение.

Важно. Пример актуален для кастомизации линейки продуктов Sales Creatio.

1. В пользовательском пакете создать замещающую страницу раздела Заказы 

Создайте замещающий клиентский модуль, в котором в качестве родительского объекта укажите OrderSectionV2. Процесс создания замещающей страницы описан в статье "Cоздать клиентскую схему".

2. Переопределить метод prepareResponseCollectionItem 

В коллекцию методов созданной схемы добавьте метод prepareResponseCollectionItem(). Он переопределяет базовый метод, модифицирует строку данных перед загрузкой в реестр, а также добавляет настраиваемые стили к определенным строкам реестра.

OrderSectionV2.js
define("OrderSectionV2", ["OrderConfigurationConstants"], function(OrderConfigurationConstants) {
    return {
        // Название схемы раздела.
        entitySchemaName: "Order",
        // Методы модели представления раздела.
        methods: {
            // Переопределение базового метода, который модифицирует строку данных перед загрузкой в реестр.
            prepareResponseCollectionItem: function(item) {
                // Вызов базового метода.
                this.callParent(arguments);
                item.customStyle = null;
                // Определение статуса заказа.
                var running = item.get("Status");
                //Если состояние заказа "Выполнение", меняется стиль записи.
                if (running.value === OrderConfigurationConstants.Order.OrderStatus.Running) {
                    item.customStyle = {
                        // Цвет текста — белый.
                        "color": "white",
                        // Цвет фона — зеленый.
                        "background": "#8ecb60"
                    };
                }
            }
        }
    };
});

Результат выполнения примера

После сохранения схемы и обновления страницы приложения с очисткой кэша в разделе Заказы заказы, находящиеся на стадии Исполнение, будут выделены в реестре зеленым цветом.

Добавить в раздел блок быстрых фильтров
Средний

Фильтры предназначены для поиска и фильтрации записей в разделах. В Creatio для этих целей предусмотрены быстрый, стандартный и расширенный фильтры, а также группы. Подробнее о фильтрах можно узнать из статьи "Фильтры".

Для добавления блока быстрых фильтров в раздел необходимо в замещающей схеме раздела переопределить метод initFixedFiltersConfig(), в котором создать конфигурационный объект fixedFilterConfig с такими свойствами:

  • entitySchema — схема объекта,
  • filters — массив добавляемых фильтров.

Затем необходимо присвоить ссылку на созданный конфигурационный объект атрибуту fixedFiltersConfig модели представления

this.set("FixedFilterConfig", fixedFilterConfig);

Пример. В раздел Договоры (Contracts) добавить блок быстрых фильтров. Фильтрацию осуществлять по дате начала договора и по ответственному.

1. В пользовательском пакете создать замещающую схему раздела Договоры (Contracts) 

Создайте замещающий клиентский модуль, в свойствах которого укажите:

  • Родительский объект (Parent object) — "Схема страницы раздела — "Договоры"" ("Page schema — "Contracts" section");
  • Название (Name) — ContractSectionV2.

Процесс создания замещающей схемы описан в статье "Cоздать клиентскую схему".

2. В структуру схемы добавить локализуемые строки 

Создайте две новые локализуемые строки со следующими свойствами:

Название (Name) Значение (Value)
OwnerFilterCaption Ответственный (Owner)
PeriodFilterCaption Период (Period)

3. В коллекцию методов модели представления раздела добавить реализацию метода initFixedFiltersConfig() 

В методе initFixedFiltersConfig() создайте конфигурационный объект с массивом фильтров PeriodFilter и OwnerFilter, присвойте ссылку на данный объект атрибуту fixedFiltersConfig модели представления.

Исходный код замещающей схемы:

ContractSectionV2.js
define("ContractSectionV2", ["BaseFiltersGenerateModule"], function(BaseFiltersGenerateModule) {
    return {
        // Название схемы раздела
        entitySchemaName: "Contract",
        // Методы модели представления раздела.
        methods: {
            // Инициализирует фиксированные фильтры.
            initFixedFiltersConfig: function() {
                // Создание конфигурационного объекта.
                var fixedFilterConfig = {
                    // В качестве схемы объекта для фиксированных фильтров указывается схема объекта раздела.
                    entitySchema: this.entitySchema,
                    // Массив фильтров.
                    filters: [
                        // Фильтр периода.
                        {
                            // Название фильтра.
                            name: "PeriodFilter",
                            // Заголовок фильтра.
                            caption: this.get("Resources.Strings.PeriodFilterCaption"),
                            // Тип данных — дата.
                            dataValueType: this.Terrasoft.DataValueType.DATE,
                            // Дата начала периода фильтрации.
                            startDate: {
                                // Фильтруются данные из колонки [Date].
                                columnName: "StartDate",
                                // Значение по умолчанию — начало текущей недели.
                                defValue: this.Terrasoft.startOfWeek(new Date())
                            },
                            // Дата завершения периода фильтрации — завершение текущей недели.
                            dueDate: {
                                columnName: "StartDate",
                                defValue: this.Terrasoft.endOfWeek(new Date())
                            }
                        },
                        // Фильтр ответственного.
                        {
                            // Название фильтра.
                            name: "Owner",
                            // Заголовок фильтра.
                            caption: this.get("Resources.Strings.OwnerFilterCaption"),
                            // Фильтрация данных из колонки [Owner].
                            columnName: "Owner",
                            // Значение по умолчанию — контакт текущего пользователя.
                            // Берется из системной настройки.
                            defValue: this.Terrasoft.SysValue.CURRENT_USER_CONTACT,
                            // Тип данных — справочник.
                            dataValueType: this.Terrasoft.DataValueType.LOOKUP,
                            // Фильтр.
                            filter: BaseFiltersGenerateModule.OwnerFilter
                        }
                    ]
                };
                // Атрибуту [FixedFilterConfig] присваивается ссылка на созданный конфигурационный объект.
                this.set("FixedFilterConfig", fixedFilterConfig);
            }
        }
    };
});

Результат выполнения примера

После сохранения схемы и перезагрузки системы в разделе Договоры (Contracts) появится блок фиксированных фильтров, который позволит отбирать договоры как по дате их начала, так и по ответственному сотруднику (рис. 3).

Добавить редактируемые колонки
Средний

На странице подбора продуктов продуктов Sales Creatio доступна функциональность редактируемых колонок. По умолчанию для редактирования доступны колонки Количество, Единица измерения и Цена. Также существует возможность сделать редактируемыми и другие колонки.

Пример. На странице добавления продукта в разделе Заказы (Orders) необходимо сделать редактируемой колонку Скидка, % (Discount, %). Также добавить и сделать редактируемой пользовательскую колонку Пользовательская цена (Custom price).

Пример можно выполнить также для страницы подбора продукта в разделе Счета (Invoices).

1. Добавить пользовательскую колонку в объект [Продукт в заказе] ([Product in order]) 

Для этого нужно создать замещающий объект Продукт в заказе (Product in order) и добавить в него колонку. Создание замещающего объекта и добавление в него пользовательской колонки описано в статье "Cоздать схему объекта".

Для добавленной колонки необходимо установить следующие свойства:

  • [Заголовок] ([Title]) — "Пользовательcкая цена" ("Custom Price").
  • [Название] ([Name]) — "UsrCustomPrice".
  • [Тип данных] ([Data type]) — "Валюта" ("Currency").

После внесения изменений схему объекта необходимо опубликовать.

На заметку. Для реализации примера в разделе Счета (Invoices) приведенные выше действия необходимо выполнить для объекта Продукт в счете (Product in invoice).

2. Создать замещающий клиентский модуль для схемы страницы подбора продуктов 

Последовательность создания замещающего клиентского модуля описана в статье "Cоздать клиентскую схему". Для созданного модуля должны быть установлены следующие свойства:

  • [Заголовок] ([Title]) — [Схема страницы подбора продуктов] ([Product selection page schema]).
  • [Название] ([Name]) — "ProductSelectionSchema".
  • [Родительский объект] ([Parent object]) — [Схема страницы подбора продуктов] ([Product selection page schema]).

Далее на вкладку Исходный код (Source Code) дизайнера схемы нужно добавить исходный код, приведенный ниже:

ProductSelectionSchema.js
define("ProductSelectionSchema", [],
    function() {
        return {
            methods: {
                getEditableColumns: function() {
                    // Получение массива редактируемых колонок.
                    var columns = this.callParent(arguments);
                    // Добавление колонки [Скидка, %] в массив редактируемых колонок.
                    columns.push("DiscountPercent");
                    // Добавление пользовательской колонки.
                    columns.push("UsrCustomPrice");
                    return columns;
                },
                setColumnHandlers: function(item) {
                    this.callParent(arguments);
                    // Привязка обработчика события изменения пользовательской колонки.
                    item.on("change:UsrCustomPrice", this.onCustomPriceChanged, this);
                },
                // Метод-обработчик, который будет вызываться при изменении значения поля.
                onCustomPriceChanged: function(item, value) {
                    window.console.log("Changed: ", item, value);
                }
            }
        };
    });

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

3. Настроить отображение колонок на странице подбора продуктов 

Чтобы требуемые колонки появились на странице подбора продуктов необходимо настроить их отображение (см. "Настройка колонок реестра"). В режиме настройки плиточного представления реестра нужно добавить колонки Скидка, % (Discount, % и Пользовательская цена (Custom price).

Результат выполнения примера

В результате выполнения примера на странице подбора продуктов появятся две редактируемые колонки.

При этом после изменения значения колонки Пользовательская цена (Custom price) в консоли браузера выводится соответствующее сообщение.