PrototypeItemDataManager
Описание и методы
Абстрактный класс для абстрактных прототипов таблетов элементов. Содержит в себе API модификации значений пользовательских полей перед их сохранением в базу данных.
Цепочка наследования
Является наследником класса Bitrix\Main\ORM\Data\DataManager.
Методы
Метод | Описание | С версии |
---|---|---|
public static function getType(): ?array | Возвращает массив-описание типа, для которого был скомпилирован конечный класс таблета. | |
public static function getMap(): array | По умолчанию у элементов есть только идентификатор. Но наследники могут добавить свои системные поля, как сделано в модуле RPA. | |
public static function checkFields(ORM\Data\Result $result, $primary, array $data) | Переопределенный класс родителя, чтобы не было обращения к API пользовательских полей для их поиска. | |
public static function getItemUserFieldEntityId(): ?string | Возвращает строковый идентификатор сущности пользовательских полей для конкретного таблета. | |
public static function isOwnField(string $fieldName): bool | Возвращает true , если у сущности есть системное поле с кодом $fieldName . | |
public static function getOwnFieldNames(): array | Возвращает массив с названиями полей, которые являются системными |
Преобразование данных
Методы-обработчики событий выполняют преобразование данных для их корректного сохранения в базе
Здесь значения полей подготавливаются к сохранению в БД:
-
public static function onBeforeAdd(Event $event): ORM\EventResult
-
public static function onBeforeUpdate(Event $event): ORM\EventResult
Здесь сохраняются множественные значения полей в отдельные таблицы:
-
public static function onAfterAdd(Event $event): ORM\EventResult
-
public static function onAfterUpdate(Event $event): ORM\EventResult
После удаления элемента удаляются данные из связанных таблиц - из таблиц для хранения множественных значений, из b_file
-
public static function onAfterDelete(Event $event): ORM\EventResult
Обработка событий от старого API пользовательских полей
У API пользовательских полей есть методы, позволяющие напрямую менять значения. Эти методы обращались напрямую к собственным таблицам и записывали туда новые значения.
Теперь так делать нельзя, т.к. этих таблиц нет. Чтобы при работе через старое API не было ошибок, были добавлены новые события, которые перехватываются UserFieldHelper и обращаются к методам этого класса:
public static function getUserFieldValues(int $id, array $userFields): ?array
- возвращает массив значений пользовательских полей с кодами$userFields
для элемента с идентификатором$id
. Возвращаетnull
, если такого элемента нет;public static function updateUserFieldValues(int $id, array $fields): Main\Result
- обновляет значения пользовательских полей элемента с идентификатором$id
. В массиве$fields
лежат коды полей и значения для них;public static function deleteUserFieldValues(int $id): Main\Result
- очищает значения всех пользовательских полей элемента$id
.