DuplicateChecker::findDuplicates

  1. Bitrix24 API (v. 23.675.0)
  2. crm
  3. DuplicateChecker
  4. findDuplicates
  • Модуль: crm
  • Путь к файлу: ~/bitrix/modules/crm/lib/integrity/duplicatechecker.php
  • Класс: Bitrix\Crm\Integrity\DuplicateChecker
  • Вызов: DuplicateChecker::findDuplicates
public function findDuplicates(\Bitrix\Crm\EntityAdapter $adapter, DuplicateSearchParams $params);
public function findMultifieldDuplicates($type, \Bitrix\Crm\EntityAdapter $adapter, DuplicateSearchParams $params)
{
	if(!is_string($type))
	{
		throw new Main\ArgumentTypeException('type', 'string');
	}

	if($type !== 'EMAIL' && $type !== 'PHONE')
	{
		throw new Main\NotSupportedException("Type: '{$type}' is not supported in current context");
	}

	$allMultiFields =  $adapter->getFieldValue('FM');
	$multiFields = is_array($allMultiFields) && isset($allMultiFields[$type]) ? $allMultiFields[$type] : null;
	if(!is_array($multiFields) || empty($multiFields))
	{
		return array();
	}

	$criterions = array();
	$dups = array();
	foreach($multiFields as &$multiField)
	{
		$value = isset($multiField['VALUE']) ? $multiField['VALUE'] : '';
		if($value === '')
		{
			continue;
		}

		$criterion = new DuplicateCommunicationCriterion($type, $value);
		$criterion->setCategoryId($params->getCategoryId());

		$isExists = false;
		foreach($criterions as $curCriterion)
		{
			/** @var DuplicateCriterion $curCriterion */
			if($criterion->equals($curCriterion))
			{
				$isExists = true;
				break;
			}
		}

		if($isExists)
		{
			continue;
		}
		$criterions[] = $criterion;
		$duplicate = $criterion->find($params->getEntityTypeId() ?? \CCrmOwnerType::Undefined);
		if($duplicate !== null)
		{
			$dups[] = $duplicate;
		}
	}
	unset($multiField);
	return $dups;
}

Добавить комментарий