bitrix:catalog.import.hl & типы данных

В Битрикс встроен штатный механизм для импорта справочников из 1С, работу этого механизма обеспечивает компонент bitrix:catalog.import.hl.

Надо заметить что штатный механизм довольно хорошо работает, сразу из коробки он готов к приему и обновлению данных.

Компонент bitrix:catalog.import.hl парсит присланных из 1С .xml файл и создает Highload-блок, если его еще нет в системе. Помимо Highload-блока создаются все необходимые поля и записываются элементы.

Со стороны это кажется некой черной магией, 1С отправляет данные на сайт и все само по себе создается и записывается, просто сказка какая-то.

Но наступает момент когда сказочная тропа сворачивает не в ту сторону и мы оказываемся в дремучих дебрях непонимания.

Ближе к делу

Компонент bitrix:catalog.import.hl сам узнает нужно ли создавать Highload-блок и свойства к нему, также он автоматически определяет тип необходимых полей. Вот тут и встает вопрос - "А как он сопоставляет типы полей и какие вообще может создавать?"

Для того чтобы получить ответы на эти вопросы мы обратимся к коду компонента.


	$type = $xmlArray[GetMessage("CC_BCIH_XML_FIELD")]["#"][GetMessage("CC_BCIH_XML_FIELD_TYPE")][0]["#"];
	if ($type === GetMessage("CC_BCIH_XML_FIELD_TYPE_STRING"))      //CC_BCIH_XML_FIELD_TYPE_STRING =   Строка
		$type = "string";
	elseif ($type === GetMessage("CC_BCIH_XML_FIELD_TYPE_BOOL"))    //CC_BCIH_XML_FIELD_TYPE_BOOL   =   Булево
		$type = "boolean";
	elseif ($type === GetMessage("CC_BCIH_XML_FIELD_TYPE_DATE"))    //CC_BCIH_XML_FIELD_TYPE_DATE   =   Дата
		$type = "datetime";
	elseif ($type === GetMessage("CC_BCIH_XML_FIELD_TYPE_FLOAT"))   //CC_BCIH_XML_FIELD_TYPE_FLOAT  =   Число
		$type = "double";
	else
	{
		$this->error = GetMessage("CC_BCIH_XML_PARSE_ERROR", array("#CODE#" => 240));
		return;
	}
	

Для наглядности я добавил значения языковых ключей.
Итак из кода мы видим что идет обычное сравнение типа поля которое выгружается из 1С с четырьмя типами жестко указанными в коде компонента.
Шаг влево, шаг вправо - расстрел.


Оставить комментарий