Deaktivieren Sie zunächst in der Ausgangsversion die automatische Indizierung und löschen den ZCatalog-Objekt per "Zope View".
Der empfohlender Update-Pfad sehr alter ZMS-Versionen lautet
Step 1. zms2-2.9.4-41.tar.gz
Step 2. zms2-2.10.3-18_1.tar.gz
Step 3. zms2-2.10.5-24.tar.gz
Step 4. zms2-2.13.4.1555.tar.gz
Step 5. zms-latest.tar.gz
Sollten diese Schritte nicht eingehalten sein oder die Daten werden per ZEXP von einem System auf das andere transportiert, kann die Entfernung alter ZMS-Artefakte, die im Rahmen der Update-Prozedur duchlaufen wurde, ausgeblieben sein und diese können in der ZODB persitieren. Auch wenn das Uopdate bei aktiver Dokument-Versionierung durchgeführt wurde, können Akrtefakte eines alten Content-Models im Baum unbemerkt "überleben". Schlimmstenfalls kann dies den Start der Zope-Instanz unterbrechen. Daher sollte in der letzten noch lauffähigen ZMS-Version bzw. bevor ein ZEXP-Eport durchgeführt das reduzierte metaobj-Modell des Zielsystem mit Hilfe des folgenden Py-Script erzeugt werden.
Typische Fehlermeldung beim ZEXP-Import verursacht durch residuale Artefakte im ZMS-Baum:
ErrorValue: No module named zmsgraphic
ErrorValue: No module named zmsfile.
Die Artefakte können mit dem folgenden Py-Script aus dem Baum gelöscht werden.
Zope-Script für die Artefakt-Entfernung
## Script (Python) "cleanup_html"
##bind container=container
##bind context=context
##bind namespace=
##bind script=script
##bind subpath=traverse_subpath
##parameters=
##title=
##
# doc_elmnt = container.content
doc_elmnt = context.content
invalid_keys = ['ZMSDocument','ZMSFolder','ZMSGraphic','ZMSLog','ZMSNote','ZMSRubrik','ZMSTable','ZMSTextarea','ZMSSysFolder','ZMSTeaserElement','ZMSTeaserContainer',]
def visit(context):
rtn = []
if context.meta_type=='Folder' or context.meta_type.startswith('ZMS'):
if context.meta_type.startswith('ZMS'):
d = context.operator_getattr(context,'__dict__')
rtn.append(context.absolute_url()+" "+context.meta_type+" "+str(filter(lambda x:not x.startswith("_"),d)))
for x in filter(lambda x:not x.startswith("_"),d.keys()):
try:
v = context.operator_getattr(context,x,None)
if v is not None:
t = str(context.operator_gettype(v))
if t=='<type \'Acquisition.ExplicitAcquisitionWrapper\'>':
context.operator_getattr(context,'_delObject')(x,suppress_events=True)
rtn.append(context.absolute_url()+" "+context.meta_type+" "+x+" DELETED")
except:
rtn.append(context.absolute_url()+" "+context.meta_type+" "+x+" DELETE FAILED")
for key in ['oRoot','oRootNode','oCurrNode','bInRootTag','bInCData',]:
val = context.operator_getattr(context,key,None)
if val is not None:
context.operator_delattr(context,key)
rtn.append(context.absolute_url()+" "+context.meta_type+" "+key+" DELETED")
for key in filter(lambda x:not x.startswith("_"),context.operator_getattr(context,'__dict__')):
val = context.operator_getattr(context,key,None)
if val is not None and str(val).startswith('{{') and context.operator_getattr(val,'aq_parent',None) is not None:
clone = context.operator_getattr(val,'_getCopy')()
rtn.append("CLONE "+context.absolute_url()+" "+context.meta_type+" "+key+" "+str(context.operator_getattr(clone,'__dict__')))
context.operator_setattr(context,key,clone)
for ob in context.objectValues():
if ob.meta_type in invalid_keys or ob.id in ['Special_Objects','acl_metapatterns'] or str(ob.id).endswith("~"):
rtn.append(ob.absolute_url()+" "+ob.meta_type+" DELETED")
context.operator_getattr(context,'_delObject')(ob.id,suppress_events=True)
elif ob.meta_type=='Folder' or ob.meta_type.startswith('ZMS'):
rtn.extend(visit(ob))
return rtn
print '\n'.join(visit(doc_elmnt))
return printed
Für eine rekursive Ausführung über eine multisite wird folgender Ausdruck ersetzt:
- if ob.meta_type.startswith('ZMS'):
+ if ob.meta_type=='Folder' or ob.meta_type.startswith('ZMS'):
Erstellt von: Dr. F. Hoffmann
, erstellt am: 24.01.2012
,
zuletzt geändert: 11.01.2019