

![]() | Start a set with this search |
![]() | Include this search in one of my sets |
![]() | Exclude this search from one of my sets |
![]() | Permalink to these results Paste this link in email or IM: |
| Atom feed for tracking future search results Paste this URL into your reader: |
37 messages in net.sourceforge.lists.plone-developersRe: CMFFormController should abort th...| From | Sent On | Attachments |
|---|---|---|
| Dorneles Treméa | Nov 9, 2007 3:17 pm | |
| Philipp von Weitershausen | Nov 10, 2007 7:07 am | |
| Dorneles Treméa | Nov 10, 2007 7:58 am | |
| Wichert Akkerman | Nov 10, 2007 12:22 pm | |
| Martin Aspeli | Nov 10, 2007 2:12 pm | |
| Wichert Akkerman | Nov 10, 2007 4:20 pm | |
| Philipp von Weitershausen | Nov 11, 2007 1:32 am | |
| Dorneles Treméa | Nov 11, 2007 5:19 pm | |
| Alan Runyan | Nov 11, 2007 5:20 pm | |
| Martin Aspeli | Nov 11, 2007 5:44 pm | |
| Martin Aspeli | Nov 11, 2007 5:51 pm | |
| Wichert Akkerman | Nov 12, 2007 4:37 am | |
| Sidnei da Silva | Nov 12, 2007 4:43 am | |
| Daniel Kraft | Nov 12, 2007 5:40 am | |
| Martin Aspeli | Nov 12, 2007 5:52 am | |
| Dorneles Treméa | Nov 12, 2007 9:35 am | |
| Wichert Akkerman | Nov 12, 2007 9:56 am | |
| Martin Aspeli | Nov 12, 2007 9:59 am | |
| Martin Aspeli | Nov 12, 2007 10:00 am | |
| Dorneles Treméa | Nov 12, 2007 10:56 am | |
| Martin Aspeli | Nov 12, 2007 11:14 am | |
| Martin Aspeli | Nov 12, 2007 11:21 am | |
| Wichert Akkerman | Nov 12, 2007 11:36 am | |
| Martin Aspeli | Nov 12, 2007 11:41 am | |
| Sidnei da Silva | Nov 12, 2007 11:47 am | |
| Martin Aspeli | Nov 12, 2007 12:04 pm | |
| Dorneles Treméa | Nov 12, 2007 12:28 pm | |
| Dorneles Treméa | Nov 12, 2007 12:34 pm | |
| Dorneles Treméa | Nov 12, 2007 1:29 pm | |
| Wichert Akkerman | Nov 12, 2007 1:32 pm | |
| Martin Aspeli | Nov 12, 2007 1:41 pm | |
| Dorneles Treméa | Nov 12, 2007 1:44 pm | |
| Martin Aspeli | Nov 12, 2007 1:46 pm | |
| Wichert Akkerman | Nov 12, 2007 1:46 pm | |
| Martin Aspeli | Nov 12, 2007 1:47 pm | |
| Dorneles Treméa | Nov 12, 2007 5:11 pm | |
| Daniel Nouri | Nov 13, 2007 4:14 am |

![]() | Permalink for this message Paste this link in email or IM: |
![]() | Permalink for this thread Paste this link in email or IM: |
| Atom feed for this thread Paste this URL into your reader: |
| Subject: | Re: CMFFormController should abort the current transaction when the validation fails | Actions... |
|---|---|---|
| From: | Martin Aspeli (opti...@public.gmane.org) | |
| Date: | Nov 12, 2007 11:41:16 am | |
| List: | net.sourceforge.lists.plone-developers | |
Martin Aspeli wrote:
Follow the path with me:
- You press the 'Save' button in the Archetypes form edit screen
Check.
- That form edit screen is a ControllerPageTemplate (base_edit.cpt) with validate_base.vpy as the unique validator
Check.
- validate_base.vpy calls BaseObject.validate() to check for errors
Check.
- BaseObject.validate() calls BasicSchema.validate() which in turn calls widget.process_form() for all fields
Check. Except process_form should never write anything persistent, right. It it does, then this process is broken - you're writing when the form may be invalid!
Yes, looking at the contract for Widget.process_form, I would argue (under-documented though it is) that it's about turning form request variables into a return value that's suitable for the field. I think it's incorrect to assume that you can perform database writes there.
- We have a ReferenceField which uses a special reference widget, UploadReferenceWidget, which was designed to be a simple replacement for the default ReferenceWidget
Ok.
- That widget receives a FileUpload object via REQUEST, proceeds with a 'File' creation and only returns its UID as the widget value
This is nuts.
You're creating objects during validation. This needs to happen somewhere *after* the validation has succeeded (e.g. in an event handler such as IObjectSaved or whatever it's called in AT). That's what validation means - you're deciding if the request is valid before proceeding.
In this case, one solution may be to have a new field that implements set() to do the DB write. set() will not be called until after validation, which is what you want. This is much more in line with how other fields and widgets work.
- Now that there's already a File in ZODB, the validation of another field fails, let's say 'title' was required but nothing was passed
Right.
- At this point the validation failed and you're back to the edit form screen with no chance to abort the transaction
Right.
Martin
-- Author of `Professional Plone Development`, a book for developers who want to work with Plone. See http://martinaspeli.net/plone-book
------------------------------------------------------------------------- This SF.net email is sponsored by: Splunk Inc. Still grepping through log files to find problems? Stop. Now Search log events and configuration files using AJAX and a browser. Download your FREE copy of Splunk now >> http://get.splunk.com/







