Битрикс24 ajax.runAction — вызов методов REST

  1. Допустим вы пишите код для битрикса, создаете компонент или модуль, и хотели бы через асинхронные вызовы менять сущности битрикса. Через классы D7 легко написать свой обработчик или бекенд, назвать его ajax.php и обращаться к нему. Но если нужно делать стандартные операции, которые есть в Bitrix REST, то незачем все писать с нуля. Можно использовать встроенный ajax.runAction https://dev.1c-bitrix.ru/api_help/js_lib/ajax/bx_ajax_runaction.php

Например, взять задачу из БД. Для этого нужно написать:

Который вернет ответ

Или обновить саму Задачу, для примера обновлю пользовательское поле UF_SOME_USER_FIELD:

Откуда брать параметры?

В этом поможет документация REST https://dev.1c-bitrix.ru/rest_help/tasks/task/tasks/tasks_task_get.php

Хоть в документации REST и используется другой класс JS BX24.callMethod его можно заменить на BX.ajax.runAction, то есть нам становятся доступны все операции над сущностями. Ура!🎉

Хотя странно, ведь документация REST говорит об обратном:

Для использования методов REST необходимо либо создать локальное приложение в рамках конкретного Битрикс24 или вебхук, либо разработать тиражное решение и добавить его в партнерский кабинет.

Если заглянуть под капот?

Этот же код можно вызвать другим способом

который вернет то самое

bitrix ajax run action
альтернативный вызов bitrix.ajax.runAction

Откуда взялся bitrix:tasks.rest.controllers.task.get ?

Для этого нужно обратиться к документации Контроллеры

Контроллер — часть модуля, отвечаюший за REST or Ajax вызовы.

Посмотрим как они настроены в задачах

bitrix/modules/tasks/.settings.php

Namespace \\Bitrix\\Tasks\\Rest\\Controllers — как раз отвечает за первую часть пути bitrix:tasks.rest.controllers

Откуда взялся task.get?

В модуле есть класс bitrix/modules/tasks/lib/rest/controllers/task.php, который обрабатывает все запросы. Метод же называется \Bitrix\Tasks\Rest\Controllers\Task::getAction

get — название метода

Action — указывает что это роут, похожая система есть как в Laravel, так и в YII2

Откуда взялся taskId?

Пришлось долго подебажит, но в итоге оказалось, что с помощью цепочек, сложно запутанной, рефлексии, код анализирует параметры, которые поступают в метод. 99% этого кода вам не понадобиться, но если интересно, то посмотрите

\Bitrix\Main\Engine\AutoWire\Parameter::__construct вот эту строчку

также в самом контроллере метод

 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *