Show/Hide Toolbars

Руководство администратора

Настройка динамического шаблона

Ссылки Назад Вверх Вперед

В системе можно настраивать три вида шаблонов для каждой категории:

NTF — вызывается при создании новой задачи (NTF — сокращение от New Task Form),

MTF - вызывается при просмотре задачи (MTF — сокращение от Main Task Form),

Cell — используется для краткого отображения задачи в списке задач (cell — это ячейка).

mob_template_new_n

Карточка новой задачи.

mob_template_task_n

Карточка задачи.

mob_template_list_n

Список задач.

Эти шаблоны назначаются в настройках категории, на вкладке Вид, по кнопке Шаблонизация. Для редактирования динамического шаблона можно использовать JSON-редактор.

Каждый вид шаблона имеет свои особенности — в нем могут быть допустимы или недопустимы отдельные ключи и настройки.

warning_icon   При отрисовке cell шаблона в случае owner, performers, ДП выбор пользователя перед заголовком элемента и именем пользователя рисуется аватар размером height, то есть высота элемента сразу же идет по высоте аватара. Если height не указан, то по умолчанию для таких элементов height 32.

Структура шаблона

В базовом варианте динамический шаблон задачи — это JSON трехуровневой структуры: sections -> blocks -> elements. Также может присутствовать необязательный раздел настроек settings, как для всего шаблона, так и для отдельных элементов.

{
   "sections": [
       {
           "name": "...",
           "blocks": [
               {
                   "name": "...",
                   "isExpandable": false,
                   "defaultIsExpanded": true,
                   "footer": "",
                   "header": "",
                   "elements": [
                       {
                           "name": "...",
                           "type": "...",
                           "dataKey": "...",
                           "viewMode": "...",

                           "settings": {...}  
                       },
                         ...

                   ]
               }
           ]
       },

    ...

   ],

   "settings": {...}
}

В шаблоне MTF раздел Sections соответствует вертикальным вкладкам (секциям), раздел blocks — горизонтальным блокам, раздел elements - элементам. В настоящее время блок в секции может быть только один.

mobile_template_ex_n

Структура шаблона задачи.

Если шаблон NTF включает несколько секций, то они будут отображаться пользователю не одновременно в виде вкладок, а последовательно в виде отдельных экранов, имитируя пошаговое создание задачи. На каждом таком экране будет отображаться кнопка Далее, на последнем экране — кнопка Готово.

mob_template_ntf_steps

Последовательный ввод — секции в карточке новой задачи.

Секции (sections)

Шаблон содержит одну или несколько секций.

Каждая секция (из массива sections) содержит ключи:

Ключ

Описание

name

имя

blocks

массив блоков в секции. В настоящее время внутри секции лучше использовать только один блок (функционал дорабатывается)

Пример шаблона с двумя секциями:

{
   "sections": [
     {
          "name": "Вкладка 1",
          "blocks": []
     },
     {
          "name": "Вкладка 2",
          "blocks": []
     }
   ]
}

Блоки (blocks)

warning_icon   В настоящее время деление на горизонтальные блоки не поддерживается, поэтому в каждой вкладке (section) должен быть только один блок (block).

Каждый блок (из массива blocks) может содержать содержит ключи:

Ключ

Описание

name

имя

isExpandable

признак, может ли блок скрываться/раскрываться. В настоящее время скрытие блоков не реализовано

defaultIsExpanded

признак скрытия/раскрытия блока при загрузке карточки. В настоящее время скрытие блоков не реализовано

elements

массив элементов в блоке

Пример массива блоков:

"blocks": [
            {
               "name": "Название блока",
               "isExpandable": false,
               "defaultIsExpanded": true,
               "footer": "",
               "header": "",
               "elements": [...]
            }
         ]

Элементы (elements)

Каждый элемент (из массива elements) может содержать ключи:

Ключ

Описание

name

имя

type

тип элемента. Возможны значения:

mainParam

для основных параметров

extparam

для ДП

dataKey

Для ДП ("type":"extparam") в dataKey указывается ID ДП.

Для основных параметров задачи ("type":"mainParam") dataKey может принимать следующие значения:

category

категория

taskNum, taskId

номер задачи

taskText

текст задачи

owner

заказчик

createdDate

дата создания

orderedDate

срок

state

статус

priority

приоритет

performers

исполнители

buttons

кнопки переходов

usedTasks

блок "Используется"

defaultValue

значение по умолчанию. Например:

"defaultValue":33

Для ДП Lookup задается JSON:

"defaultValue": {"taskId": 123456, "taskText": "Компания Ромашка"}

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

viewMode

тип отображения. Возможные значения:

normal

для элементов, занимающих часть блока

valueOnly

если элемент занимает часть блока и отображается только значение элемента, а название не отображается (например, в шаблоне карточки задачи так часто отображается текст задачи)

full

для элементов, занимающих весь блок и всю вкладку (например, лента комментариев)

title

для заголовка

warning_icon   Используется только в шаблонах для краткого отображения и для одного поля, которое должно отображаться как заголовок ячейки. Для этого поля не нужен ключ name

compact

заголовок рядом с ним значение

none

не показывать

imagePreview

картинки в виде карусели

checklist

чеклист

stars

звезды оценки (0-5)

button

для cell, статус в виде кнопки

viewMode


icon

название значка

warning_icon   Используется только для Android

placeholder

строка с пояснением, которое отображается при пустом значении ячейки

readOnly

true \ false

ячейка доступна только для чтения

alias

возможные значения:

image

leftimage

rightimage

title

subtitle

placeholder

плейсхолдер в поле ДП

hint

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

text

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

isPushOpenDefault

 


isDefault

 


Пример настроенного шаблона с элементами:

[

 {
      "name": "Договор",
      "type": "mainParam",
      "dataKey": "taskText",
      "viewMode": "normal"
 },

 {
      "name": "От",
      "type": "mainParam",
      "dataKey": "owner",
      "viewMode": "normal"
 },

 {
      "name": "Участники встречи",
      "type": "exparam",
      "dataKey": "182",
      "viewMode": "normal"
 }

]

warning_icon   Если в шаблоне для основного или дополнительного параметра задано название (name), то в мобильном приложении в карточке задачи будет отображаться название из шаблона. Если в шаблоне названия нет, то будет отображаться обычное название основного параметра или название ДП — так, как оно задано для ДП в данной категории или в настройках ДП.

Настройки (settings)

Настройки можно описать с помощью раздела settings. Общие настройки для всего шаблона должны идти перед или после раздела sections. Собственные настройки могут быть у каждого элемента.

Значения settings по умолчанию:

fontSize — 17px

textColor — grey

titleSize — 17px

titleColor — black

titleFontWeight — regular

textItalic — false

bgColor — пусто

align — left

В разделе settings могут настраиваться следующие ключи:

Ключ

Описание

Вид шаблона

Общие настройки

afterTaskCreationBehaviour

Поведение после создания задачи.

closeTask - сразу после создания карточка задачи будет закрыта

только для шаблона NTF

alwaysShowTabMenu

true / false. Отображение меню вкладок шаблона. Если true - меню вкладок отображается

только для шаблона MTF

avatar

Название значка


fontSize

Размер шрифта значений полей (px)


groupUsedBlockTables

true / false. Отображение нескольких блоков "Используется" на одной вкладке (true) или на отдельных (false)

только для шаблона MTF

onTap

Действие, которое выполняется по нажатию на ячейку в списке задач (см. ниже)

только для шаблона Cell

options

Список действий (см. ниже)

только для шаблона MTF

showSignatures

true / false. Отображение вкладки "Подписи" в карточке задачи. Вкладка отображается только если есть запрошенные подписи

только для шаблона MTF

subscribersReadOnly

true / false. Признак доступа на редактирование списка подписчиков задачи

только для шаблона MTF

title

Заголовок. Возможные ключи:

viewMode  — режим просмотра. Возможные значения: channel — канал, chat — чат. Например:

"title": {
  "viewMode": "chat"
}

пара ключей type и dataKey.
Например, так в заголовке будет выводиться текст задачи:

"title": {
  "type": "mainParam",
  "dataKey": "taskText"
}

warning_icon   Для приложения iOS в заголовке может быть только текст или дата


titleSize

Размер шрифта заголовков полей (px)


usedBlockTables

JSON со списком настроек блоков "Используется", см. пример

только для шаблона MTF

Настройки элемента (ячейки)

align

left / right / center. Выравнивание текста.


allowCommentToAll

true / false. Только для элемента comments.

Разрешено отправлять комментарии без адресатов, т.е. всем подписчикам задачи

только для шаблона MTF

commentTypes

Типы комментариев, которые будут отображаться в ленте. Только для элемента comments.

Передается в виде массива, например:

"commentTypes": [3,15]

только для шаблона MTF

forbidOfflineChange

Ячейка блокируется от нажатия при отсутствии подключения к интернету. В настоящее время работает только для ячейки buttons


forbidOpen

true / false. Блокирование ячейки для открытия. При просмотре списка задач нельзя перейти в карточку задачи

только для шаблона Cell

hideInfoButton

true / false. Признак, скрывать ли значок i рядом с ячейкой для ДП Lookup.


hideSubscribers

true / false. Только для элемента comments.

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

только для шаблона MTF

prefix

Текст, который будет отображаться перед значением элемента

только для шаблона Cell

shortListCount

Количество отображаемых элементов списка. Если элементов больше, они по умолчанию скрываются в спойлер "Показать все".

Может использоваться для блока "Вложения"

только для шаблона MTF

showTaskFilter

true / false.


states

Только для элемента state.

Описывает варианты отображения статусов.

{
 "id_статуса": {
    "bgcolor": "цвет_фона_статуса",
    "textColor": "цвет_текста_статуса"
  },
  ...
}

warning_icon   Цвет фона bgcolor используется только в приложении для iOS

только для шаблона Cell

textColor

Цвет текста в формате hex


viewMode

flat - обычный вид ячеек. Если не указать, то будут ячейки с округлыми границами без разделителей


Список действий (options)

В шаблоне для задачи доступно меню со списком доступных действий. Это меню настраивается с помощью подраздела options в разделе settings. Если такого подраздела в шаблоне нет, будут доступны все возможные действия (т.е. с помощью options список доступных действий можно сократить, но не расширить).

Пример настройки подраздела options:

 "settings": {

         ...        

         "options": {
                 "createSubtask": true,
                 "createLinkedTask": true,
                 "createNewTask": true,
                 "changeTaskText": true,
         }

         ...

 }

Возможные действия:

Ключ

Описание

createLinkedTask

Создать связанную задачу

createNewTask

Создать новую задачу

createSubtask

Создать подзадачу

changeTaskText

Изменить текст задачи

favorites

Добавить в Избранное / Удалить из Избранного

mute

Переключить признак "бесшумного" режима (без звуковых уведомлений)

openDefaultTask

Открыть задачу по умолчанию

pin

Закрепить задачу в списке чатов /Открепить задачу из списка чатов

shareToChat

Поделиться в чате

Настройка нажатия на задачу в представлении списке (onTap)

В шаблоне списка задач можно настроить действие, которое будет выполняться по нажатию на представление задачи вместо стандартного открытия карточки MTF. Действие настраивается через объект onTap в разделе settings шаблона.

Возможные действия:

Ключ

Возможные значения

Описание

id

234


action

openTask

открыть карточку задачи (по умолчанию)

openUsedBlock

открыть список задач блока "Используется", настроенного в категории

forbidOpen

запрет перехода куда-либо при нажатии на ячейку задачи

openSignatures

открытие экрана с подписями

openCommentsFeed

открытие ленты комментариев (без меню типов лент сверху)

openNewTask

открытие формы новой задачи категории

openTaskSource

открытие task source задач

openSubcategory

открытие категории

openTaskFeed

открытие ленты задач указанного типа

openUserProfile

открытие профился пользователя

showAlert

показ алерта

openLink

открытие ссылки

openCallHistory

открытие истории звонков ВКС

openVideoConferenceRoom

открытие видеоконференции ВКС

openCalendar

открытие календаря встреч

context

"cat+text"

открыть определенный контекст объект из его шаблона

epId

2345

ДП в задаче для данной ячейки, из которого берется информация для обработки

Например, если указан openTaskSource, но не указан его id, то id будет браться из ДП с epId.

Если указан openTask, но нет id, то будет браться из ДП с epId номер задачи для открытия. Если указан openLink, то берётся ДП с epId ссылку для открытия и т.д.

dataSourceUrl

"/app/v1.2/api/publications/action/mob-rest-basket"

ссылка на кастомный task source (на публикацию, отдающую ленту задач)

type

Типы ленты задач:

"All"

"New"

"Created"

"Discussions"

"Owner"

"Performer"

"Favorites"

"Overdue"

"LastCommented"

"PinnedToChat" — лента всех запиленных переписок (главный список в чатах)

"PrivateChat" — лента личных чатов

"GroupChat" — лента групповых чатов

Типы ленты комментариев:

"All"

"IsUnread"

"AddressedToMe"

"MyQuestions"

"QuestionsToMe"

"Favorites"

тип ленты задач или комментариев

Пример настройки подраздела onTap - по нажатию на задачу открывается не карточка задачи, а блок "Используется". Такая настройка позволяет реализовать многоуровневый каталог.

{
  "settings": {
      "viewMode": "flat",
      "showTaskFilter": false,
      "onTap": {
          "action": "openUsedBlock",
          "id": 111
      }
  }

}

где 111 — это ID таблицы в блоке "Используется".

Настройка меню действий через addButton

addButton — это список (массив) объектов onTap действий для создания задачи (openNewTask). Иными словами, с помощью addButton можно задать способы создания задачи, а именно в какие категории можно их поставить.

Данный параметр возможно настроить как в шаблоне cell категории, так и в элементе контейнера (например, toolbar’а).

Пример настройки в cell шаблоне:

"addButton": [

 {

         "action": "openNewTask",

         "id": 3020,

         "context": "cat+text"

 }

]

warning_icon   Как видно выше на примере, при настройке важен только action openNewTask и id с указанием номера категории, куда будет ставиться задач

Настройка кнопок rightBarButton

rightBarButton — json строка onTap действий для настройки кнопок в верхней панели. Может быть настроен как в дин.шаблоне категории, так и в контейнерах.

В шаблоне МТФ настроенный rbb будет действовать на весь МТФ, на все вкладки формы. То есть, если в БИ настроен rbb, то он не будет отображаться, только rbb МТФ.

rightBarButton

Пример кнопки rightBarButton

Пример настройки в шаблоне:

"rightBarButtons":[

 {"action":"openTaskSource",

  "icon":"Basket",

  "dataSourceUrl":"/app/v1.2/api/publications/action/mob-rest-basket"}

]

Настройка Cell шаблонов

hmtoggle_arrow0        Ячейки задач с галереей фото

Шаблон многостраничного НТФ

В динамическом шаблоне может быть заполнено несколько секций для шаблона НТФ. В данном случае в МП будет открываться форма с несколькими страницами с указанными параметрами (см примеры ниже).

Для каждой секции (страницы) настройка и отображение остаются такими же, как и при настройке шаблона с одной секцией.

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

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

hmtoggle_arrow0        Пример динамического шаблона с несколькими секциями

example_dyn_template_with_multiple_sections

Пример реализации

Агрегированные представления

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

Логика формирования

templateClass — это перечень фиксированных шаблонов

warning_icon   Фиксированные шаблоны templateClass похожи на старые статические шаблоны, где они готовятся в коде и далее наполняются данными по alias и шаблонам

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

В настоящее время приложения поддерживает представления — **календарь** (агрегирует задачи на дату), **карта** (агрегирует объекты по координатам в кластере) и **payment**.

Для них перед секциями добавляются еще два раздела: **templateClass** и **aggregate**.

Раздел **templateClass** задает тип представления — **calendar, map, payment**.

Раздел **aggregate** описывает параметр, по которому агрегируются данные (например, ДП), причем только ключи **type** и **dataKey** (без **name** и **viewMode**).

 

**aggregate** содержит element, который кратно описывает ДП или основной параметр для группировки

Пример шаблона с агрегацией:

"settings": {

      "templateClass": "calendar",

      "aggregate": {

          "element": {

              "type": "extparam",

              "dataKey": 1321

          },

          "userFilter": {

              "type": "mainParam",

              "dataKey": "owner"

          }

      }

  }

Так в примере задается агрегация по ДП 1321 (обычно это ДП типа дата/время, но может быть любой ДП, так как идет простое сравнение значений)

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

"type": "mainParam",

"dataKey": "dueDate"

То есть здесь используются урезанные версии элементов шаблона.

Сама агрегация делается локально на клиенте. Запрошенные за период видимых на экране дат события раскладываются по датам. При выборе даты показываются релевантные.

В фильтр-запросе фидов используется параметр aggregate для задания ограничения дат на текущий месяц. Если, например, это дата создания задачи, то мы запросим с сервера все задачи с датой начала между датами+время, которые видны на текущем экране в календаре.

**userFilter** (тоже используется элемент шаблона) задает фильтрацию отдачи по юзеру и означает, что при запросе задач в апи будет включаться фильтр "я заказчик"

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

"type": "mainParam", 

"dataKey": "subscribers"

 

"type": "mainParam",

"dataKey": "performers"

hmtoggle_arrow0        Payment представление

hmtoggle_arrow0        Календарное представление

Полезные ссылки