calendar 25.195.0: активность БП считает минуты встреч и перестала терять последний день
Точечный релиз вокруг одной активности бизнес-процессов — «Получить информацию из календаря». Она научилась отдавать списки заголовков и суммарные минуты встреч, а заодно у неё поправили границу выборки. Публичного PHP API релиз не меняет.
Новые возвратные поля активности
У CBPCalendarGetInform появились EVENTS_TITLES_LIST, EVENTS_TITLES_BB_LIST и MeetingsTotalMinutes. Первые два — список заголовков событий (обычным текстом и в BB-разметке), третье — то, ради чего всё затевалось.
Сценарий понятный: бизнес-процесс, который раз в неделю собирает по сотруднику «сколько времени ушло на встречи». Раньше активность отдавала события, и считать минуты приходилось в самом процессе — то есть либо через вычисляемое поле, либо вообще никак.
Что считается «реальной встречей»
Самое ценное в этом релизе — критерии, по которым MeetingsTotalMinutes отсекает лишнее. В коде они помечены комментарием как INVARIANT, то есть менять их не планируют:
- события на весь день (all-day) не считаются;
ACCESSIBILITYизfreeиabsentне считается — «свободен» и «отсутствую» это не встреча;MEETING_STATUSизNиQне считается — отклонённые и неотвеченные приглашения тоже мимо.
Иначе говоря, в минуты попадает только то, где человек подтвердил участие и это время помечено как занятое. Если вы строите свою отчётность по загрузке календаря — имеет смысл взять те же критерии, чтобы цифры сходились с цифрами Битрикса.
Сдвиг верхней границы выборки
В fetchEvents() верхняя граница интервала теперь считается как $toTs - \CCalendar::GetDayLen(), добавлены preciseLimits => true и userId смотрящего.
Это правка того класса ошибок, где выборка «с 1 по 7 число» захватывала или теряла крайний день из-за того, что конец интервала попадал на начало следующих суток. Флаг preciseLimits заставляет выбирать события строго по границам, а не по дням целиком. Если у вас есть процессы на этой активности с ожиданиями по количеству событий — их стоит перепроверить: результат мог измениться на один день.
Мелочь
CCalendar перестал создавать SocialNetwork\FeatureService объектом ради одного вызова: было (new FeatureService())->isNewProjectsOn(), стало FeatureService::isNewProjectsOn().
Что делать
- Если использовали свою реализацию подсчёта времени встреч — сверьте критерии с INVARIANT выше.
- Перепроверьте бизнес-процессы, опирающиеся на выборку
CBPCalendarGetInformпо интервалу.