1. Работа с пользовательскими полями в старом ядре Bitrix
В старом ядре Bitrix для работы с группами пользователей используется класс CUserTypeEntity.
Получить все пользовательские поля сделок:
$userFields = CUserTypeEntity::GetList([], ['ENTITY_ID' => 'CRM_DEAL']);
while ($field = $userFields->Fetch()) {
print_r($field);
}
//ENTITY_ID:
//CRM_LEAD
//CRM_DEAL
//CRM_CONTACT
//CRM_COMPANY
$userField = CUserTypeEntity::GetList([],
['ENTITY_ID' => 'CRM_LEAD', 'FIELD_NAME' => 'UF_CRM_671F87354448E'],
);
while ($field = $userField->Fetch()) {
print_r($field);
}
$userField = CUserTypeEntity::GetList([],
['ENTITY_ID' => ContactTable::getUfId(), 'FIELD_NAME' => 'UF_CRM_671F87354448E', 'LANG' => 'ru']
);
while ($field = $userField->Fetch()) {
print_r($field);
}
Если есть названия на других языках, для их сохранения их так же надо передавать при обновлении, иначе они будут заданы как пустые
$userField = CUserTypeEntity::GetList([],
[
'ENTITY_ID' => 'CRM_CONTACT',
'FIELD_NAME' => 'UF_CRM_671F87354448E',
'LANG' => 'ru']
)->fetch();
$CUserTypeEntity = new CUserTypeEntity();
$CUserTypeEntity->Update($userField['ID'], [
'EDIT_FORM_LABEL' => [
'ru' => 'Новое название',
],
'LIST_COLUMN_LABEL' => [
'ru' => 'Новое название',
],
'LIST_FILTER_LABEL' => [
'ru' => 'Новое название',
]
]);
2. Работа с пользовательскими полями в новом ядре D7
В новом ядре D7 используется пространство имен Bitrix\Main\UserFieldTable и Bitrix\Main\UserFieldLangTable.
Получить все пользовательские поля сделок:
use Bitrix\Main\UserFieldTable;
use Bitrix\Crm\LeadTable;
use Bitrix\Crm\DealTable;
use Bitrix\Crm\ContactTable;
use Bitrix\Crm\CompanyTable;
$userField = UserFieldTable::getList([
'filter' => ['ENTITY_ID' => DealTable::getUfId()],
'select' => ['*'],
])->fetch();
//LeadTable::getUFId();
//DealTable::getUFId();
//ContactTable::getUFId();
//CompanyTable::getUFId();
use Bitrix\Main\UserFieldTable;
use Bitrix\Crm\LeadTable;
$userField = UserFieldTable::getList([
'filter' => ['FIELD_NAME' => 'UF_CRM_608BB5423A3A3', 'ENTITY_ID' => LeadTable::getUfId()],
'select' => ['*'],
])->fetch();
use Bitrix\Main\UserFieldTable;
use Bitrix\Crm\ContactTable;
$userFieldList = UserFieldTable::getList([
'filter' => ['FIELD_NAME' => 'UF_CRM_608BB5423A3A3', 'ENTITY_ID' => ContactTable::getUfId()],
'select' => ['*', 'LABELS'],
'runtime' => [
UserFieldTable::getLabelsReference('LABELS', 'ru'),
]
])->fetch();
use Bitrix\Main\UserFieldTable;
use Bitrix\Crm\ContactTable;
use Bitrix\Main\UserFieldLangTable;
$userField = UserFieldTable::getList([
'filter' => ['FIELD_NAME' => 'UF_CRM_671F87354448E', 'ENTITY_ID' => ContactTable::getUfId()],
'select' => [
'*',
'EDIT_FORM_LABEL' => 'LABELS.EDIT_FORM_LABEL',
'LIST_COLUMN_LABEL' => 'LABELS.LIST_COLUMN_LABEL',
'LIST_FILTER_LABEL' => 'LABELS.LIST_FILTER_LABEL',
'LANGUAGE_ID' => 'LABELS.LANGUAGE_ID',
],
'runtime' => [
UserFieldTable::getLabelsReference('LABELS', 'ru'),
]
])->fetch();
$result = UserFieldLangTable::update(
[
'USER_FIELD_ID' => $userField['ID'],
'LANGUAGE_ID' => $userField['LANGUAGE_ID']
],
[
'EDIT_FORM_LABEL' => 'Новое название',
'LIST_COLUMN_LABEL' => 'Новое название',
'LIST_FILTER_LABEL' => 'Новое название'
]
);
if($result->isSuccess()) {
echo 'Успешно обновлено';
} else {
echo 'Ошибка обновления';
}
use Bitrix\Main\UserFieldTable;
use Bitrix\Crm\ContactTable;
use Bitrix\Main\UserFieldLangTable;
$fields = [
'UF_CRM_',
'UF_CRM_',
'UF_CRM_',
];
$entity = ContactTable::getUfId();
foreach ($fields as $field) {
$userFields = UserFieldTable::getList([
'filter' => ['FIELD_NAME' => $field, 'ENTITY_ID' => $entity],
'select' => [
'*',
'EDIT_FORM_LABEL' => 'LABELS.EDIT_FORM_LABEL',
'LIST_COLUMN_LABEL' => 'LABELS.LIST_COLUMN_LABEL',
'LIST_FILTER_LABEL' => 'LABELS.LIST_FILTER_LABEL',
'LANGUAGE_ID' => 'LABELS.LANGUAGE_ID',
],
'runtime' => [
UserFieldTable::getLabelsReference(),
]
]);
while ($userField = $userFields->fetch()) {
$result = UserFieldLangTable::update(
[
'USER_FIELD_ID' => $userField['ID'],
'LANGUAGE_ID' => $userField['LANGUAGE_ID']
],
[
'EDIT_FORM_LABEL' => 'Новое название',
'LIST_COLUMN_LABEL' => 'Новое название',
'LIST_FILTER_LABEL' => 'Новое название',
]
);
}
}