Контейнеры¶
Общая информация
Список контейнеров:
Метод /app/v1.2/api/mobile/containers?v=1.2 отдает контейнеры и принимает ключи с названиями (id) контейнеров из интерфейса администрирования. Для запроса конкретного контейнера нужно запросить в боди его id, например: \"Tabbar"\
Отдача состоит из массива blocks (внутри них может быть вложенный массив blocks).
Во вложенном файле пример отдачи контейнера Tabbar.
Пример в JSon:
{
"data": [
{
"blocks": [
{
"type": null,
"data": null,
"blocks": \ \... \
"buttons": null,
"isGroupFavourite": false,
"parentNodeId": null,
"id": "Chats",
"template": {
"addButton": "[{\\"icon\\": \\"GroupChat\\", \\"action\\": \\"openNewTask\\", \\"title\\": \\"Групповой чат\\", \\"id\\": 978, \\"isSeparated\\": true},{\\"icon\\": \\"Chat\\", \\"action\\": \\"openNewTask\\", \\"title\\": \\"Чат\\", \\"id\\": 969},{\\"icon\\": \\"Calendar\\", \\"action\\": \\"openNewTask\\", \\"title\\": \\"Встреча\\", \\"id\\": 1507},{\\"icon\\": \\"Task\\", \\"action\\": \\"openNewTask\\", \\"title\\": \\"Личная задача\\", \\"id\\": 43350}\",]
"badgeItemColor": "",
"context": "",
"fallBackTitle": "",
"groups": "",
"icon": "ChatsTabIcon",
"interactions": "",
"isDefault": "0",
"showTabMenuButton": "1",
"topTitle": "Переписки",
"id": "toolbaritem"
}
},
{
"data": {
"counter": 22,
"type": "Feed",
"title": "Лента"
},
"action": "Syndicate",
"type": "Syndicate",
"isGroupFavourite": false,
"parentNodeId": null,
"id": "Feed",
"template": {
"addButton": "[{\\"icon\\": \\"\\", \\"action\\": \\"openNewTask\\", \\"title\\": \\"Задача\\"},{\\"icon\\": \\"\\", \\"action\\": \\"openNewTask\\", \\"title\\": \\"Чат\\", \\"id\\": 969},{\\"icon\\": \\"\\", \\"action\\": \\"openNewTask\\", \\"title\\": \\"Р"руппа\\", \\"id\\": 978},{\\"icon\\": \\"\\", \\"action\\": \\"openNewTask\\", \\"title\\": \\"Поручение\\", \\"id\\": 43350}, {\\"icon\\": \\"\\", \\"action\\": \\"openNewTask\\", \\"title\\": \\"Встреча\\", \\"id\\": 1507}\",]
"badgeItemColor": "",
"context": "",
"fallBackTitle": "",
"groups": "",
"icon": "FeedIcon",
"interactions": "{\\"longTap\\": {\\"action\\":\\"openMenu\\", \\"items\\": [{\\"title\\":\\"История\\", \\"action\\": \\"openTaskSource\\", \\"cellStyle\\": \\"default\\", \\"id\\": 67, \\"icon\\": \\"RecentTasks\\"}, {\\"title\\":\\"Р'се категории\\", \\"action\\": \\"openCategoryTree\\", \\"icon\\": \\"AllCategories\\"}\}}",]
"isDefault": "0",
"showTabMenuButton": null,
"topTitle": "Комментарии",
"id": "toolbaritem"
}
},
{
"data": {
"title": "Лента"
},
"action": "Dashboard",
"type": "Dashboard",
"isGroupFavourite": false,
"parentNodeId": null,
"id": "Dashboard",
"template": {
"addButton": null,
"badgeItemColor": "",
"context": "",
"fallBackTitle": "",
"groups": null,
"icon": "DashboardIcon",
"interactions": null,
"isDefault": "0",
"showTabMenuButton": null,
"topTitle": "",
"id": "toolbaritem"
}
},
{
"type": null,
"data": null,
"blocks": \ \... \,
"buttons": null,
"isGroupFavourite": false,
"parentNodeId": null,
"id": "TasksFeed",
"template": {
"addButton": "[{\\"icon\\": \\"\\", \\"action\\": \\"openNewTask\\", \\"title\\": \\"Задача\\"},{\\"icon\\": \\"\\", \\"action\\": \\"openNewTask\\", \\"title\\": \\"Чат\\", \\"id\\": 969},{\\"icon\\": \\"\\", \\"action\\": \\"openNewTask\\", \\"title\\": \\"Р"руппа\\", \\"id\\": 978},{\\"icon\\": \\"\\", \\"action\\": \\"openNewTask\\", \\"title\\": \\"Поручение\\", \\"id\\": 43350}, {\\"icon\\": \\"\\", \\"action\\": \\"openNewTask\\", \\"title\\": \\"Встреча\\", \\"id\\": 1507}\",]
"badgeItemColor": "\#FD8787",
"catId": "",
"cellStyle": "default",
"fallBackTitle": "",
"feedType": "",
"groups": "",
"headerBackgroundColor": "",
"heightMultiplier": "",
"icon": "TasksFeedIcon",
"interactions": "{\\"longTap\\": {\\"action\\":\\"openMenu\\", \\"items\\": [{\\"title\\":\\"История\\", \\"action\\": \\"openTaskSource\\", \\"id\\": 67, \\"icon\\": \\"RecentTasks\\"}, {\\"title\\":\\"Р'се категории\\", \\"action\\": \\"openCategoryTree\\", \\"icon\\": \\"AllCategories\\"}\}}",]
"searchType": "like",
"showCreateButton": "1",
"showSearchButton": "0",
"showTabMenuButton": "1",
"subcatId": "",
"tickerAlias": "overDueTasksCount",
"topTitle": "Задачи",
"viewMode": "default",
"widthRatio": "",
"id": "tasksFeed"
}
},
{
"data": {
"counter": 20,
"type": "Contacts",
"title": "Контакты"
},
"action": "Syndicate",
"type": "Syndicate",
"isGroupFavourite": false,
"parentNodeId": null,
"id": "Contacts",
"template": {
"addButton": null,
"badgeItemColor": "",
"context": "",
"fallBackTitle": "",
"groups": "",
"icon": "ContactsIcon",
"interactions": null,
"isDefault": "0",
"showTabMenuButton": null,
"topTitle": "Контакты",
"id": "toolbaritem"
}
}
\,]
"buttons": null,
"isGroupFavourite": false,
"parentNodeId": null,
"id": "Tabbar",
"template": {
"badgeItemColor": "\#496acc",
"containerBackgroundColor": "",
"itemColor": "\#404040",
"selectedItemColor": "\#555555",
"id": "toolbar"
}
}
\,]
"total": 1,
"aggregates": null
}
Создание контейнера¶
Чтобы создать новый контейнер, нажмите кнопку Создать. Откроется окно для добавления контейнера. Идентификатор контейнера (поле Id) должен начинаться с латинской буквы. Выберите шаблон, по которому будет создаваться контейнер.
ℹ️ Id контейнера не является его уникальным идентификатором. Напротив, для некоторых контейнеров Id должны быть строго определенными — например, для нижнего меню Id должен быть TabBar, для главного рабочего стола — Dashboard. И если для разных групп пользователей настроены разные контейнеры одного типа, они будут иметь одинаковые Id.
ℹ️ Все Id и названия контейнеров, шаблонов, полей и блоков являются регистрозависимыми: TabBar и tabBar — это разные Id.
Редактирование основных настроек контейнера¶
Для редактирования основных настроек контейнера кликните мышью по соответствующей строке. Откроется окно редактирования настроек.
Вы можете изменить название контейнера, выбрать другой шаблон, указать группы, которым доступен этот шаблон, изменить признак активности контейнера, назначить смарт-фильтр доступности контейнера.
После внесения данных нажмите кнопку Сохранить, чтобы применить изменения. Кнопка Отмена позволит вернуться в общему списку.
Доступность контейнеров¶
Доступность контейнера определяется принадлежностью пользователя к группе и результатом, который возвращает смарт-фильтр доступности.
Для настройки доступа нажмите на кнопку Группы в таблице напротив соответствующей строки или на форме редактирования контейнера.
Нажмите кнопку Создать и в открывшемся окне выберите группу пользователей, для которой будет доступен текущий контейнер. Для каждой группы необходимо создать отдельную запись.
Если в системе настроены несколько контейнеров с одинаковым Id (например, несколько рабочих столов — контейнеров Dashboard), то для пользователя будет отображаться контейнер, соответствующий следующим условиям:
-
контейнер с наименьшим значением в колонке Порядок, для которого на странице Группы указана группа, в которую входит пользователь, а если задан смарт-фильтр, то он возвращает true;
-
если ни для одной группы пользователя контейнер не назначен, то выбирается контейнер с наименьшим значением в колонке Порядок, для которого на странице Группы не указано ничего, а если задан смарт-фильтр, то он возвращает true;
-
если и такого контейнера нет, то будет отображаться произвольный контейнер с таким Id.
ℹ️ Чтобы избежать случая, когда пользователю отображается произвольный контейнер, рекомендуется настраивать контейнер по умолчанию — такой, где на странице Группы не указано ничего, и у нее должен быть наименьший порядковый номер среди всех одинаковых Id.
Для рабочих столов (Dashboard) можно управлять не только доступностью всего контейнера, но и доступностью отдельных блоков на нем.
Создание копии контейнера¶
Для копирования контейнера нажмите на кнопку Создать копию в таблице напротив соответствующей строки или на форме редактирования контейнера. После нажатия на кнопку в таблице создается полный дубль текущего контейнера.
Удаление контейнера¶
Для удаления контейнера нажмите кнопку Удалить на форме или выберите соответствующий пункт в контекстном меню строки.
Редактор¶
Для редактирования содержимого контейнера нажмите на кнопку Редактор в таблице напротив соответствующей строки или на форме редактирования контейнера. Откроется окно редактирования контента:
По кнопке добавления раскрывается список доступных для добавления типов блоков.
Блок представляет собой базовую единицу пользовательского интерфейса. В зависимости от выбранного шаблона, блок представляет собой кнопку в нижнем меню, пункт в боковом меню или плитку на рабочем столе.
Блоки в дереве контейнера можно перетаскивать мышкой по вертикали, изменяя их порядок. Также доступно добавление блока в папку или извлечение его из папки прямым перетаскиванием в структуре дерева.
Если ID блока не оговорен специально (в таблице ниже), он может быть произвольным.
| Тип блока | Описание | Возможные значения ID блока |
| --- | --- | --- |
| Папка | Используется для создания иерархии вложенных элементов | Stack (для шаблона dashboardStack — списка дашбордов). В дереве имеем объект Палитры "Папка", для папки приходит пустой type. Для наглядности в id пишут Folder, но лучше смотреть на пустой type. Id у плиток не является уникальным |
| Синдикат | Блок указывает на набор каких-либо данных. Применяется для элементов Лента, Задачи, Заголовок, Категория, Звонки, Контакты, Вопросы, Комментарии, Подписи, Отчеты, Группа Пользователей, Рубрика. Для этих типов блоков приложение "Первая Форма" присылает необходимые данные — значение счётчика, заголовки, ID сущностей и т.д. | Calls — звонки и история звонков; Chats — список чатов; Contacts — список контактов; CustomTaskSource — содержимое публикации; Feed — лента (вопросы, комментарии и т.д.); DemoSpeech — голосовая постановка задачи (временно используемый ключ); TasksFeed — лента задач (новые, просроченные, личные и т.д.); MyQuestions — мои вопросы; QuestionsToMe — вопросы мне; OwnTasks — личные задачи; OverdueTasks — просроченные задачи; ToSign — на подписи; Reports — отчеты; UserProfile — профиль текущего пользователя (работает корректно как блок рабочего стола); TaskSourceNNN — задачи из источника данных, где NNN — ID источника данных задач; SubcatNNN — задачи из категории, где NNN — ID категории; SubcatAll — задачи из всех категорий; separator — заголовок, который служит логическим и визуальным разделителем между элементами контейнера; MyQuestionsAndAnswers — исходящие вопросы и ответы на них; QuestionToMeAndAnswers — входящие вопросы и ответы на них |
| Настройки | Используется в левом главном меню | Settings |
| Задача | Блок содержит данные задачи — полный текст и номер задачи | TaskNNN, где NNN — номер задачи |
| Контакт | Блок содержит данные пользователя (ФИО, ID контакта в "Первой Форме" и открытые доп. поля профиля) | UserNNN, где NNN — ID пользователя (работает корректно как элемент бокового меню) |
| Ссылка | Блок содержит ссылку относительно веб-адреса "Первой Формы" или на внешний ресурс | — |
| Форма новой задачи | По клику на блок открывается форма постановки новой задачи | NewTaskNNN, где NNN — ID категории, в которой нужно поставить задачу |
| Кнопки из рабочих мест групп (Устаревшее, не используется) | — | — |
| Дашборд | По клику на блок открывается дополнительный рабочий стол | Id контейнера с шаблоном dashboard |
| Группа пользователей | Блок, содержащий в данных данные всех пользователей, входящих в группу. Используется на рабочем столе для отображения плиток с контактами | UserGroupNNN, где NNN — ID группы |
| Отчет | Аналогично ссылке Link, но используется для web-версий отчетов | — |
ℹ️ Для указания корректного типа блока при настройке контейнера в режиме администрирования важно выбрать верный элемент в палитре
Если элемент выбран некорректно, то приложение может вести себя неправильно (например не будет отображать данные или совершать действие по нажатию на блок).
Элементы палитры Избранное и Избранное РМГ являются наборами блоков, отражающих ссылки в блоке Избранное конкретного пользователя и его рабочие места. Их можно добавлять в контейнеры, поддерживающие полноценную древовидную структуру, то есть только в контейнеры с шаблоном menu. Параметры шаблона не влияют на эти блоки.
Нажатие на элемент в списке откроет блок с его настройками и ключами.
Нажатие на кнопку копирования создает копию блока. Копия появится под исходным блоком.
В правой части редактора отображается макет контейнера. Перейти к настройкам конкретного элемента контейнера можно не только из дерева, но и прямо из макета. Для этого вызовите контекстное меню кликом правой кнопкой мыши на элементе и нажмите на кнопку Настройки.
Структура настроенных блоков¶
В структуре блока есть ключ data, они в общем случае имеют вид типа
{
"data": {
"tasksCounters": {
"allTasksCount": null,
"newTasksCount": 0,
"overdueTasksCount": 0,
"allTasksUserOwns": 2,
"allTasksUserPerforms": 0
},
"rules": {\...},
"templates": [\...\,]
"tasks": [\...\,]
"fullTasks": [\...\,]
"canCreate": true,
"id": 6581,
"counter": 0,
"type": "Subcategory",
"title": "Динамический шаблон"
}
Counter определяется логикой сервера в зависимости от конфигурации блока контейнера. Это может быть кол-во задач, вопросов, подписей и т д. Ненулевое значение сounter отображается в виде счетчика в плитке.
Если в шаблоне блока приходит hideOnZeroCount = 1 и при этом counter = 0/null, то такой блок игнорируется и не показывается.
Groups¶
В плитках может приходить не пустой массив id групп для параметра groups. Если он непустой, то МП определяет пересечение групп текущего сессионного пользователя и массива groups. Если пересечение пустое, то такие элементы не отображаются на экране.
Фильтрация по группам может быть и на уровне стека (он целиком для группы задан). Внутри для остальных элементов папки также происходят дополнительные фильтрации и скрытия.
Настройка кнопок в верхней панели (rightBarButton)¶
В настройках дашборда есть ключ rightBarButtons — это json строка, содержащая массив объектов onTap. Данный элемент настраивается в настройках главного контейнера. Пример:
[
{
"action": "openCallHistory", "icon": "RecentTasks"
},
{
"action": "openTaskSource",
"dataSourceUrl": "/app/v1.2/api/publications/action/mob-notifications",
"icon": "Notification",
"tickerAlias":"badge"
}
]
Основные action для настройки rightBarButton в контейнере:
-
openCalendar
-
openCallHistory
-
openVideoConferenceRoom
Действие openCallHistory — открытие истории звонков ВКС. Показывает все звонки ВКС текущего пользователя за последнее время.
Элемент описания tickerAlias — это название системного счетчика, либо номер кастомного. С помощью данного ключа прикрепляется произвольный счетчик для отображения.
Экран История звонков¶
Данный экран возможно настроить в контейнере, как на примере выше. Пример текста JSON в параметре rightBarButton для настройки:
{
"action": "openCallHistory",
"icon": "RecentTasks",
"tickerAlias":"missedCalls",
"tickerColor": "E05040"}
}
Действие openCallHistory — открытие истории звонков ВКС. Показывает все звонки ВКС текущего пользователя за последнее время.
При открытии данного экрана через иконку пользователю отображается статичный экран со списком звонков и их итоговым статусом.
В данном списке фиксированно отображаются ближайшие 100 звонков. Туда входят входящие/исходящие звонки, входы в свою/чужие комнаты ВКС, входы/приемы вызовов ВКС с комнат задач.
При нажатии на пункт инициализируется переход в соответствующую ВКС комнату.
При долгом нажатии появляется модальное окно с пунктами, конкретно под каждый тип вызова (пользователь, комната с задачи).
Описание настроек контейнеров в прежнем интерфейсе администрирования