Я разрабатываю 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.чтобы импортировать объект, я решил, что что-то слушает это событие и обрабатывает меню, но, как ни странно, этого не происходит при использовании моего кода.