7  /  12

Своя функция обновления данных (setUpdateFunction)

Когда нужно заменить стандартную функцию сущности Update для изменения данных нужно установить свой обработчик через функцию setUpdateFunction
обработчик должен вернуть объект \Bitrix\Main\Entity\UpdateResult

<?php

require_once($_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/main/include/prolog_admin_before.php');

use Bitrix\Main\Loader;
use Bitrix\Main\Localization\Loc;

Loc::loadMessages(__FILE__);

Loader::includeModule("iblock");
Loader::includeModule("devbx.core");

$IBLOCK_ID = intval(\Bitrix\Main\Context::getCurrent()->getRequest()->get('IBLOCK_ID'));

$list = new DevBx\Core\Admin\AdminList('iblock', '\Bitrix\Iblock\ElementTable', array(
    'ALLOW_EDIT' => 'Y',
    'ALLOW_ADD' => 'Y',
    'ALLOW_DELETE' => 'Y',
    'HEADER_FIELDS' => array(
        'ID',
        'TIMESTAMP_X',
        'MODIFIED_BY',
        'DATE_CREATE',
        'CREATED_BY',
        'ACTIVE',
        'ACTIVE_FROM',
        'ACTIVE_TO',
        'SORT',
        'CODE',
        'NAME',
    ),
    'FILTER_HEADER' => '<input type=hidden name="IBLOCK_ID" value="' . $IBLOCK_ID . '">',
));

$list->addFileEditParams('&IBLOCK_ID=' . $IBLOCK_ID);
$list->setActionGroupAddParams('&IBLOCK_ID=' . $IBLOCK_ID);

$list->setFilterFields(array(
    'ID' => 'RANGE',
    'TIMESTAMP_X' => 'RANGE',
    'DATE_CREATE' => 'RANGE',
    'ACTIVE',
    'ACTIVE_FROM' => 'RANGE',
    'ACTIVE_TO' => 'RANGE',
    'SORT' => 'RANGE',
    'CODE',
    'NAME',
));

$list->setCallbackApplyFilter(function (&$arFilter, &$arFilterValues) use ($IBLOCK_ID) {
    $arFilter['IBLOCK_ID'] = $IBLOCK_ID;
});

$list->setUpdateFunction(function ($ID, $arFields) {

    $result = new \Bitrix\Main\Entity\UpdateResult();

    $el = new CIBlockElement();

    if (!$el->Update($ID, $arFields)) {
        $result->addError(new \Bitrix\Main\Entity\EntityError($el->LAST_ERROR));
    }

    return $result;
});

$list->display();