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

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

Пример добавления в карточку лида собственного пользовательского свойства. Работа примера происходит следующим образом: после первого взаимодействия с свойством в карточке редактирования лида всегда, даже в режиме просмотра, будет подгружаться обработчик от приложения. Обработчик производит запрос к внешнему 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