Hi, I am a complete Zope newbie so have some patience with me. Mike suggested a way to Lalo to move the code that creates the DTML Document into a DTML Method. I tried this method but I get the below error and stack trace. It seems that the call to self._setObject is failing. What is self in this case? BTW the add form is living in a folder called Products in the root folder. My code for the DTML Method is: <dtml-call "Products.manage_addProduct['OFSP'].addDTMLDocument(id, title)"> It does not seem to matter whether I prepend the Products object on the call string or not. Hopefully I will be able to contribute to the list as I come up to speed. -Mats Error Type: AttributeError Error Value: 'string' object has no attribute '_setObject' Traceback (innermost last): File C:\Program Files\ZopeSite1\lib\python\ZPublisher\Publish.py, line 214, in publish_module File C:\Program Files\ZopeSite1\lib\python\ZPublisher\Publish.py, line 179, in publish File C:\Program Files\ZopeSite1\lib\python\Zope\__init__.py, line 201, in zpublisher_exception_hook (Object: ElementWithAttributes) File C:\Program Files\ZopeSite1\lib\python\ZPublisher\Publish.py, line 165, in publish File C:\Program Files\ZopeSite1\lib\python\ZPublisher\mapply.py, line 160, in mapply (Object: secureAddMethod) File C:\Program Files\ZopeSite1\lib\python\ZPublisher\Publish.py, line 102, in call_object (Object: secureAddMethod) File C:\Program Files\ZopeSite1\lib\python\OFS\DTMLMethod.py, line 145, in __call__ (Object: secureAddMethod) File C:\Program Files\ZopeSite1\lib\python\DocumentTemplate\DT_String.py, line 502, in __call__ (Object: secureAddMethod) File C:\Program Files\ZopeSite1\lib\python\DocumentTemplate\DT_Util.py, line 321, in eval (Object: Products.manage_addProduct['OFSP'].addDTMLDocument(id, title)) File <string>, line 0, in ? File C:\Program Files\ZopeSite1\lib\python\OFS\DTMLDocument.py, line 201, in addDTMLDocument AttributeError: (see above)
Umm, here's something to try. Remove the special permissions from the form page, and set the form's action to a DTML Method that you create.
Give
_that_ new method proxy roles to create pages. Do your request validation there, too. From within the new page, use a DTML tag like...
<dtml-call "manage_addProduct['OFSP'].addDTMLDocument(id, title)">
I _think_ manage_addProduct is a mapping type and needs to be used in that manner, but you might have to experiment. At any rate, this will create the document, and since there is no REQUEST being passed to addDTMLDocument it won't redirect the browser. Then you can redirect them yourself, or display whatever message or form you might like from this page itself.
Mike.