[Zope-CMF] Point of publication

Kevin Carlson khcarlso@bellsouth.net
Sun, 21 Apr 2002 21:42:09 -0400

Still getting errors when trying to move objects with a script...

I tried adding the code below to an external method (placed in the
/Zope/Extensions directory) that is called on the "submit" transition from a

def moveToRep(stateChange) :
	obj = stateChange.object
	dest = p.A
	n = dest._setObject(obj.getId(), obj)
	raise stateChange.ObjectMoved(n, _redirect(n, "Moved"))

[where "p.A" is the folder "A" in the root of the CMF instance]

I am getting the following error:

	Error Type: NameError
	Error Value: global name '_redirect' is not defined

The traceback is as follows:

Traceback (innermost last):
  File C:\PROGRA~1\ZopeTest\lib\python\ZPublisher\Publish.py, line 150, in
  File C:\PROGRA~1\ZopeTest\lib\python\ZPublisher\Publish.py, line 114, in
  File C:\PROGRA~1\ZopeTest\lib\python\Zope\__init__.py, line 158, in
    (Object: Test)
  File C:\PROGRA~1\ZopeTest\lib\python\ZPublisher\Publish.py, line 98, in
  File C:\PROGRA~1\ZopeTest\lib\python\ZPublisher\mapply.py, line 83, in
    (Object: content_status_modify)
  File C:\PROGRA~1\ZopeTest\lib\python\ZPublisher\Publish.py, line 44, in
  File C:\PROGRA~1\ZopeTest\lib\python\ZPublisher\HTTPResponse.py, line 492,
in badRequestError
BadRequest: (see above)

I must not be importing something -- any ideas?  Also, what object type is
the "stateChange" object that is passed into the workflow script?



-----Original Message-----
From: Dieter Maurer [mailto:dieter@handshake.de]
Sent: Thursday, April 18, 2002 3:46 PM
To: Kevin Carlson
Cc: zope-cmf@zope.org
Subject: RE: [Zope-CMF] Point of publication

Kevin Carlson writes:
 > Reviving an old thread...
 > I have been able to modify the DefaultWorkflow.py source to accomplish
 > moving an object to a different folder on publication.  Now that I am
 > finally getting around to attempting to do this with a script, I am
 > some trouble.  Any sample source available?
I use the following External Method to move an object to a "DataCenter".

def releaseNew(stateChange):
  obj= stateChange.object
  p= stateChange.getPortal()
  Center= getCenter(p,obj); t= getType(obj)
  # remove the object from its original place - this should uncatalog
  p= obj.aq_inner.aq_parent
  # now install
  n= Center.addObject(obj)
  # finally, tell the workflow that we moved the object
  raise stateChange.ObjectMoved(n,_redirect(n,t + ' freigegeben und ins
DataCenter übertragen'))

The DataCenter has a special method "addObject" that adds an object,
giving it a new automatically generated id.
You can use the "ObjectManager._setObject" method, when the
destination is a standard "ObjectManager".