timeman 26.350.0 Заметное

Timeman 26.350.0: план дня пишется в нужную запись, блоки БП возвращают Saved

2 мин чтения
Узнавайте о ломающих изменениях Битрикса раньше, чем они доедут до прода: свежие разборы — в канале @bxmax_updates

В timeman 26.350.0 для коробочного Битрикс24 блоки «Сохранить план на день» и «Сохранить отчёт сотрудника за день» из нового конструктора бизнес-процессов научились писать в заданную запись рабочего дня, оставлять Markdown как есть и сообщать, сохранилось ли (у отчёта новые настройки в конструкторе, судя по коду, пока не сохраняются). ID записи теперь принимает и публичная команда UpsertPlanCommand, а старые шаблоны БП работают как раньше. Разбор для тех, кто строит процессы вокруг учёта времени или пишет планы дня из своего кода. Предыдущий разбор: timeman 26.300.0.

Новое

Пишите план в нужную запись дня из своего кода

У Bitrix\Timeman\V2\Public\Command\Report\UpsertPlanCommand появился последний аргумент int $recordId = 0. При 0 план, как и раньше, уходит в текущую запись сотрудника, при recordId > 0 команда берёт запись по ID. Дальше команда по-прежнему сверяет владельца записи, сохраняет план и шлёт сотруднику pull-событие day_plan_ready с recordId и userId. Тип плана — AI_DAY_PLAN или ROBOT_DAY_PLAN из RecordReportType, на любой другой вернётся ошибка.

        <?php declare(strict_types=1);

use Bitrix\Main\Loader;
use Bitrix\Main\Result;
use Bitrix\Timeman\V2\Public\Command\Report\UpsertPlanCommand;
use Bitrix\Timeman\V2\Public\Dto\Report\RecordReportType;

function savePlanToRecord(int $userId, int $recordId, string $planText): Result
{
    Loader::requireModule('timeman');

    return (new UpsertPlanCommand(
        userId: $userId,
        planText: $planText,
        planType: RecordReportType::ROBOT_DAY_PLAN,
        recordId: $recordId,
    ))->run();
}

$userId = 15;
$recordId = 4210;

$result = savePlanToRecord($userId, $recordId, "Созвон с заказчиком\nРевью задачи 1580");
if (!$result->isSuccess()) {
    // запись чужая или не найдена, текст пустой, тип плана не из getPlanValues()
    throw new \RuntimeException(implode('; ', $result->getErrorMessages()));
}

    

Markdown команда не трогает, в BB-код его переводит только блок «Сохранить план на день».

Права текущего пользователя она тоже не смотрит, проверяет лишь, что запись принадлежит userId. Если вызываете команду из своего контроллера, доступ проверяйте сами.

Ветвите процесс по Saved

Оба блока теперь возвращают Saved (да/нет). «Да» значит, что план или отчёт сохранён без ошибок. Раньше при неудаче блок писал ошибку в журнал, и проверить результат в шаблоне было нечем.

После «Сохранить отчёт сотрудника за день» поставьте условие по Saved и на «нет» отправьте уведомление руководителю. Подставить RECORD_ID из триггера «Завершён рабочий день» в поле «Идентификатор записи рабочего дня» этого блока, судя по коду, не выйдет: значение из настроек не сохраняется (см. «Мелочи»). В «Сохранить план на день» поле сохраняется. Сотрудник там должен быть владельцем записи, иначе Saved останется «нет».

Выключите Markdown, если текст уже в BB-кодах

Свойство «Преобразовывать Markdown в BB-код» (ConvertMarkdown) включено по умолчанию, так блоки работали и до обновления. Выключите его, и текст сохранится без прохода через MarkdownToBBCodeTranslationService из модуля ai. Это нужно, когда план или отчёт собирает ваш код и разметка в тексте уже готовая. У «Сохранить отчёт сотрудника за день» переключатель, судя по коду, не сохраняется (см. «Мелочи»).

Не ждите RECORD_ID от старта дня до обновления bizproc

Триггер «Запущен рабочий день» получил возвращаемое поле RECORD_ID, но на эталоне с bizproc 26.1400.0 оно всегда пустое.

Timeman передаёт поле, только если в Bitrix\Bizproc\Public\Activity\Trigger\ContextFields\TimemanStartWorktimeTrigger объявлена константа FIELD_RECORD_ID. В этой версии bizproc её нет, и поле начнёт заполняться, когда она появится. Если вы уже подставили RECORD_ID в RecordId блока «Сохранить план на день», ничего не сломается: пустое значение становится нулём, и блок пишет план в текущую запись сотрудника. У «Завершён рабочий день» RECORD_ID уже работает, его поля контекста описаны в самом timeman.

Мелочи и находки

  • Похоже на баг в «Сохранить отчёт сотрудника за день». По коду выходит, что getPropertiesDialogValues() после чтения формы перезаписывает RecordId и ConvertMarkdown по списку getAiPassthroughSettingNames() значениями, которые уже лежат в шаблоне. Конструктор кладёт эти значения в блок сразу при добавлении из каталога (0 и true из .description.php), поэтому поменять два поля в настройках нельзя совсем, даже у нового блока. У «Сохранить план на день» такой перезаписи нет. На портале это не проверялось: после сохранения откройте настройки ещё раз и сверьте значения.
  • У «Сохранить план на день» Saved в конструкторе подписан латиницей, без перевода.

Новая версия вышла — разбор уже в Telegram

В канале @bxmax_updates публикуем каждый свежий разбор: что сломается, что устарело и что появилось в API. Узнаете до того, как обновите прод.

Подписаться

Читайте дальше

timeman 26.300.0 Ломающее Свежее

Timeman 26.200.0–26.300.0: выключенный «Учёт рабочего времени» отключает REST timeman.*, перерывы за период отдаёт RecordProvider

Timeman 26.200.0 и 26.300.0 пришли в коробочный Битрикс24 в один прогон. В 26.200.0 модуль начал слушаться настройки портала: если инструмент «Учёт рабочего времени» выключен, перестают работать REST `timeman.*`, контроллеры и компоненты модуля, а уведомления не уходят. В 26.300.0 появился публичный…

2 мин
timeman 26.100.0 Ломающее Свежее

Timeman 26.100.0: время считается по IANA-зоне сотрудника, у CTimeManEntry и REST другие значения

С timeman 26.100.0 учёт рабочего времени берёт зону сотрудника из IANA-идентификатора в `b_user.TIME_ZONE` и считает смещение UTC на момент каждого события, с переходами на летнее и зимнее время. Форматы полей и ответов остались прежними, поменялись значения: `TIME_START`, `TIME_FINISH` и `DURATION`…

3 мин
rpa 26.300.0 Безопасность Свежее

Rpa 26.300.0: права на перемещение элементов наконец проверяются

До RPA 26.300.0 `UserPermissions::canMoveItem()` сразу отвечал `true`, и любой сотрудник, кроме экстранет-пользователей, мог перетащить любой элемент на любую стадию, а права стадии на перемещение не учитывались. Теперь права проверяются, а тем, кто может только смотреть, `rpa.item.get` и `rpa.item….

3 мин
booking 26.500.100 Заметное Свежее

Booking 26.500.100: addList отвечает ошибкой, когда не создал ни одной брони, а четыре колонки дат стали DATETIME

В коробочный Битрикс24 пришёл booking 26.500.100 с двумя правками. AJAX-экшен `booking.api_v1.Booking.addList` теперь возвращает ошибку, если не создал ни одной брони. Апдейтер переводит четыре колонки дат с `TIMESTAMP` на `DATETIME`, и в `install/migrations/tables.php` они объявлены через `datetime…

3 мин
Мы используем файлы cookie для улучшения работы сайта. Продолжая использовать сайт, вы соглашаетесь с нашей политикой конфиденциальности.
AI Домовой

AI Домовой История

на связи

пишет…
Нет истории чатов
AI Домовой

Нужна авторизация

Войдите, чтобы задавать вопросы AI Домовому.

Войти