Задать вопрос
@venom1996

Как сделать несколько чек листов в одной задаче?

<?php
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");
CModule::IncludeModule("tasks");

    $arFields = Array(
        "TITLE" => "Task title",
        "DESCRIPTION" => "Task description",
        "RESPONSIBLE_ID" => 721,
    );

    $obTask = new CTasks;
    $ID = $obTask->Add($arFields);
    $success = ($ID>0);

    if($success)
    {
        echo "Ok";
        $task = \CTaskItem::getInstance($ID, 721);
        \CTaskCheckListItem::add($task, ['TITLE'=>'First item', 'SORT_INDEX'=>10, 'IS_COMPLETE'=>'N']);
       
    }
    else
    {
        if($e = $APPLICATION->GetException())
            echo "Error: ".$e->GetString();
}?>

задача создаётся с чек листом, но как сделать несколько чек листов ?
  • Вопрос задан
  • 1403 просмотра
Подписаться 1 Простой Комментировать
Помогут разобраться в теме Все курсы
  • Onskills
    Битрикс24: работа с платформой
    1 месяц
    Далее
  • Академия Эдюсон
    Коммерческий директор
    4 месяца
    Далее
  • НАДПО
    Руководитель отдела продаж. Повышение квалификации
    3 месяца
    Далее
Пригласить эксперта
Ответы на вопрос 4
gromdron
@gromdron Куратор тега Битрикс24
Работаю с Bitrix24
Измените свой код создания чек-листа, можете воспользоваться фрагментом:

use \Bitrix\Main,
	\Bitrix\Tasks\CheckList\Task
	;

Main\Loader::IncludeModule('tasks');

/**
 * @var integer Идентификатор задачи
 */
$taskId = 6;

/**
 * @var integer Идентификатор пользователя
 */
$userId = 1;

$result = Task\TaskCheckListFacade::add(
	$taskId,
	$userId,
	[
		'TITLE'        => 'Test data',
		'PARENT_ID'    => 0,
		'SORT_INDEX'   => '10',
		'IS_COMPLETE'  => 'N',
		'IS_IMPORTANT' => 'N',
		'MEMBERS'      => [],
		'ATTACHMENTS'  => [],
	]
);

var_dump($result);
Ответ написан
@ksu92
//Сначала создаем собственно сам чек-лист (обертку) c 'PARENT_ID' (так, мы можем создать несколько таких "оберток") :
$result = TaskCheckListFacade::add(
$taskID,
$userID,
[
'TITLE' => $checkList['TITLE'],
'PARENT_ID' => 0,
'SORT_INDEX' => $checkList['SORT_INDEX'],
'IS_COMPLETE' => $checkList['IS_COMPLETE'],
'IS_IMPORTANT' => $checkList['IS_IMPORTANT'],
]
);
//Затем добавляем в него пункты, указывая для них $result->getData()['ITEM']->getFields()['ID'] в качестве 'PARENT_ID'
$item = TaskCheckListFacade::add(
$taskID,
$userID,
[
'TITLE' => $listItem['TITLE'],
'PARENT_ID' => $result->getData()['ITEM']->getFields()['ID'],
'SORT_INDEX' => $listItem['SORT_INDEX'],
'IS_COMPLETE' => $listItem['IS_COMPLETE'],
'IS_IMPORTANT' => $listItem['IS_IMPORTANT'],
]
);
Ответ написан
@iTJack
Добрый день! На дворе сентябрь 22 года, но увы, документации по методу CheckListFacade так и не появилось.

Подскажите пожалуйста правильную связку. Мне надо создать в 1 задаче 2 разных чек-листа. Они создаются без проблем.

$taskId = 1;
$userId = 1;
$task = CTaskItem::getInstance($taskId, $userId);

$result = Task\TaskCheckListFacade::add(
  $taskId,
  $userId,
  [
    'TITLE'        => 'Test data',
    'PARENT_ID'    => 0,
    'SORT_INDEX'   => '10',
    'IS_COMPLETE'  => 'N',
    'IS_IMPORTANT' => 'N',
    'MEMBERS'      => [],
    'ATTACHMENTS'  => [],
  ]
);
\CTaskCheckListItem::add($task, ['TITLE'=>'TITLE1', 'SORT_INDEX'=>10, 'IS_COMPLETE'=>'N']);

$result2 = Task\TaskCheckListFacade::add(
  $taskId,
  $userId,
  [
    'TITLE'        => 'Test data2',
    'PARENT_ID'    => 0,
    'SORT_INDEX'   => '20',
    'IS_COMPLETE'  => 'N',
    'IS_IMPORTANT' => 'N',
    'MEMBERS'      => [],
    'ATTACHMENTS'  => [],
  ]
);

\CTaskCheckListItem::add($task, ['TITLE'=>'TITLE1', 'SORT_INDEX'=>10, 'IS_COMPLETE'=>'N']);


Но, все созданные поля прикрепляются к первому чек-листу. Что и логично, так как нигде не указывается куда их прицепить. Подскажите как принудительно указать, полям к какому чек-листу им прикрепляться? Пункты описанные выше - не работают. Спасибо!

P.S. Последний пункт работает, но это дичайшее извращение =)
Ответ написан
danya_sd
@danya_sd
admin
Вот пример рабочего кода для коробочной версии bitrix24
Делал PHP вставку в БП для добавления подзадач в задачу запущенную в этом процессе.

if (\Bitrix\Main\Loader::includeModule('tasks')) {
    
    // 1. ПОЛУЧЕНИЕ КОНТЕКСТА указан ID создаваемой задачи запущенная ранее
    $taskId = (int)"{=A46098_6446_35258_361111:TaskId}";
    
    // Получаем ID создателя и очищаем от префикса 'user_'
    $rawCreator = "{{Создатель}}";
    $userId = (int)str_replace('user_', '', $rawCreator);
    
    // Если по какой-то причине ID создателя пустой, используем админа (1) как резерв
    if ($userId <= 0) $userId = 1;

    /**
     * Функция для получения всех ID сотрудников подразделения
     */
    $getUsersByDepartment = function($depId) {
        $users = [];
        $depId = (int)$depId;
        if ($depId <= 0) return $users;

        $dbUsers = \CUser::GetList($by="id", $order="asc", [
            "UF_DEPARTMENT" => $depId,
            "ACTIVE" => "Y"
        ]);
        while($u = $dbUsers->Fetch()) {
            $users[] = (int)$u["ID"];
        }
        return $users;
    };

    /**
     * Вспомогательная функция для одиночных пользователей
     */
    $parseSingleUsers = function($value) {
        if (empty($value)) return [];
        $cleanString = str_replace('user_', '', (string)$value);
        $ids = explode(',', $cleanString);
        $result = [];
        foreach ($ids as $id) {
            $id = (int)trim($id);
            if ($id > 0) $result[] = $id;
        }
        return $result;
    };

    // 2. ПОДГОТОВКА ГРУПП (ПО ID ОТДЕЛОВ)
    // Тестировщики [D5555]
    $test_user = $getUsersByDepartment(5555);
    
    // Поддержка [D7777]
    $groupSupport = $getUsersByDepartment(7777);

    // Индивидуальные ответственные из констант
    $admin_const = $parseSingleUsers("{=Constant:admin_const}");
    $network_const = $parseSingleUsers("{=Constant:network_const}");
    $approve_const = $parseSingleUsers("{=Constant:approve_const}");
    

    if ($taskId > 0) {
        
        $checkListsStructure = [
            "Название чек листа 1" => [
                ["Пункт 1", $network_const],
                ["Пункт 2", $approve_const],
                ["Пункт 3", $test_user]
            ],
            "Название чек листа 2" => [
                ["Пункт 1", $admin_const],
                ["Пункт 2", $admin_const],
                ["Пункт 3", $admin_const],
                ["Пункт 4", $admin_const],
                ["Пункт 5", $admin_const]
            ]
        ];

        $globalSort = 5000;

        foreach ($checkListsStructure as $listTitle => $items) {
            
            $result = \Bitrix\Tasks\CheckList\Task\TaskCheckListFacade::add($taskId, $userId, [
                'TITLE' => $listTitle,
                'PARENT_ID' => 0,
                'SORT_INDEX' => $globalSort,
                'IS_COMPLETE' => 'N'
            ]);

            if ($result->isSuccess()) {
                $parentId = $result->getData()['ITEM']->getFields()['ID'];
                $globalSort += 10;

                foreach ($items as $itemData) {
                    $title = $itemData[0];
                    $responsibles = $itemData[1];
                    
                    $members = [];
                    foreach ($responsibles as $rId) {
                        $members[(int)$rId] = ['TYPE' => 'A'];
                    }

                    \Bitrix\Tasks\CheckList\Task\TaskCheckListFacade::add($taskId, $userId, [
                        'TITLE' => $title,
                        'PARENT_ID' => $parentId,
                        'SORT_INDEX' => $globalSort,
                        'IS_COMPLETE' => 'N',
                        'MEMBERS' => $members
                    ]);
                    $globalSort += 10;
                }
            }
            $globalSort += 100;
        }
    }
}


Можно указать точную задачу и добавлять чек личты от админа для этого надо заменить в коде начало:
if (\Bitrix\Main\Loader::includeModule('tasks')) {
    // Указываем номер задач     
    $taskId = 11111;
    // Указываем ID пользователя
    $userId = 1;
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы