Tasks 26.900.0: скрытие выполненных пунктов и удалённые API AI и Scrum
Ломающее обновление
Удалены или изменены публичные API — прикладной код может перестать работать.
В Tasks 26.900.0 настройка скрытия выполненных пунктов применяется ко всем задачам пользователя, а для шаблонов хранится отдельно. В Scrum появилось перемещение перед выбранным элементом. Одновременно удалены AI REST для сохранения изображений и три публичных метода Scrum.
Новое
Скройте выполненные пункты во всех задачах
Когда пользователь скрывает выполненные пункты в одной карточке, переключатель обновляет все корневые чек-листы и другие загруженные задачи. У шаблонов своя общая настройка; изменение в задаче на неё не влияет. По умолчанию выполненные пункты видны.
Для своей формы есть Bitrix\Tasks\V2\Public\Command\CheckList\SetHideCompletedCommand с аргументами конструктора bool $hide, int $userId. Команда выполняется через run(). Команда для шаблонов находится в Bitrix\Tasks\V2\Public\Command\Template\CheckList и принимает те же аргументы.
Читать выбор можно через Bitrix\Tasks\V2\Public\Provider\CheckListViewOptionProvider: методы isTaskCompletedHidden(int $userId) и isTemplateCompletedHidden(int $userId) возвращают bool. Так собственная форма сможет показывать то же состояние, что и штатная карточка. AJAX-действия tasks.V2.CheckList.setHideCompleted и tasks.V2.Template.CheckList.setHideCompleted принимают hide, пользователя берут текущего.
Перемещайте Scrum-элемент перед выбранным
Меню элемента двигает его на одну позицию или перед другим элементом, который можно найти поиском. Enter и пробел открывают панель действий; после выбора интерфейс возвращает фокус, операции озвучиваются через ui.a11y.
В PHP появился Bitrix\Tasks\Scrum\Service\ItemService::moveItemsBeforeItem(array $itemsToMove, int $targetItemId, int $entityId, ?PushService $pushService = null): array. Он перемещает корневые элементы и возвращает новую сортировку по ID. Компонентное действие moveItemsBeforeItemAction() проверяет группу, Scrum-сущность, право сортировки и доступ к элементам; лимит составляет 500 элементов.
Селектор entityId: scrum-item принимает опции groupId, entityId, excludeIds. Его можно подключить к своей форме для поиска корневых элементов бэклога или спринта с учётом прав пользователя.
Формы старта и завершения спринта тоже работают с клавиатуры. Фокус остаётся внутри формы и после закрытия возвращается на кнопку, которой её открыли. Ошибку показывает диалог с ролью alertdialog, у полей названия и цели спринта появились подписи.
Завершайте задачу, не отмечая пункты
Если задачу со скрам-канбана переносят в финальную колонку, а в чек-листе остались невыполненные пункты, открывается диалог с выбором. Можно отметить оставшиеся пункты выполненными или завершить задачу как есть. Для варианта «как есть» нужны право сортировки в канбане и право на завершение задачи, для отметки пунктов — ещё право её редактировать.
Отключите подсчёт общего числа записей времени
В task.elapseditem.getlist можно передать params[count_total]=false, если интерфейсу не нужен общий счётчик. Тогда ответ придёт без total и next: CTaskElapsedItem::getList($order, $filter, $select, $params) возвращает [items, null] и не вызывает getCount(). REST передаёт значения строками, поэтому n, no, false и off тоже выключают подсчёт. По умолчанию он включён.
Что сломается
Уберите вызовы удалённого AI REST
Метод tasks.task.ai.image.save удалён вместе с контроллером Bitrix\Tasks\Rest\Controllers\Task\AI\Image. Он загружал изображение по URL в пользовательский Диск и возвращал fileId. Объявленной замены нет. Прямые PHP-вызовы также потеряют классы Bitrix\Tasks\Integration\AI\Model\Image, Bitrix\Tasks\Integration\AI\Restriction\Image и Bitrix\Tasks\Integration\AI\WhiteList.
Проверьте вызовы и наследников ItemService
Из Bitrix\Tasks\Scrum\Service\ItemService удалены публичные методы:
tryUpdateEntityIdToItems(int $entityId, array $itemIds): bool;trySortItems(array $sortInfo, array &$updatedItems = []): bool;canSortItemsInGroup(int $groupId, array $sortInfo, array $additionalItemIds = []): bool.
Прямые вызовы закончатся ошибкой отсутствующего метода. Замены для этих трёх методов не объявлены. У sortItems(array $sortInfo, ?PushService $pushService = null) возвращаемый тип изменён с void на array. Наследники, которые переопределяют его с : void, несовместимы с новым контрактом.
У наследников список длиннее. В ItemService удалены protected updateItemEntityIds() и updateItemSorts(), в Bitrix\Tasks\Scrum\Service\TaskService — protected static createDeferredKanbanService(), а KanbanService::updateTaskStageId() стал private. Переопределения и вызовы этих методов из своих классов перестанут работать.
Передавайте пункты чек-листа из указанной задачи
REST чек-листов проверяет чтение задачи или шаблона до привязки пункта к запросу. Пункт ищется одновременно по своему ID и ID родителя; массовое сохранение тоже проверяет принадлежность. Запрос с пунктом из другой задачи или шаблона либо с недоступным родителем завершится ошибкой доступа.
Модель берёт из запроса только ID, остальные данные загружает из хранилища. Переданный CREATED_BY больше не служит источником прав. В PHP-контрактах контроллеров $taskId, $templateId, $beforeItemId и $afterItemId получили тип int; это касается прямых PHP-вызовов и переопределений методов.
БД
Обновление создаёт таблицу b_tasks_interaction_log и агент ClearOldInteractionLog::execute() с интервалом 1200 секунд: на эталоне Б24 после обновления есть и то и другое. В таблицу попадают создание, изменение, открытие и комментирование задач, их связи и сообщения в чате задачи. По этим записям селектор связанных задач ранжирует выдачу. Журнал ведётся только при включённом флаге Bitrix\Tasks\Feature\RankingFeature и только для действий из интерфейса. Агент удаляет записи старше 30 дней, а на пользователя хранится не больше 10 000 событий.
Мелочи и находки
- Задача с несколькими предшественниками в Ганте пересчитывается после всех доступных предшественников и стартует от самой поздней из их дат. Раньше в расчёте у задачи был один предшественник. Для связи финиш—старт с учётом рабочего времени старт, попавший на конец рабочего дня или в нерабочее время, сдвигается на ближайшее рабочее время.
- В «Моём плане» колонка «Новые» показывает и задачи, у которых ещё нет стадии в плане владельца. Стадия закрепляется за задачей, когда её переносят или сортируют вручную.
- Просроченная задача, которую уже завершили, отложили или отправили на контроль, больше не снижает показатель «Эффективность»: при событии просрочки нарушение закрывается.
- В скрам-канбане завершение и возобновление родительской задачи снова переносят её стадии без проверки типа колонки и права сортировки. Эти проверки и откат при сбое появились в 26.800.0. Статус по-прежнему меняется только при праве на завершение или возобновление, а перенос завершённой задачи из финальной колонки требует права возобновить её и при групповом переносе.
Устаревшие и удалённые API в этой версии
| Символ | Статус | Чем заменять |
|---|---|---|
tasks.task.ai.image.save
|
Удалено | — |
Bitrix\Tasks\Rest\Controllers\Task\AI\Image
|
Удалено | — |
Bitrix\Tasks\Integration\AI\Model\Image
|
Удалено | — |
Bitrix\Tasks\Integration\AI\Restriction\Image
|
Удалено | — |
Bitrix\Tasks\Integration\AI\WhiteList
|
Удалено | — |
Bitrix\Tasks\Scrum\Service\ItemService::tryUpdateEntityIdToItems()
|
Удалено | — |
Bitrix\Tasks\Scrum\Service\ItemService::trySortItems()
|
Удалено | — |
Bitrix\Tasks\Scrum\Service\ItemService::canSortItemsInGroup()
|
Удалено | — |