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

Поиск в CRM по телефону и e-mail

Пример отображает форму для ввода телефона и e-mail. Ниже формы выводится таблица с результатом поиска по столбцам:

  • id сущности
  • сущность
  • заголовок
  • телефоны сущности
  • емаилы сущности

Код через поиск дубликатов находит все сущности (лид, контакт, компания) у которых есть указанный телефон/е-маил. Потом из списка всех ID получается информация о каждой сущности:

  • заголовок или имя фамилия
  • все телефоны
  • e-mail

и выводится в таблице.

<?
	include('crest.php');
	$phone = ($_POST['PHONE'])?htmlspecialchars($_POST['PHONE']):false;
	$email = ($_POST['EMAIL'])?htmlspecialchars($_POST['EMAIL']):false;
	
	$entityIDs = [
		'LEAD' => [],
		'CONTACT' => [],
		'COMPANY' => []
	];
	$resultEntity = [
		'lead' => [],
		'contact' => [],
		'company' => []
	];

	if($phone)
	{
		$result = CRest::call('crm.duplicate.findbycomm', [
			'type' => 'PHONE',
			'values' => [$phone]
		]);
		if(is_array($result['result']['LEAD']))
		{
			$entityIDs['LEAD'] = array_merge($entityIDs['LEAD'], $result['result']['LEAD']);
		}
		if(is_array($result['result']['CONTACT']))
		{
			$entityIDs['CONTACT'] = array_merge($entityIDs['CONTACT'], $result['result']['CONTACT']);
		}
		if(is_array($result['result']['COMPANY']))
		{
			$entityIDs['COMPANY'] = array_merge($entityIDs['COMPANY'], $result['result']['COMPANY']);
		}
	}
	if($email)
	{
		$result = CRest::call('crm.duplicate.findbycomm', [
			'type' => 'EMAIL',
			'values' => [$email]
		]);
		if(is_array($result['result']['LEAD']))
		{
			$entityIDs['LEAD'] = array_merge($entityIDs['LEAD'], $result['result']['LEAD']);
		}
		if(is_array($result['result']['CONTACT']))
		{
			$entityIDs['CONTACT'] = array_merge($entityIDs['CONTACT'], $result['result']['CONTACT']);
		}
		if(is_array($result['result']['COMPANY']))
		{
			$entityIDs['COMPANY'] = array_merge($entityIDs['COMPANY'], $result['result']['COMPANY']);
		}
	}

	if(!empty($entityIDs['LEAD']))
	{
		$result = CRest::call(
			'crm.lead.list',
			[
				'filter' => [
					'ID' => $entityIDs['LEAD']
				],
				'select' =>	 [
					'ID', 'NAME', 'LAST_NAME', 'PHONE', 'EMAIL', 'TITLE'
				]
			]
		);
		if(!empty($result['result']))
		{
			$resultEntity['lead'] =  $result['result'];
		}
	}
	if(!empty($entityIDs['CONTACT']))
	{
		$result = CRest::call(
			'crm.contact.list',
			[
				'filter' => [
					'ID' => $entityIDs['CONTACT']
				],
				'select' =>	 [
					'ID', 'NAME', 'LAST_NAME', 'PHONE', 'EMAIL'
				]
			]
		);
		if(!empty($result['result']))
		{
			$resultEntity['contact'] =  $result['result'];
		}
	}
	if(!empty($entityIDs['COMPANY']))
	{
		$result = CRest::call(
			'crm.company.list',
			[
				'filter' => [
					'ID' => $entityIDs['COMPANY']
				],
				'select' =>	 [
					'ID', 'PHONE', 'EMAIL', 'TITLE'
				]
			]
		);
		if(!empty($result['result']))
		{
			$resultEntity['company'] =  $result['result'];
		}
	}
?>
<!DOCTYPE html>
<html lang="ru">
	<head>
		<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" crossorigin="anonymous">
	</head>
	<body class="container">
		<form method="post" action="">
			<div class="row">
				<div class="col-4 mt-3">
					<label>E-mail*</label>
				</div>
				<div class="col-6 mt-3">
					<input type="text" name="EMAIL" value="<?=$email?>">
				</div>
			</div>
			<div class="row">
				<div class="col-4 mt-3">
					<label>Phone*</label>
				</div>
				<div class="col-6 mt-3">
					<input type="text" name="PHONE" value="<?=$phone?>">
				</div>
			</div>
			<div class="row">
				<div class="col-sm-10">
					<input type="submit" name="SEARCH" class="btn btn-primary" value="Search">
				</div>
			</div>
		</form>
		<table class="table mt-5">
			<thead>
				<tr>
					<th scope="col">ID</th>
					<th scope="col">Entity</th>
					<th scope="col">Title</th>
					<th scope="col">Phones</th>
					<th scope="col">Emails</th>
				</tr>
			</thead>
			<tbody>
				<? foreach($resultEntity as $entity=>$items):?>
					<? foreach($items as $item):
						$phones = '';
						if(!empty($item['PHONE']))
						{
							$item['PHONE'] = array_column($item['PHONE'],'VALUE');
							$phones = implode(', ', $item['PHONE']);
						}

						$emails = '';
						if(!empty($item['EMAIL']))
						{
							$item['EMAIL'] = array_column($item['EMAIL'],'VALUE');
							$emails = implode(', ', $item['EMAIL']);
						}

						$title = '';
						if($item['TITLE'])
						{
							$title = $item['TITLE'].(($item['NAME'] || $item['LAST_NAME'])?': ':'');
						}
						if($item['NAME'] || $item['LAST_NAME'])
						{
							$title .= implode(' ',[$item['NAME'], $item['LAST_NAME']]);
						}
						?>
						<tr>
							<th scope="row"><?=$item['ID']?></th>
							<td><?=$entity?></td>
							<td><?=$title?></td>
							<td><?=$phones?></td>
							<td><?=$emails?></td>
						</tr>
					<? endforeach?>
				<? endforeach?>
			</tbody>
		</table>
	</body>
</html>

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

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

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

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

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