Методы для работы с ДП и основными параметрами задачи
В карточке задачи вся бизнес-логика (проверка значений на корректность и т.п.) срабатывает при вызове метода save().
Вставки для работы с ДП оформляются следующим образом:
Без использования jQuery |
С использованием jQuery |
---|---|
в карточке задачи: window.addEventListener('MTFMainLoadFinished', function() { JS-вставка}) |
в карточке задачи: $window.on('MTFMainLoadFinished', function() { JS-вставка }); |
в карточке новой задачи: window.addEventListener('NewTaskLoadFinished', function() { JS-вставка }) |
в карточке новой задачи: $window.on('NewTaskLoadFinished', function() { JS-вставка }); |
При переходе на новый МТФ для работы с карточкой задачи с использованием JS-вставки обязательно должно быть использовано событие MTFMainDestroyed. Для карточки создания новой задачи (НТФ) должно быть использовано событие 'NewTaskLoadFinished'. Подробнее |
---|
В карточке новой задачи методы save() и update() недоступны, т.к. задача еще не существует (нет соответствующей записи в БД). |
---|
Если в JS-вставке для карточки задачи или для карточки создания новой задачи привязано событие change(), то callback-функция срабатывает на следующие пользовательские действия:
•установка значения через кнопку выбора;
•установка автодополнением (когда пользователь набирает в окне ввода часть значения и затем выбирает нужную запись из выпадающего списка, который автоматически предлагает ему система);
•установка через .val("abc"), когда значение назначается в самой JS-вставке;
•удаление значения с помощью значка удаления;
•вызов ep.change().
Обращение к основным параметрам
В JS вставках в карточке задачи можно обращаться к номеру задачи — taskId, и статусу задачи — StateID.
ID пользователя, от имени которого ведется работа, доступно в SessionUserID.
Названия основных параметров регистрозависимые. |
---|
Методы для работы с ДП
Метод |
Что делает |
||
---|---|---|---|
var ep = new ExtParam(1234) |
Получает JS-объект для управления ДП с ID=1234 (обращения к jQuery или к DOM на данном этапе еще не производится, объект находится на стадии формирования) |
||
ep.get() |
Возвращает jQ-объект, содержащий ДП |
||
ep.label() |
Возвращает jQ-объект подписи |
||
ep.label().html() |
Возвращает текст подписи |
||
ep.label("text") |
Меняет текст подписи к ДП и возвращает jQ-объект |
||
ep.show() |
Показывает ДП и подпись и возвращает объект управления |
||
ep.hide() |
Скрывает ДП и подпись, а также и возвращает объект управления |
||
ep.val() |
Получает значение ДП |
||
ep.textVal(); |
Получает значение ДП в текстовом виде |
||
ep.val(param) |
Устанавливает значение ДП, вызывает событие change |
||
ep.getAvailableValues(handler) |
Получает список возможных значений ДП Lookup и Multilookup. handler — метод, принимающий массив элементов типа { text, value }, где text — список текстов задач, а value — список ID задач (см. пример использования) |
||
ep.change() |
Запускает обработчик change() для ДП.
|
||
ep.change(handler) |
Подписывает на изменение ДП |
||
ep.change(null) |
Отписывает все обработчики на изменение ДП |
||
ep.save() |
Сохраняет изменения ДП на сервере |
||
ep.save(handler) |
Подписывает на сохранение ДП |
||
ep.save(null) |
Отписывает все обработчики на сохранение ДП |
||
ep.update() |
Обновляет ДП с сервера |
||
ep.update(handler) |
Подписывает на обновление ДП с сервера |
||
ep.update(null) |
Отписывает все обработчики на обновление ДП с сервера |
||
(new ExtParam(1234)).val("123").save(handler).save().hide() |
Если логика не предусматривает иного, то повторно возвращает объект управления ДП |
||
SaveEPsWithIDs([1234, 1235]) |
Сохраняет все ДП по массиву индексов. Срабатывают триггеры на save() для каждого из ДП |
||
ep.isHidden() |
Принимает значение "true", если ДП нет на форме или он скрыт настройками категории |
||
ep.freeze() |
Делает ДП доступным только на чтение (принимает на вход значения "true" или "false") |
||
ep.adaptDesign() |
Устаревшее, не работает, начиная с версии 2.256 При установке значения "true" при скрытии/показе ДП верстка будет адаптироваться автоматически. Чтобы корректно скрыть элемент на форме, не оставляя пустого пространства, в новых версиях рекомендуется использовать свойство display в значении 'none'. Пример: .quarySelector('vh-ext-param-control-wrapper[ep-wrapper-id="ХХХ"]').style.display = 'none' где ХХХ — ID ДП |
Для версий ниже 2.256 требуется учесть собенности работы со сквозными ДП: ДП типа "Сквозной" создается методом new ExtParam(ID сквозного ДП). ID сквозного ДП формируется как строковое соединение ID текущего ДП и ID финального ДП. Например, если в категории есть сквозной ДП с ID=5555, который смотрит на ДП в другой категории с ID=9999, то для сквозного ДП ID будет равным 55559999. Если такой ДП уже существует в задаче, обертка сработает некорректно. |
---|
Таблица совместимости методов и типов ДП в карточке задачи
Методы, не указанные в таблице совместимости, работают для всех ДП.
Тип ДП |
ep.val(); |
ep.val("text"); |
ep.save(); |
ep.update(); |
---|---|---|---|---|
Флажок (checkbox) |
("да"/"on"/true/1) |
|||
Дата |
||||
Дата и время |
||||
Файл |
||||
Lookup |
(ID задачи) |
(ID задачи) |
||
Деньги |
||||
Выбор нескольких задач из категории (multilookup) |
(JSON массив ID задач) |
(JSON массив ID задач) |
||
Нумератор |
||||
Число |
||||
Выпадающий список |
||||
Выбор нескольких задач из категории |
(ID задачи) |
(ID задачи) |
||
Выбор пользователей |
(JSON массив) |
|||
Таблица |
(html таблица) |
|||
Текст |
(без шаблона номера телефона) |
|||
Большой текст с форматированием |
||||
Большой текст без форматирования |
||||
Сквозной |
||||
Дерево |
||||
URL |
Объекты и методы для нового ДП "Таблица"
Таблица
object EpTable: {
savedRowsCount: numeric,
filteredRows: [ object Row ],
multiWindow: object MultiWindow
}
Строка таблицы
object Row: {
cells: [ object Cells ],
id: number
}
Ячейка таблицы
object Cell: {
columnId: numeric,
columnValue: mixed,
tooltip: function
}
Строки с учетом условий фильтра и пейджинга
filteredRows — строки, отобранные с учетом заданных условий фильтра (если фильтр включен), а также с учетом пейджинга (т.е. только на текущей странице, если пейджинг включен).
Множественный выбор
object MultiWindow: {
filteredRows: [ object Row ]
}
Методы
Для таблицы:
•onTableLoaded — загрузка/перезагрузка страницы, переключение страниц таблицы.
•onTableRowAdded — добавление строки (передается объект строки).
•onTableRowChanged — изменение значения ячейки.
•onTableSaved — сохранение таблицы.
Для таблицы в режиме множественного выбора:
•onTableMWLoaded — загрузка/перезагрузка страницы, переключение страниц таблицы.
•onTableMWRowSelected — выбор строки (передается объект строки).
•onTableMWRowChanged — изменение значения ячейки.
•onTableMWClosed — закрытие окна множественного выбора.
Для ячейки:
•tooltip() — подсказка, всплывающая при наведении мыши на ячейку.
Методы обновления ДП "Таблица" вызываются после отработки метода обновления карточки задачи (MTFMainLoadFinished). |
---|
Методы для работы с пользователями
Изменение значения ДП
Для полной замены текущего значения ДП "Выбор пользователей" на новое значение в функцию ep.val() нужно передать JSON такого вида:
{"Users":[], "Groups":[], "OrgUnits":[]}
Например:
var ep123 = new ExtParam(123);
ep123.val('{"Users":[55,66], "Groups":[77], "OrgUnits":[]}');
ep123.save();
где 123 — ID ДП "Выбор пользователей".
Контроль изменений
При работе с ДП "Выбор пользователей" функция ep.val() возвращает JSON такого вида:
{"Users":{"Deleted":[],"Added":[],"Selected":[]},"Groups":{"Deleted":[],"Added":[],"Selected":[]},"OrgUnits":{"Deleted":[],"Added":[],"Selected":[]}}
Например:
// изменить
var ep123 = new ExtParam(123);
ep123.val('{"Users":[55,66], "Groups":[77], "OrgUnits":[]}');
ep123.save();
// посмотреть результат
console.log(ep123.val());
// получить ID пользователя, выбранного в ДП
var ep123 = new ExtParam(123);
obj = JSON.parse(ep123.val());
var userid = obj.Users.Selected[0];
где 123 — ID ДП "Выбор пользователей".
Текущий (сессионный) пользователь
Функция window.getSessionUserInfo() возвращает promise с ID текущего пользователя (userId), массив его групп (groups) и признак, является ли он администратором (isAdmin).
Например, чтобы получить ID текущего пользователя, можно использовать выражение вида
getSessionUserInfo().responseJSON.data.userId
Методы для работы с кнопками перехода
Метод |
Что делает |
---|---|
var step = new TaskStepAPI(1234) |
Получает JS-объект для управления кнопкой перехода (в случае отсутствия кнопки перехода в JS консоль пишется соответствующее уведомление) |
step.hide() |
Скрывает кнопу |
step.show() |
Отображает кнопку |
step.click() |
Эмулирует клик по кнопке с выполнением всех обработчиков |
step.click(handler) |
Подписывает обработчик на клик |
step.click(null) |
Отписывает все обработчики по клику (за исключением стандартного) |
step.makeStep() |
Выполняет стандартное действие по клику |
step.cancelDefaultAction() |
Снимает стандартный обработчик с события клика по кнопке перехода |
step.restoreDefaultAction() |
Восстанавливает стандартный обработчик на событии клика по кнопке перехода |
Методы для работы с порталами и виджетами
Для порталов flex
Подписка на событие загрузки виджета с ID = 123 оформляется следующим образом:
(window.firstForma.portal.block(123)).onLoaded(function(event){ });
В функцию подписки будет передан объект event, который содержит поля portal и block.
Объект portal относится к порталу в целом и имеет два свойства:
•id (число) — идентификатор портала,
•title (строка) — название портала.
Методы для портала не реализованы.
Объект block относится к виджетам на портале и имеет два свойства:
•id (число) — идентификатор виджета,
•title (строка) — название виджета.
Для порталов dashboard
Подписка на событие загрузки виджета с ID = 123 оформляется следующим образом:
(window.firstForma.portal.block(123)).onLoaded(function(event){ });
В функцию подписки будет передан объект event, который содержит объект data.
Получить идентификатор блока можно через event.data.blockId.
Информация о пользователе
Данные о пользователе могут потребоваться для контроля прав доступа и персонализации информации, выводимой в виджетах.
Получить данные пользователя, который просматривает портал, можно с помощью функции getSessionUserInfo(). Функция возвращает ответ вызова метода /api/auth/info (Valhalla API версии 2.0).
В JS-вставках можно использовать переменную UserID, которая содержит ID пользователя.
Методы для виджетов
Метод |
Что делает |
|
---|---|---|
refresh() |
Обновляет виджет. Пример: let widget = firstForma.portal.block(123); ... widget.refresh(); |
|
Для виджетов Smart Html |
||
spaCommand(command, data) |
Выполняет команду, переданную в параметре command. Возможные команды: |
|
openInContentArea — открыть модальное окно |
В data передаются значения для content и context. content должен быть html-элементом. Если content это 'iframe', то в context должен передаваться объект с полем url. const ref = spaCommand('openInContentArea', { content: 'iframe', context: { url: 'spa/user/profile/99' } }); |
|
openNewsInContentArea — открыть карточку просмотра новости |
В data передается taskid. Пример: const ref = spaCommand('openNewsInContentArea', { taskId: 123456 }); ... |
|
Для виджетов "Таблица" и "Поиск задач" |
||
reload() |
Перезагружает виджет |
|
freeze() |
Делает виджет недоступным для работы (нельзя нажать на кнопку или кликнуть по ссылке) |
|
unfreeze() |
Делает виджет доступным для работы (можно нажать на кнопку или кликнуть по ссылке) |
Методы для фильтров
Метод |
Что делает |
---|---|
setFilters() |
Устанавливает значение параметров фильтра. Пример: let widget = firstForma.portal.block(123); widget.refresh(); |
filters() |
Возвращает параметры фильтра в виде массива. Каждый параметр фильтра имеет методы get и set. Пример: let widget = firstForma.portal.block(123); |
Обращение к параметрам фильтра
Если для виджета настроен фильтр, а для наполнения виджета используется хранимая процедура, то из нее можно обращаться к параметрам фильтра через входящий параметр @XmlParam (см. пример).
Методы для работы с файлами
Из JS-вставок портала можно вызывать галерею для просмотра изображений:
Галерея изображений
Для вызова галереи используется функция window.firstForma.fileViewer(fileArray, fileIndex)
Параметр |
Описание |
---|---|
fileArray |
массив { url, fileType, name, mime } |
url |
url источник файла |
fileType |
тип файла (необязательный параметр) Возможные значения: audio, video, image, pdf, eml. Если тип не указан, то будет определяться автоматически по fileName и fileUrl. Если автоматически тип не определился, то принимается как image |
name |
название, которое будет отображаться при наведении курсора мыши (необязательный параметр) |
mime |
mime поле файла (необязательный параметр) |
fileIndex |
(необязательный параметр) По умолчанию 0. Определяет, какой по порядку файл из массива отображать сейчас |
Примеры:
window.firstForma.fileViewer([{
url:'./GetAttachment.ashx?id=1234&versionId=1',
fileType:'video',
mime:'video/mp4'
}])
window.firstForma.fileViewer([{
url:'https://ru.1forma.ru/GetAttachment.ashx?id=569754',
fileType:'image',
name:'Свежая выпечка'
},
{
url:'https://ru.1forma.ru/GetAttachment.ashx?id=569753',
fileType:'image',
name:'Витрина'
}])
Полный пример настройки галереи на портале описан здесь.
Методы для работы с телефонией
Используются при настроенной интеграции с IP-телефонией.
Открыть окно вызова:
GetTopWindow().TCHeader.CallHistory.Open(1234)
где 1234 — короткий номер.
Если вызов используется в портальном блоке (например, по ссылке), то открыть окно вызова можно так:
window.parent.TCHeader.CallHistory.Open(1234)