Добавление редактируемых полей
Список умеет править не только поля сущности, но и то, чего в ней нет: вычисляемые значения, данные из связанной таблицы, служебные отметки.
Добавить колонку, которой нет в сущности
Состав колонок задаёт getColumnsFieldId(). К полям сущности можно дописать своё имя:
public function getColumnsFieldId(): array
{
$columns = parent::getColumnsFieldId();
$columns[] = 'PROPERTY_ARTICLE';
return $columns;
}
Дальше своё поле обслуживают знакомой парой методов:
public function getRowFieldPROPERTY_ARTICLEViewData($rowId, $fieldId, array $row)
{
return $this->articles[$rowId] ?? '';
}
public function getRowFieldPROPERTY_ARTICLEEditData($rowId, $fieldId, array $row): string
{
$value = htmlspecialcharsbx($this->articles[$rowId] ?? '');
return '<input type="text" name="' . $fieldId . '" value="' . $value . '">';
}
Сохранение своего поля
Значение приходит в updateEntityRow() вместе с остальными полями строки. Своё поле оттуда
забирают до того, как массив уйдёт в сущность, — иначе она отвергнет неизвестное поле:
protected function updateEntityRow(array $primary, $row): \Bitrix\Main\ORM\Data\UpdateResult
{
$article = $row['PROPERTY_ARTICLE'] ?? null;
unset($row['PROPERTY_ARTICLE']);
$result = parent::updateEntityRow($primary, $row);
if ($result->isSuccess() && $article !== null) {
\CIBlockElement::SetPropertyValuesEx($primary['ID'], false, ['ARTICLE' => $article]);
}
return $result;
}
Пользовательские поля
Поля UF_* список поддерживает сам: он читает их через менеджер пользовательских полей и рисует
теми же элементами управления, что и админка Битрикса. Отдельного кода для них не нужно —
достаточно, чтобы у сущности был задан идентификатор набора пользовательских полей.