UMIhelp

Разработка дополнительного функционала => Custom макросы => Тема начата: Rodogor от 24 Января 2013, 13:51:09

Название: Импорт данных по cron. xmlImporter
Отправлено: Rodogor от 24 Января 2013, 13:51:09
Здравствуйте.

Сделал кастомный макрос import_do, вызываемый в админке при использование модуля "обмен данными", при нажатие кнопки "выполнить импорт". Кастомность - не использование кукизов для хранения перемещений по xml документы при импорте.

Кастом макрос запускается по крону.

Захожу руками на cron.php - всё выполняется без проблем, работает корректно.
Запускается по крону - создаваемые объекты получаются без заполненных полей (name, title, 1с специфические и т.п.)... Названия объектов = ид из импорта, page @Id.
<page id="{@Идентификатор}" parentId="{$catalog-id}" type-id="root-catalog-category-type">

Тут же удаляю объекты, запускаю через адресную строку - всё корректно добавляется.

Никто не сталкивался с чем-нибудь подобным ?
Название: Re:Импорт данных по cron. xmlImporter
Отправлено: admin от 25 Января 2013, 15:18:43
нет, но как вариант, добавил в код import_do механизм сохранения в файл промежуточных результатов импорта. На предмет выяснения, в какой момент он теряет эти данные: не подхватывает из файла источника, при обработке или при создании\изменении объектов в системе.
Название: Re:Импорт данных по cron. xmlImporter
Отправлено: Rodogor от 11 Марта 2013, 12:04:42
Я просто в ступоре... Локализовал место, где теряются данные - это umiTemplaterXSLT::parse
Закомментил всё, что без чего может работать, оставил минимум кодэ

public function parse($variables, $content = null) {
if (is_null($this->domXSL)) {
$this->domXSL = $this->prepareXSL($this->templatesSource);
}
$domXML = ($this->domXML instanceof DOMDocument) ? $this->domXML : $this->prepareXML($variables);
$xslt = new xsltProcessor;
$xslt->registerPHPFunctions();
$er = errorsXsltListen();
$xslt->importStyleSheet($this->domXSL);
$res =  $xslt->transformToXML($domXML);
var_dump($res);
errorsXsltCheck($er);
exit;
return $res;
}

Вывожу под админом - всё норм
Цитировать
commerceML2 Объекты каталога Разделы каталога 0 1 Разделы каталога 0 0 Объекты каталога Тест Тест Тест commerceML2
Вывожу под гостем - тут косяк
Цитировать
commerceML2 Объекты каталога Разделы каталога NaN NaN Разделы каталога NaN NaN Объекты каталога commerceML2

Найти закономерность и связь с админом/не админом не могу, ведь не umi забабахали xsltProcessor.
Все остальные данные 1в1 под гостем и под админом ($this->domXSL, стили и т.п.)....
Уже не знаю куда смотреть... Разве что сделать пользователя для крона и дать ему админа..

Название: Re:Импорт данных по cron. xmlImporter
Отправлено: admin от 11 Марта 2013, 14:50:12
возможно они теряются вот тут...

$this->prepareXSL

или тут
$this->prepareXML

Особенно последний меня заинтересовал. Он ведь работает через стандартный api... сразу появилось желание посмотреть права на страницы которые обрабатываются cron'ом, нет ли у них каких своих прав или посмотреть на права гостя, есть ли у него права на использования функций импорта? особенно ту, что была добавлена как кастомная....
Название: Re:Импорт данных по cron. xmlImporter
Отправлено: Rodogor от 11 Марта 2013, 16:21:22
Кастомная функция вызывает вот этот системный метод. Права естественно даны

Я после каждого шага выводил промежуточные результаты и сравнивал. Открывал просто два браузера рядом и выводил один и тот же код - всё было одинаково.

Я ещё раз проверю эти функци...
Название: Re:Импорт данных по cron. xmlImporter
Отправлено: Rodogor от 13 Марта 2013, 15:08:01
Проблему решил, окончательно сформировать суть возникновения не готов, но если бы я это сам не видел, то не поверил бы.
Я пошёл в сильный блудняк с umiTemplaterXSLT, Templater и т.п...
В моём xsl файле импорта вызывались кастомные методы. Вот для них не срабатывали permisions и доступ не открывался. А там у меня все поля, которые я заполнял, получались через вызов этих кастомных методов (просто 1с 7.7 весьма туго работает с выгрузками и поэтому я много передавал в название товара, а потом парсил со своей стороны).
Я в один из таких методов вставил var_dump(111); exit; и выполнил кастом, запускающий импорт... И не увидел var_dump... Обратился через адресную строку к методу с var_dump и увидел 111, как и должно быть... Пара минут на эксперименты с тем, какие классы могут выполняться, какие нет... В итоге мои макросы оказались внутри класса system.
Будет время - разбирусь с причинами...
Название: Re:Импорт данных по cron. xmlImporter
Отправлено: admin от 15 Марта 2013, 07:42:13
а где лежали изначально ваши кастомы, когда они не срабатывали?
Название: Re:Импорт данных по cron. xmlImporter
Отправлено: Rodogor от 17 Марта 2013, 19:02:09
Кастомы были внутри custom модуля emarket. Права были прописаны. Я вызывал мой чудо-метод с импортом - var_dump не срабатывал. Вызывал напрямую метод, который должен отдать var_dump - и он отдавал.

Название: Re:Импорт данных по cron. xmlImporter
Отправлено: admin от 18 Марта 2013, 01:38:45
лечить зубы по фотографии становиться сложно, так что, без возможности взглянуть в живую не вижу смысла искать причину  ;)

P.S. В итоге все заработало?
Название: Re:Импорт данных по cron. xmlImporter
Отправлено: Rodogor от 18 Марта 2013, 13:56:53
Да, решил ещё 13 марта.