Документация для разработчиков
Темная тема

Встройка в лид в виде пользовательского свойства

Пример добавления в карточку лида собственного пользовательского свойства. Работа примера происходит следующим образом: после первого взаимодействия с свойством в карточке редактирования лида всегда, даже в режиме просмотра, будет подгружаться обработчик от приложения. Обработчик производит запрос к внешнему API для получения региона и оператора данного телефона на территории РФ.

Внимание! Для использования примера настройте работу класса CRest и подключите файл crest.php в файлах, где используется данный класс. Подробнее.

Код установки свойств (вызывается один раз), где $handlerUrl - путь до файла обработчика свойства.

<?
$handlerUrl = 'https://yourdomain.yyy/handler.php';
$type = 'phone_data';
$propCode = 'PHONE_DATA';//max length with prefix UF_CRM_ 20 char

$resultAddPropType = CRest::call(
	'userfieldtype.add',
	[
		'USER_TYPE_ID' => $type,
		'HANDLER' => $handlerUrl,
		'TITLE' => 'custom type title',
		'DESCRIPTION' => 'custom description '.$type
	]
);

if ($resultAddPropType['result'] == true)
{
	echo 'property type ' . $type . ' has been added successful <br>';
	$resultAddProp = CRest::call(
		'crm.lead.userfield.add',
		[
			'fields' => [
				'USER_TYPE_ID' => $type,
				'FIELD_NAME' => $propCode,
				'XML_ID' => $propCode,
				'MANDATORY' => 'N',
				'SHOW_IN_LIST' => 'Y',
				'EDIT_IN_LIST' => 'Y',
				'EDIT_FORM_LABEL' => 'My string',
				'LIST_COLUMN_LABEL' => 'My string description',
				'SETTINGS' => []
			]
		]
	);
	if ($resultAddProp['error'])
	{
		echo $resultAddProp['error'] . ': ' . $resultAddProp['error_description'];
	}
	else
	{
		echo 'property ' . $propCode . ' has been added successful <br>';
	}
}
elseif ($resultAddPropType['error'])
{
	echo $resultAddPropType['error'] . ': ' . $resultAddPropType['error_description'];
}
?>

Файл обработчика, который вы указали в переменной $handlerUrl в коде выше:

<?
$placementOptions = isset($_REQUEST['PLACEMENT_OPTIONS']) ? json_decode($_REQUEST['PLACEMENT_OPTIONS'], true) : array();
if ($_REQUEST['PLACEMENT'] == 'USERFIELD_TYPE'):
	$value = htmlspecialchars($placementOptions['VALUE']);
	if ($placementOptions['ENTITY_ID'] == 'CRM_LEAD' && $placementOptions['ENTITY_VALUE_ID'] > 0)
	{
		$result = CRest::call(
			'crm.lead.list',
			[
				'filter' => ['ID' => intVal($placementOptions['ENTITY_VALUE_ID'])],
				'select' => ['ID', 'PHONE']
			]
		);
		if (!empty($result['result'][0]['PHONE'][0]['VALUE']))
		{
			$value = trim($result['result'][0]['PHONE'][0]['VALUE']);
			$data =  file_get_contents('http://api.bitroid.info/phone/?q='.$value);
			if($data)
			{
				$valueData = json_decode($data,true);
				if(!$valueData['error'])
				{
					$value = implode(', ', [$valueData['org'],$valueData['region']]);
				}
				else
				{
					$value = 'error: '.$valueData['error'];
				}
			}
			else
			{
				$value = 'no data in base'.$value;
			}
		}
		else
		{
			$value = 'no data';
		}
	}


	?>
	<!DOCTYPE html>
	<html>
		<head>
			<script src="//api.bitrix24.com/api/v1/dev/"></script>
		</head>
		<body style="margin: 0; padding: 0; background-color: <?=$placementOptions['MODE'] === 'edit' ? '#fff'
			: '#f9fafb'?>;">
			<?
			if ($placementOptions['MODE'] === 'edit'): ?>
				<input type="text" style="width: 90%;" value='<?=$value?>' onkeyup="setValue(this.value)">
				<script>
					function setValue(value)
					{
						BX24.placement.call('setValue', value);
					}

					BX24.placement.call('setValue', '<?=$value?>');
				</script>

			<? else: ?>
				<?=$value?>
			<? endif;
			?>
		</body>
	</html>
<? endif;?>



Пользовательские комментарии

Мы будем рады, если разработчики добавят свои комментарии по практическому использованию методов системы.

Для этого нужно всего лишь авторизоваться на сайте

Но помните, что Пользовательские комментарии, несмотря на модерацию, не являются официальной документацией. Ответственность за их использование несет сам пользователь.

Также Пользовательские комментарии не являются местом для обсуждения функционала. По подобным вопросам обращайтесь на форумы.
© «Битрикс», 2001-2024, «1С-Битрикс», 2024