Была задача — Получить все файлы, которые были в комментариях к задачам. Делаем! Продолжить чтение «Bitrix: Как получить файлы через апи?»
Bitrix24 Tasks: Класс BX.Tasks.Util.Query
Данный аяксовый класс позволяет на клиенте выполнять вызовы удаленных методов. На PHP
список доступных экшнов можно просмотреть, выполнив код:
CModule::IncludeModule('tasks'); $d = new \Bitrix\Tasks\Dispatcher(); print($d->getDescriptionFormatted());
Подключение js-extension`а:
CJSCore::Init('tasks_util_query');
Примеры работы с js-апи
Статический вызов, без пакетирования операций
В 99% случаев используется именно он
BX.Tasks.Util.Query.runOnce( 'task.template.find', {parameters: {select: ['ID', 'TITLE']}} ).then(function(result){ if(result.isSuccess()) { console.dir(result.getData()); } else { console.dir(result.getErrors()); } });
Порождение инстанса и пакетирование
При таком подходе операции будут выполнены в одном запросе, по очереди
var query = new BX.Tasks.Util.Query({autoExec: true}); query.run('task.update', {id: 100, data: {TITLE: 'New title'}}).then(function(result){ if(result.isSuccess()) { console.dir('This is task update'); }; }, function(){ console.dir('Oopsss...'); }); query.run('task.get', {id: 100}).then(function(result){ if(result.isSuccess()) { console.dir('Task:'); console.dir(result.getData()); }; }, function(){ console.dir('Oopsss...'); }); query.run('task.template.get', {id: 200}).then(function(result){ if(result.isSuccess()) { console.dir('Template:'); console.dir(result.getData()); }; }, function(){ console.dir('Oopsss...'); });
Смена точки обработки запроса
По умолчанию используется точка tasks.base
, то есть components/bitrix/tasks.base/ajax.php
. Можно поменять точку обработки, чтобы получить доступ к кастомным обработчикам компонента-наследника. При этом, методы должны вызываться либо как this.methodname
, либо по названия класса компонента: tasksuserfieldpanelcomponent.methodname
var query = new BX.Tasks.Util.Query({url: '/bitrix/components/bitrix/tasks.userfield.panel/ajax.php', autoExec: true}); query.run('this.savefield', {id: 100, data: {USER_TYPE_ID: 'datetime', MULTIPLE: 'Y'}}).then(function(result){ if(result.isSuccess()) { console.dir('Field created:'); console.dir(result.getData()); }; }, function(){ console.dir('Oopsss...'); });
Если вы используете в качестве js-контроллера компонента класс-наследник от BX.Tasks.Component
, тогда внутри этого контроллера есть возможность делать просто вызов this.callRemote()
:
BX.Tasks.Component = BX.Tasks.Util.Widget.extend({ methods: { ... doSmth: function(){ this.callRemote('this.saveField', {id: 100}).then(function(result){ if(result.isSuccess()) { ... } }); } ... } });
При передаче autoExec: false, запросы не будут отправлены на выполнение. В таком случае необходимо вручную вызвать метод query.execute();
Итератор вызовов
Бывает полезен класс BX.Tasks.Util.Query.Iterator
, который реализует удобный интерфейс к пошаговке через ajax