Здравствуйте! Раньше был портал коробка старый стоял на 7.1 php и bitrixvm
Так уже получилось что решили сделать новый портал на Astre, его полностью настроили ошибок не выдает, стоит php 8.0
Вопрос у нас есть старый импорт, я все сделал по аналогии со старым порталом (доп поля, временная таблица и везде ID подставил нужные), вроде показывает что отработал, но ничего не добавляет, подскажите пожалуйста куда копать
Подозреваю что ошибка идёт от
Сам код импорта такой
Так уже получилось что решили сделать новый портал на Astre, его полностью настроили ошибок не выдает, стоит php 8.0
Вопрос у нас есть старый импорт, я все сделал по аналогии со старым порталом (доп поля, временная таблица и везде ID подставил нужные), вроде показывает что отработал, но ничего не добавляет, подскажите пожалуйста куда копать
Подозреваю что ошибка идёт от
Код |
---|
$bs->Add($arFields); $added++; |
Сам код импорта такой
Код |
---|
<?php require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php"); /* * Настройки */ require($_SERVER["DOCUMENT_ROOT"]."/1c_exchange/core/options.php"); /* * Функции */ require($_SERVER["DOCUMENT_ROOT"]."/1c_exchange/core/functions.php"); /* * получение файла, проверка на открытие */ $reader = new XMLReader(); $xmlfile = GetXML("sections",false); /*echo "<pre>"; var_dump($xmlfile); echo "</pre>";*/ if (!$reader->xml($xmlfile)){ $error_text = date("d.m.Y H:i:s")." - Импорт сотрудников: полученный ответ от веб-сервиса не удалось открыть на чтение, как xml файл"; hlb_import_log($error_text); die($error_text); } //очищаем таблицу от предыдущих данных $sql_delete_request = "DELETE FR OM b_dl_import_company"; /* todo заранее создать * перебор файла - сохраняем во временную таблицу b_dl_import_company * CRE ATE TABLE b_dl_import_company ( `ID` INT NOT NULL AUTO_INCREMENT, `INDEX` VARCHAR(200), `DELETE` VARCHAR(10), `NAME` VARCHAR(255), `XML_ID` VARCHAR(255), `HEAD` VARCHAR(255), `DEPTH_LEVEL` int, `PARENT_SECTION` VARCHAR(255), PRIMARY KEY(`ID`) ); */ //новый импорт - очищаем текущую временную таблицу global $DB; $DB->Query($sql_delete_request); //чтение ответа веб сервиса while ($reader->read()): if ($reader->nodeType == XMLReader::ELEMENT && $reader->name == 'm:object'){ $data = new XMLReader(); $data->xml($reader->readOuterXML()); $Fields = array(); while($data->read()){ switch ($data->name){ case "m:name": $v = $data->readInnerXML(); if(strlen($v)>0 && !isset($Fields["NAME"]))$Fields["NAME"] = $v; break; //внешний код case "m:loginAD": $v = $data->readInnerXML(); if(strlen(trim($v))>0)$Fields["HEAD"] = trim($v); break; //внешний код case "m:level": $v = $data->readInnerXML(); if(strlen($v)>0)$Fields["DEPTH_LEVEL"] = $v; break; //внешний код case "m:subdivisioncode": $v = $data->readInnerXML(); if(strlen($v)>0)$Fields["CODE"] = $v; break; //внешний код } if ($data->nodeType == XMLReader::ELEMENT && $data->name == 'm:objectID'){ $dataID = new XMLReader(); $dataID->xml($data->readOuterXML()); while($dataID->read()){ switch ($dataID->name){ case "m:id": $v = $dataID->readInnerXML(); if(strlen($v)>0 && !isset($Fields["XML_ID"]))$Fields["XML_ID"] = $v; break; //внешний код } } } } } if($reader->nodeType == XMLReader::ELEMENT && $reader->name == 'm:parentID'){ $dataParentID = new XMLReader(); $dataParentID->xml($reader->readOuterXML()); while($dataParentID->read()){ switch ($dataParentID->name){ case "m:id": $v = $dataParentID->readInnerXML(); if(strlen($v)>0)$Fields["PARENT_SECTION"] = $v; break; //внешний код } } $sql_request = "INS ERT INTO `b_dl_import_company` (`INDEX`,`NAME`,`XML_ID`,`HEAD`,`DEPTH_LEVEL`,`PARENT_SECTION`) VALUES('{$Fields["CODE"]}','{$Fields["NAME"]}','{$Fields["XML_ID"]}','{$Fields["HEAD"]}',{$Fields["DEPTH_LEVEL"]},'{$Fields["PARENT_SECTION"]}')"; $res = $DB->Query($sql_request); } endwhile; /* * запрос из временной таблицы с сортировкой по уровню вложенности и сортировкой по ид + ограничением из настроек */ $sel ect = "SELE CT * FR OM `b_dl_import_company` WH ERE `DEPTH_LEVEL`>0 ORDER BY `DEPTH_LEVEL` ASC, `id` ASC"; $res = $DB->Query($select); /* * цикл по результату запроса */ $XML_ID_UPDATE = array(); while($ar = $res->Fetch()){ /* todo или всегда полная выгрузка? * Пометка на удаление? - находим и удаляем */ $bs = new CIBlockSection; /* * сбор информации по подразделению */ $head_id = 0; if(strlen($ar["HEAD"])>0){ $filter = Array("LOGIN_EQUAL"=> $ar["HEAD"]); $reshead = CUser::GetList(($by="id"), ($order="desc"), $filter, array("SELECT"=>array("UF_*"), "FIELDS"=>array("ID","LOGIN"))); while($arhead = $reshead->fetch()){ if($arhead["LOGIN"]==$ar["HEAD"]) $head_id = $arhead["ID"]; } } $arFields = Array( "ACTIVE" => "Y", "XML_ID" => $ar["XML_ID"], "CODE" => $ar["INDEX"], "IBLOCK_ID" => 3, "NAME" => $ar["NAME"], ); if($head_id>0) { $arFields["UF_HEAD"] = (int)$head_id; }else{ $arFields["UF_HEAD"] = ''; } if($ar["DEPTH_LEVEL"]>0){ $arFields["IBLOCK_SECTION_ID"] = CIBlockSection::GetList(array(), array("IBLOCK_ID"=>3,"XML_ID"=>$ar["PARENT_SECTION"]), false, array("ID"))->Fetch()["ID"]; if(is_null($arFields["IBLOCK_SECTION_ID"])); } $XML_ID_UPDATE[] = $ar["XML_ID"]; $resSectionFind = CIBlockSection::GetList(Array(), array("IBLOCK_ID"=>3,"XML_ID"=>$ar["XML_ID"]), Array("nPageSize"=>1), array("ID")); if($arSectionFind = $resSectionFind->Fetch()){ //обновляем $bs->Update($arSectionFind["ID"], $arFields); $updated++; }else{ //создаем $bs->Add($arFields); $added++; } } //удаление if(!empty($XML_ID_UPDATE)){ $resSectionDel = CIBlockSection::GetList(Array(), array("IBLOCK_ID"=>3,">DEPTH_LEVEL"=>1, "!XML_ID"=>$XML_ID_UPDATE), false, array("ID")); while ($arDel = $resSectionDel->Fetch()){ $deleted++; CIBlockSection::Delete($arDel["ID"]); } } /* * Логируем успешное выполнение */ $result = array( "Выполшнение" => "Успешно", "Обработано подразделений"=> ($deleted+$updated+$added), "Удалено" => $deleted, "Обновлено" => $updated, "Добавлено" => $added, ); hlb_import_log($result,"ok"); /* * Очищаем таблицу b_dl_import_company, возвращаем success */ //$DB->Query($sql_delete_request); die("success"); |