Мини-страницы для разных типов

Добрый день.
Необходимо для нового раздела с тремя типами записей добавить для каждого типа мини-страницу.
Делаю по инструкции: https://academy.terrasoft.ru/documents/technic-sdk/7-8-0/sozdanie-mini-k...
Создал "Схему модели представления карточки". Унаследовался от BaseMiniPage.
Для каждой страницы редактирования раздела в SysModuleEdit добавил значение MiniPageSchemaUId
Добавил модуль со стилями.
В итоге при добавлении записи открывается стандартная страница редактирования.

Подскажите, что не так?

Нравится

21 комментарий

[quote="Мария Ватулина"]Вот аналогичная тема - http://www.community.terrasoft.ru/forum/topic/16310[/quote]

Мария, спасибо, но в этой теме ответа на мой вопрос не получил.
Меня интересует именно вызов разных мини-страниц в зависимости от выбранного типа в списке при нажатии на кнопку "Добавить".
Кстати, раньше в разделе "Активности" был выбор типа новой записи (при нажатии на "Добавить" в реестре), сейчас этого выбора нет (только "Добавить задачу"). Но что делать, если содержание мини-страниц должно формироваться в зависимости от типа?

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

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

Игорь, статья в Академии
https://academy.terrasoft.ru/documents/technic-sdk/7-8-0/sozdanie-mini-…
описывает создание мини-карточки, которая появляется при наведении курсора на ссылку на запись раздела. В примере это запись раздела "База знаний".
Но это не тот тип миникарточки, который появляется при создании новой записи раздела

Встречный вопрос, как привязать к кнопке "Добавить" мини-карточку вместо обычной?
Смотрю ActivitySectionV2, но признаков открытия minPage кроме как вызова метода this.openAddMiniPage в методе onSelectionKeyPress не нашёл, однако при нажатии на Добавить задачу debugger в этот метод не заходит.

Точной последовательности создания миникарточки, к сожалению, Вам сказать не могу пока.
Однако, укажу откуда начать
посмотрите следующий метод в BaseSectionV2
addRecord: function(typeColumnValue) {
...
if (this.hasAddMiniPage(typeColumnValue)) {
this.openAddMiniPage({
entitySchemaName: this.entitySchemaName,
valuePairs: this.getAddMiniPageDefaultValues(typeColumnValue)
});
} else {
this.openCardInChain({...
}
При создании записи в разделе, если к нему привязана миникарточка, то отладчик останавливается на точке останова, установленной в this.openAddMiniPage
А далее надо смотреть

В BaseSectionV2 в методе addRecord происходит проверка наличия мини-карточки по типу

this.hasAddMiniPage(typeColumnValue)

, где в свою очередь проверяется miniPage.hasAddMiniPage. Это свойство на данный момент у меня undefind.
Вопрос: Где устанавливается это свойство для той или иной страницы редактирования?

p.s.: Я докопал до BaseSchemaViewModel.initEditPages, где формируется конфигурация мини-страницы:

MiniPage: {
  schemaName: editPage.miniPageSchema,
  hasAddMiniPage: editPage.hasAddMiniPage
},

, но где присваивается значение editPage.hasAddMiniPage так и не нашёл.

hasAddMiniPage - всего лишь атрибут который отображает есть ли для данного раздела мини-карточка добавления записи
При глобальном поиске по приложению (F12 затем Ctrl+Shift+F) по слову miniPageSchema или hasAddMiniPage
в первых трех строках отображаются объекты Terrasoft.Configuration с идентификаторами схем миникарточек, привязанных к разным разделам. Скорее всего информация об этом занесена непосредственно в БД. Можно покопать в эту сторону

"Симута Роман Русланович" написал:hasAddMiniPage - всего лишь атрибут который отображает есть ли для данного раздела мини-карточка добавления записи
При глобальном поиске по приложению (F12 затем Ctrl+Shift+F) по слову miniPageSchema или hasAddMiniPage
в первых трех строках отображаются объекты Terrasoft.Configuration с идентификаторами схем миникарточек, привязанных к разным разделам. Скорее всего информация об этом занесена непосредственно в БД. Можно покопать в эту сторону

Тоже искал глобальным поиском + режим отладки раздела Активности (здесь MiniPage.hasAddMiniPage = true)
Но у меня MiniPage.hasAddMiniPage передаётся Undefined, хотя название схемы мини-карточки передаётся и для соответствующих записей в таблице SysModuleEdit заполнено поле MiniPageSchemaUId.

В какой таблице искать hasAddMiniPage?

В таблицах SysModuleEdit, SysModule, SysModuleEntity, SysSchema такого поля нет.
P.S.: Вообще было бы прекрасно, если бы в академии появилась статья по добавлению мини-карточки в раздел к кнопке "Добавить".

Игорь, свойство hasAddMiniPage определено в миксине MiniPageUtilities.

Миксин подключается к модели представления в классе BaseSchemaViewModel реализованном в одноименном модуле. В этом же классе есть метод initEditPages, в котором заполняется коллекция моделей представления для каждой entitySchema и там же заполняютя значениями свойства hasAddMiniPage (поищите глобальным поиском)

Поскольку вы создали новый раздел, то возможно, что это свойство у вас не инициализируется
посмотрите в глобальном объекте Terrasoft.configuration.EntityStructure (просто наберите в консоли)
пример для объекта Account - во вложении
посмотрите в объекте вашего раздела

Статья по миникарточке добавления в ближайших время будет написана.

Да Роман, это я уже находил и писал выше.
Но как всё же проинициализировать свойство editPage.hasAddMiniPage (НЕ miniPage.hasAddMiniPage)?

Узнал. Нужно добавить системную настройку с кодом Has[ИмяСущностиРаздела]MiniPageAddMode, например, как для раздела HasAccountMiniPageAddMode
Это системная настройка булевского типа, из нее и прилетает значение свойства hasAddMiniPage в Terrasoft.configuration.EntityStructure

Да, Роман! То, что надо. Спасибо.

В продолжении темы, страница выводится, НО одна для всех типов.
Смотрю по коду и вижу, что в

 this.openAddMiniPage({
   entitySchemaName: this.entitySchemaName,
   valuePairs: this.getAddMiniPageDefaultValues(typeColumnValue)
});

необходимо передать ещё один параметр miniPageSchemaName, передаю.

Далее в MiniPageContainerViewModel.setSchemaParametersInfo
в строке

var schemaName = this.getSchemaName(entitySchemaName) || config.miniPageSchemaName;

Т.о. в конфигурацию мини-карточки попадает название схемы первой зарегистрированной мини-карточки, хранящаяся в Terrasoft.ModuleUtils.moduleStructure[entitySchemaName].miniPageSchema, а не переданное в параметре miniPageSchemaName значение. И как следствие выводится не та мини-карточка.
Вопрос: Не было ли целесообразней поменять местами this.getSchemaName(entitySchemaName) и config.miniPageSchemaName в строке

var schemaName = this.getSchemaName(entitySchemaName) || config.miniPageSchemaName;

или передавать в this.getSchemaName(entitySchemaName) вторым аргументом тип создаваемой записи?

Решил эту проблему подменой значения Terrasoft.ModuleUtils.moduleStructure[entitySchemaName].miniPageSchema на нужное мне.
Но как-то это костыльно...
Если у кого есть другие варианты реализации, буду благодарен за подсказку

И ещё проблема, после сохранения и закрытия мини-карточки не происходит обновление реестра раздела, подскажите, что пропустил.

Добавьте в схеме раздела

        // Обновление данных реестра.
        this.reloadGridData();

Пример можно глянуть здесь
https://academy.terrasoft.ru/documents/technic-sdk/7-8/dataservice-sozd…

А какой механизм реализован в р. Активности и р. Лиды? Ведь там реестр обновляется.

Честно говоря, не знаю. Надо смотреть :)

А зачем тогда изобретать велосипед с reloadGridData?
Тоже, к сожалению, концов не нашёл в р. Активности и р. Лиды.

Вопрос решил. В sectionV2 подписался на сообщение ReloadDashboardItems.

 subscribeSandboxEvents: function() {
                this.callParent(arguments);
                this.sandbox.subscribe("ReloadDashboardItems", function(){
                    this.reloadGridData()
                }, this);
            }
Показать все комментарии