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С с четырьмя типами жестко указанными в коде компонента.
Шаг влево, шаг вправо — расстрел.
Оставить комментарий