• Модуль: crm
  • Путь к файлу: ~/bitrix/modules/crm/lib/rest/externalchannel.php
  • Класс: Bitrix\Crm\Rest\CCrmExternalChannelImportRequisite
  • Вызов: CCrmExternalChannelImportRequisite::import
public function import(&$fields)
{
	$result = new Result();
	$import = new Result();
	$batch = array();

	if(!$this->isValidID($this->getOwnerEntityId()))
	{
		$import->addError(new Error("EntityId is not defined or invalid", 8001));
	}
	else
	{
		$proccessList = array();

		$r = $this->checkFields($fields);

		if($r->getErrors())
		{
			$import->addErrors($r->getErrors());
		}
		else
		{
			if(is_set($fields, CCrmExternalChannelImport::FIELDS_REQUISITE) && count($fields[CCrmExternalChannelImport::FIELDS_REQUISITE])>0)
			{
				$bank = new CCrmExternalChannelImportBank();
				$bank->setOwnerEntity($this);
				$bank->import = $this->import;

				foreach($fields[CCrmExternalChannelImport::FIELDS_REQUISITE] as $row=>$requisite)
				{
					$fields = $requisite;
					$this->sanitizeFields($requisite);
					$this->internalizeFields($requisite, $this->getFieldsInfo());
					$this->fillFields($requisite);

					$res = $this->innerList(array(
						'=ENTITY_ID' => $this->getOwnerEntityId(),
						'=XML_ID' => $requisite['XML_ID'],
					));

					if($r = $res->fetch())
					{
						$this->prepareFieldsAddress($requisite);
						$id = $r['ID'];
						$errors = [];
						$r = $this->innerUpdate($id, $requisite, $errors);
					}
					else
					{
						$errors = [];
						$r = $this->innerAdd($requisite, $errors);
						$data = $r->getData();
						$id = $data['RESULT'];
					}

					if($r->getErrors())
					{
						$batch[$row]['errors'] = $r->getErrors();
					}
					elseif($this->isValidID((int)$id))
					{
						$proccessList[] = $id;

						$bank->setOwnerEntityId($id);
						$r = $bank->import($fields);
						if($r->getErrors())
						{
							$batch[$row]['banks'] = $r->getData();
						}
					}
				}

				if(count($batch)<=0)
				{
					$r = $this->deleteEntities($proccessList);
					if($r->getErrors())
						$import->addErrors($r->getErrors());
				}
			}
			else
			{
				$r = $this->deleteEntities(array());
				if($r->getErrors())
					$import->addErrors($r->getErrors());
			}
		}
	}

	if($import->getErrors() || count($batch)>0)
	{
		$result->addError(new Error('','IMPORT_ERROR'));
		$result->setData(array(
			'IMPORT_ERROR'=>$import->getErrors(),
			'BATCH_ERROR'=>$batch
		));
	}

	return $result;
}