Добрый день! Коробочная версия. 1) Есть некоторая сделка по адресу /crm/deal/show/1/; 2) У этой сделки может изменяться поле "Стадия сделки"; 3) Изменение попадает в историю (внизу страницы во вкладке "История"): Тип события "Изменено поле Стадия сделки", Описание: "Стадия 1" -> "Стадия 2"
Мне нужно получить эту самую историю изменения через api. Что-то вроде "crm.deal.log.get" с параметром ['id' => 1, 'filter' => ['stage_id' => 'STAGE_1']], который вернул бы мне историю изменения сделки.
ApiSearcher написал: Как я могу через api получить историю изменения конкретной сделки?
Получить историю у существующих, вряд ли (см выше - методов нет), а с точки зрения "иметь историю", то проще на веб-хуках их писать к себе и уже с ней работать
Егор Мантусов, ну так все верно: история - это текстовая запись об изменениях. Нельзя получить все изменения статусов, но можно получить все изменения сделки и путем поиска регулярными выражениями найти именно смену статуса.
И потом внимательно читаем описание модуля: События (под событиями подразумевается перенос комментариев к контактам, компаниям, сделкам, прикрепленные файлы, информация о звонках и письмах) Этап переноса гарантированно поддерживает обработку 10 000 событий.
То есть: события это не изменение сделки/компании/контакта, а лишь то, что находится в живой ленте, а это вовсе не история изменения поля.
ApiSearcher написал: Мне нужно получить эту самую историю изменения через api.
Как-то так:
Код
//файл /bitrix/modules/crm/classes/general/crm_event.php
use Bitrix\Crm;
$CCrmEvent = new CCrmEvent;
$arr = $CCrmEvent::GetList(array('ID' => 'DESC'), array('ENTITY_TYPE' => 'DEAL'), false);
//третий параметр nPageTop ограничение сверху
while($ob = $arr->Fetch()) {
//тут все из вкладки "история" по всем сделкам
}
Егор Мантусов написал: Через Api можно всё. \Bitrix\Crm\ActivityTable::getList(). Например.
А это точно то. что нужно? Попробуйте через этот метод ActivityTable::getList получить историю изменения ответственного у сделки и напишите сюда запрос. У меня не получилось.
Егор Мантусов написал: Через Api можно всё. \Bitrix\Crm\ActivityTable::getList(). Например.
А это точно то. что нужно? Попробуйте через этот метод ActivityTable::getList получить историю изменения ответственного у сделки и напишите сюда запрос. У меня не получилось.
Для этой истории есть класс в socialnetwork. CSocNetLogEvents(). Или свой orm класс сделать для b_sonet_log. Если в новых версиях битрикс24 его ещё нет
Егор Мантусов написал: Через Api можно всё. \Bitrix\Crm\ActivityTable::getList(). Например.
А это точно то. что нужно? Попробуйте через этот метод ActivityTable::getList получить историю изменения ответственного у сделки и напишите сюда запрос. У меня не получилось.
Для этой истории есть класс в socialnetwork. CSocNetLogEvents(). Или свой orm класс сделать для b_sonet_log. Если в новых версиях битрикс24 его ещё нет
Не понимаю зачем придумывать велосипед со своим классом, я выше написал про класс CCrmEvent и его метод GetList , который получает изменения, записанные во вкладке "история" в сделке или лиде (то что и требовалось автору).
По поводу класса CSocNetLogEvents. Класс находится тут /bitrix/modules/socialnetwork/classes/<бд>/log_events.php. Коробка, последняя на текущий момент версия. Помимо методов добавления, апдейта и удаления, определены еще метод GetList, который лезет в таблицу b_sonet_log_events, и конкретно у меня ничего не возвращает, т.к. таблица пустая, и метод GetUserLogEvents , который получает события действительно, но в разрезе пользователя, причем если не указать вторым параметром массив array('ALL' => 'Y'), то тоже ничего не вернет, т.к. идет INNER JOIN запрос в ту самую пустую базу b_sonet_log_events. Плюсом не возвращает предыдущее значение, перед изменением и новое значение. Возвращает примерно следующее:
CCrmEvent и метод GetList возвращает все что нужно (1500 лидов на одном из проектов по ошибке выставили ответственного, пришлось возвращать в исходные состояния, помогло CCrmEvent и метод GetList) . \Bitrix\Crm\ActivityTable::getList() все также не возвращает нужные автору значения.