Пример: в портальном блоке отображается список задач — мероприятий. Для каждой задачи есть кнопка "Записаться". По нажатию кнопки пользователь, нажавший на нее, добавляется в соответствующую задачу в ДП "Выбор пользователей".
1.Настроим портальный блок Smart Html со списком задач из категории. Кнопкам назначим общий класс btnapply и уникальные ID, равные номеру задачи.
{{#smart999}}
<br>{{description}} <button class="btnapply" id="{{taskID}}">Записаться</button>
{{/smart999}}
где 999 — ID смарт-выражения, отбирающего задачи в список.
2.Добавим на портал JS-вставку, которая назначает обработчик события для кнопок "Записаться". ID пользователя, нажавшего на кнопку, получаем с помощью функции getSessionUserInfo().
const info = getSessionUserInfo();
(window.firstForma.portal.block(111)).onLoaded(function () {
function apply(taskid) {
var surl = '/app/v1.2/api/publications/action/apply?taskid='+ taskid + '&userid=' + info.responseJSON.data.userId;
return new Promise(resolve => {
let xhr = new XMLHttpRequest();
xhr.open('GET', surl, true);
xhr.send();
alert('Вы записаны')
});
}
var arr = document.getElementsByClassName('btnapply');
for (var i = 0; i < arr.length; i++) {
document.getElementById(arr[i].id).addEventListener('click', function(taskid) {
apply(this.id);
});
}
});
где 111 — ID портального блока, apply — alias публикации, которую мы создадим дальше, а btnapply — класс, который назначен кнопке
3.Настроим публикацию пакета действий, которая будет добавлять ID текущего пользователя в ДП "Выбор пользователей" в соответствующей задаче. Не забудьте настроить доступ к публикации.
В публикацию должны передаваться два параметра — ID задачи и ID пользователя.
Публикация.
Пакет действий должен включать смарт-действие "Изменить значение ДП", а также обязательное для публикации смарт-действие "HTTP-ответ".
Пакет действий.
В смарт-действии "Изменить значение ДП" в ДП "Выбор пользователей" добавляется ID пользователя, нажавшего на кнопку.
Смарт-действие "Изменить значение ДП".
Смарт-выражения сохраняются в формате TSQL:
•Смарт-выражение для номера задачи использует параметр публикации taskid:
select JSON_VALUE ( @eventParam0, '$.queryString.taskid')
•Смарт-выражение для значения ДП использует параметр публикации userid (формат смарт-выражения для ДП "Выбор пользователей" можно посмотреть здесь):
select '{"Users":{"Added":[' + JSON_VALUE ( @eventParam0, '$.queryString.userid') + ']}}'
Смарт-действие "HTTP ответ" может возвращать любое значение, например:
Смарт-действие "HTTP ответ".
Полезные ссылки