EditorAdapter
Общее
Универсальный редактор (компонент bitrix:ui.form
и его наследник bitrix:crm.entity.editor
) играет важную роль в отрисовке интерфейсов CRM.
Подготовить параметры этого компонента может быть не так просто, особенно, если элемент имеет много полей.
Чтобы унифицировать этот процесс, был разработан этот сервис. Его основная задача - подготовка описания полей и данных о сущности для универсального редактора.
Каждый тип сущности имеет свои особенности при работе с полями (как минимум, отличается набор "комплексных полей").
Чтобы не создавать отдельного наследника на каждый тип сущности, было решено сделать возможность добавлять описания дополнительных полей и дополнительных данных.
Жизненный цикл при работе с этим сервисом выглядит следующим образом:
- Объект конфигурируется, получая на вход описание дополнительных полей методом
addEntityField
(которые формируются, как правило, статическими методами этого же класса). - Вызывается метод
processByItem
, в котором происходит подготовка необходимых данных. - Добавляются дополнительные данные для редактора методом
addEntityData
. - Обработанные данные получаются из методов
getEntityFields
иgetEntityData
и передаются в универсальный редактор.
Методы
Метод | Описание | С версии |
---|---|---|
public function __construct (Field\Collection $fieldsCollection, array $dependantFieldsMap = [])
|
Этим методом не рекомендуется пользоваться напрямую, лучше воспользоваться соответствующим методом фабрики Service\Factory::getEditorAdapter() . | |
public function hasData(): bool |
Вернет true, если метод processByItem был вызван хотя бы раз. | |
public static function isProductListEnabled(): bool |
Вернет true, если доступен новый грид товаров. | |
public function addEntityField(array $field): self |
Добавит дополнительные данные о поле $field. Метод должен вызываться до processByItem . | |
public function addEntityData($name, $value): self |
Добавит дополнительные данные $value о имени $name. Метод должен вызываться после processByItem . | |
public static function getClientField (string $title, ?string $fieldName = null, ?string $fieldDataName = null): array
|
Вернет описание поля "Клиент". | |
public static function getParentField (string $title, int $parentEntityTypeId, ?string $context = null): array
|
Вернет описание поля с селектором родителя. | |
public static function getProductRowSummaryField (string $title, ?string $fieldName = null): array
|
Вернет описание поля "Товары". | |
public static function getOpportunityField (string $title, ?string $fieldName = null): array
|
Вернет описание поля типа "Сумма с валютой". | |
public static function getUtmField (string $title, ?string $fieldName = null): array
|
Вернет описание поля типа "UTM-метки". | |
public static function getLocationFieldDescription (Field $field): array |
Вернет описание поля типа "Местоположение" по объекту этого поля. | |
public static function getProductRowProxyController (string $productEditorId, ?string $fieldName = 'PRODUCT_ROW_PROXY'): array
|
Вернет описание для контроллера передачи данных о товарах внутри карточки. | |
public static function getProductListController (string $productListId, string $currencyId, ?string $fieldName = self::CONTROLLER_PRODUCT_LIST): array
|
Вернет описание для контроллера списка товаров. | |
public static function prepareEntityUserFields (array $userFields, array $visibilityConfig, int $entityTypeId, int $entityId, string $fileHandlerUrl = ''): array
|
Вернет массив с описанием всех пользовательских полей для универсального редактора. | |
public function getClientEntityData(): array |
Вернет данные для поля типа "Клиент". Эти данные будут доступны после вызова метода processByItem . | |
public static function getUtmEntityData(Item $item): string |
Вернет html для отрисовки поля с UTM-метками. | |
public static function getLocationFieldHtml (Item $item, string $fieldName): ?string
|
Вернет html для отрисовки поля "Местоположение". | |
public function processByItem (Item $item, EO_Status_Collection $stages, array $componentParameters = []): self
|
Запустит обработку для элемента $item. Добавление дополнительных полей и данных должно производиться до вызова этого метода. | |
public function saveClientData (Item $item, string $clientJson): Result
|
Обработает данные о клиенте с фронтенда и произведет необходимые манипуляции с элементом (добавит связи / удалит связи).
Этот метод не производит запись изменений в базу данных. Вернет объект Result , где в данных по ключу processedEntities будет находиться массив идентификаторов элементов, которые были обработаны.
| |
public function saveClientData (Item $item, string $clientJson): Result
|
Обработает данные о клиенте с фронтенда и произведет необходимые манипуляции с элементом (добавит связи / удалит связи).
Этот метод не производит запись изменений в базу данных. Вернет объект Result , где в данных по ключу processedEntities будет находиться массив идентификаторов элементов, которые были обработаны.
| |
public function saveProductsData (Item $item, string $productsJson): Result
|
Обработает данные о товарах с фронтенда и запишет обновленные данные в элемент.
Этот метод не производит запись изменений в базу данных. Вернет объект Result .
| |
public function saveRelations (Item $item, array $data): void
|
Обработает данные из родительских полей о связях и сохранит изменения в базе данных. | |
public function setContext(array $context): void |
Запишет контекст для универсального редактора. | |
public function getContext(): array |
Вернет контекст для универсального редактора. | |
public static function combineConfigIntoOneSection (array $entityConfig, string $title = null): array
|
Соберет все контролы из $entityConfig в один раздел с кодом main и заголовком $title. Вернет новую версию конфига. | |
public static function markFieldsAsRequired (array $entityFields, array $requiredFieldNames): array
|
Пометит все поля из набора $requiredFieldNames в конфиге $entityFields как обязательные. Вернет новую версию конфига. | |
public static function getParentFieldName (int $parentEntityTypeId): string |
Вернет код поля для родителя с идентификатором типа CRM $parentEntityTypeId. |
Примеры
use Bitrix\Crm\Service; $factory = Service\Container::getInstance()->getFactory(\CCrmOwnerType::Quote); $editorAdapter = $factory->getEditorAdapter(); $editorAdapter->addEntityField([ 'name' => 'MY_FIELD' , 'title' => 'Title', 'type' => 'string', ]); $item = $factory->getItem(13); $editorAdapter ->processByItem($item, $factory->getStages()) ->addEntityData('MY_FIELD', 'actual_value') ; $entityData = $editorAdapter->getEntityData(); $entityFields = $editorAdapter->getEntityFields();
© «Битрикс», 2001-2024, «1С-Битрикс», 2024
Пользовательские комментарии
Мы будем рады, если разработчики добавят свои комментарии по практическому использованию методов системы.Для этого нужно всего лишь авторизоваться на сайте
Но помните, что Пользовательские комментарии, несмотря на модерацию, не являются официальной документацией. Ответственность за их использование несет сам пользователь.
Также Пользовательские комментарии не являются местом для обсуждения функционала. По подобным вопросам обращайтесь на форумы.