Как отлавливать событие Изменения/Добавления OnAfter в Битрикс24 после исполнения всех Бизнес процессов?
Использую события OnAfter для объектов CRM и iblocks, столкнулся с такой проблемой, что если после создания или изменения есть один или несколько БП в которых изменяется документ, то это событие вызывается столько раз сколько в этих БП изменяется документ.
С одной стороны это верно. Но если мне надо отловить самое последнее событие, после всех БП?
Конечно, у меня есть 2 решения, но они оба мне не очень нравятся:
1. Вызывать блоком PHP нужные мне функции в самом конце цепочки БП для документа.
2. Вызывать цепочку БП из PHP по событиям OnAfter и в конце исполнять нужный мне код.
Подскажите как можно переписать сам класс, вызывающий события OnAfter, так чтобы он вызывался после всех БП.
Типо подмена через наследование...
Во-первых, вам скорее следует поправить логику БП и вашего обработчика событий, чтобы он делал то что нужно только в определенный момент и не делал ее лишний раз.
Во-вторых, если вам нужен момент ИМЕННО после определенных действий, а обычные изменения в БП вам в принципе не нужно, то стоит рассмотреть момент создания собственного действия в БП.
Первый вариант, не подходит в моём случае. Я реализовал 2 регистра оборотных (27 и 18 измерений/ресурсов) и один остатков (4 измерения 2 ресурса) по типу 1С. Поэтому при изменении разных полей Сделки на разных стадиях, а так же другими связанными объектами (Сделками, эл. списков, агентами запускающими PHP обработки), будет крайне трудно написать всю совокупность условий запуска PHP кода по действиям над регистрами, т.к. комбинация возможных изменений стремится в бесконечность.
Второй по сути нет смысла делать, т.к. намного проще просто вызвать нужный PHP файл, который создаёт объект "регистра" и производит над ним нужные действия.