Проблема импорта файлов ZEXP программно - PullRequest
0 голосов
/ 29 марта 2011

Я разрабатываю Plone-продукт, которому необходимо программно импортировать объекты, ранее экспортированные в файлы ZEXP.Работает отлично, кроме панели навигации.Когда один объект импортируется, он делает это правильно, но панель навигации не обновляется.Доступ к объекту можно получить через его URL-адрес и его вкладку содержимого родительского контейнера.

Ниже приведен код, который я использовал для импорта объектов.Он основан на реализации zope ObjectManager._importObjectFromFile.

def importDocument( app, fileName, container ):
    app._p_jar.sync()   

    owner = 1

    connection = container._p_jar
    ob = connection.importFile( config.REMOTE_DIR + fileName, customImporters={ magic: importXML, } )

    id = ob.id
    if hasattr(id, 'im_func'): id = id()

    try:
        container._setObject( id, ob, set_owner = owner, suppress_events=False )
    except AttributeError:
        print "AttributeError"

    # Try to make ownership implicit if possible in the context
    # that the object was imported into
    ob = container._getOb( id )
    ob.manage_changeOwnershipType( explicit = 0 )

    transaction.commit()

    return True

Я заметил, что реализация _setObject запускает событие ObjectAddedEvent в своем коде, и именно после этого события меню обновляется, когда я использую интерфейс ZMI.чтобы импортировать объект, я решил, что что-то слушает это событие и обрабатывает меню, но, как ни странно, этого не происходит при использовании моего кода.

Ответы [ 3 ]

0 голосов
/ 31 марта 2011

Вообще говоря, импорт объектов zexp не поддерживается (частично из-за подобных случаев, когда могут возникнуть непредвиденные или непреднамеренные результаты).Если это работает, отлично.Если этого не произойдет, вы «по своему усмотрению» и, возможно, лучше скопировать файл Data.fs в новый программный стек.

Тем не менее, я не уверен, что понимаю, почему очистить и восстановитьКаталог (ZMI -> portal_catalog -> вкладка «продвижение» -> «очистить и перестроить») не является ответом здесь.Согласно его описанию, его работа заключается в том, чтобы «обходить весь портал в поисках объектов контента, которые должны быть проиндексированы в каталоге, и индексировать их».

Если я не понимаю вас, вы только что описали ситуацию, когда недавно импортированный контент«должен быть проиндексирован», потому что он еще не был проиндексирован.

Если вас беспокоит продолжительность времени, необходимого для очистки и восстановления, попробуйте запустить его из командной строки примерно так:

Если вас беспокоит сканирование всего сайта, вызовите indexObject () для каждого объекта (http://dev.plone.org/plone/browser/plone.org/Products.PloneOrg/trunk/scripts/catalog_rebuild.py#L109)

0 голосов
/ 31 марта 2011
  1. Вам может понадобиться "опубликовать" объект после импорта, чтобы сделать его видимым.

  2. Вместо этого используйте метод manage_importObject.

0 голосов
/ 30 марта 2011

Может быть, попытаться вручную перестроить весь каталог после завершения импорта? Это может дать вам больше советов о том, что не так ...

ZMI -> portal_catalog -> вкладка «продвижение» -> «очистить и перестроить».

...