[Zope-DB] updating fields in a zsql method programmatically

2007-08-27 Thread onsombal

Here's the scenario:

1. insertNew is a Z SQL Method for creating a new record in pgsql table1
Argument list = field1, field2, field3

SQL Query:
INSERT INTO table1 (field1, field2, field3)
VALUES (
dtml-sqlvar field1 type=string,
dtml-sqlvar field2 type=string,
dtml-sqlvar field3 type=string)
 
2. call_insertNew is a python script that is called as an After
Validation Script by a pfg form

request = container.REQUEST
RESPONSE =  request.RESPONSE
form = request.form

changed_field1 = form.get('field1')
changed_field1 = a new computed value
field1 = changed_field1

#create a new record with form field results for field2  field3, and a
computed value for field1
context.insertNew()

*
It's easy to insert and update Z SQL Methods directly from form field
results.  

It's easy to read form field results (e.g. request.field2) and do
comparisons, etc.

I am struggling to understand how one can change a form field result with a
computed value from a python script.

Either of the following returns an error:
form.get('field1') = changed_field1
request.field1 = changed_field1

and...
field1 = changed_field1
...the value doesn't get posted to the pgsql record.  Instead the pgsql
field1 value remains what the request.field1 value was originally.

Any direction is appreciated... Jim

-- 
View this message in context: 
http://www.nabble.com/updating-fields-in-a-zsql-method-programmatically-tf4335404.html#a12347343
Sent from the Zope - DB mailing list archive at Nabble.com.

___
Zope-DB mailing list
Zope-DB@zope.org
http://mail.zope.org/mailman/listinfo/zope-db


Re: [Zope-DB] updating fields in a zsql method programmatically

2007-08-27 Thread Maciej Wisniowski
 changed_field1 = a new computed value
 field1 = changed_field1
 
 #create a new record with form field results for field2  field3, and a
 computed value for field1
 context.insertNew()
Obvious things are sometimes hardest to find ;)

Try:

field1 = changed_field1
context.insertNew(field1=field1)

or even:

context.insertNew(field1='something', field2=other_variable)

It is more clear than getting values from context I think.

-- 
Maciej Wisniowski
___
Zope-DB mailing list
Zope-DB@zope.org
http://mail.zope.org/mailman/listinfo/zope-db


Re: [Zope-DB] updating fields in a zsql method programmatically

2007-08-27 Thread onsombal

I tried the techniques you suggested and it results in the same error --
KeyError: 'form.submitted'

field1 = changed_field1
context.insertNew(field1=field1) -- I also tried the other technique and
got the same error.

I tried your technique with the following changes to my pfg (ploneformgen)
for and Z SQL Method:
1. with field1, field2, field3 all included in the pfg (ploneformgen) form
2. with these same three fields excluded from the pfg form
3. with my Z SQL method argument as field1
4. with my Z SQL method argument as field1=field1

I just know that there has to be an easy solution to this problem.

I'm assuming the form results are stored as an object represented as a
dictionary.  If so, then there must be a way for my python script to change
the key | value pair for field1 before I call my Z SQL Method.  Is this
reasonable, or am I just going down a rat-hole?

Thanks... Jim







Maciej Wisniowski wrote:
 
 changed_field1 = a new computed value
 field1 = changed_field1
 
 #create a new record with form field results for field2  field3, and a
 computed value for field1
 context.insertNew()
 Obvious things are sometimes hardest to find ;)
 
 Try:
 
 field1 = changed_field1
 context.insertNew(field1=field1)
 
 or even:
 
 context.insertNew(field1='something', field2=other_variable)
 
 It is more clear than getting values from context I think.
 
 -- 
 Maciej Wisniowski
 ___
 Zope-DB mailing list
 Zope-DB@zope.org
 http://mail.zope.org/mailman/listinfo/zope-db
 
 

-- 
View this message in context: 
http://www.nabble.com/updating-fields-in-a-zsql-method-programmatically-tf4335404.html#a12356504
Sent from the Zope - DB mailing list archive at Nabble.com.

___
Zope-DB mailing list
Zope-DB@zope.org
http://mail.zope.org/mailman/listinfo/zope-db


Re: [Zope-DB] updating fields in a zsql method programmatically

2007-08-27 Thread Charlie Clark

Am 27.08.2007, 15:59 Uhr, schrieb onsombal [EMAIL PROTECTED]:


changed_field1 = form.get('field1')
changed_field1 = a new computed value
field1 = changed_field1
#create a new record with form field results for field2  field3, and a
computed value for field1
context.insertNew()

^

This is really bad as it undoes all your good work of checking the the  
values in your script. All ZSQL methods also have access to the REQUEST  
object by default so your ZSQL method sees context.REQUEST.field1. Way  
back when ZSQL was developed support for request objects was given to ZSQL  
to allow funky parameters in the URL as well as the other usual special  
methods such as manage and edit. Personally I think this is a bad idea and  
always pass my parameters in as named arguments as Maciej suggests or as a  
dictionary for neatness if there is a lot of them.


Charlie

--
Charlie Clark
eGenix.com

Professional Python Services directly from the Source

Python/Zope Consulting and Support ...http://www.egenix.com/
mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/
mxODBC, mxDateTime, mxTextTools ...http://python.egenix.com/



 Try mxODBC.Zope.DA for Windows,Linux,Solaris,MacOSX for free ! 

eGenix.com Software, Skills and Services GmbH  Pastor-Loeh-Str.48
D-40764 Langenfeld, Germany. CEO Dipl.-Math. Marc-Andre Lemburg
   Registered at Amtsgericht Duesseldorf: HRB 46611
___
Zope-DB mailing list
Zope-DB@zope.org
http://mail.zope.org/mailman/listinfo/zope-db


Re: [Zope-DB] updating fields in a zsql method programmatically

2007-08-27 Thread Charlie Clark

Am 27.08.2007, 21:59 Uhr, schrieb onsombal [EMAIL PROTECTED]:


I'm assuming the form results are stored as an object represented as a
dictionary.  If so, then there must be a way for my python script to  
change

the key | value pair for field1 before I call my Z SQL Method.  Is this
reasonable, or am I just going down a rat-hole?


All form values are in the context.REQUEST.form dictionary which can  
overwrite to your heart's content.


Charlie
--
Charlie Clark
eGenix.com

Professional Python Services directly from the Source

Python/Zope Consulting and Support ...http://www.egenix.com/
mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/
mxODBC, mxDateTime, mxTextTools ...http://python.egenix.com/



 Try mxODBC.Zope.DA for Windows,Linux,Solaris,MacOSX for free ! 

eGenix.com Software, Skills and Services GmbH  Pastor-Loeh-Str.48
D-40764 Langenfeld, Germany. CEO Dipl.-Math. Marc-Andre Lemburg
   Registered at Amtsgericht Duesseldorf: HRB 46611
___
Zope-DB mailing list
Zope-DB@zope.org
http://mail.zope.org/mailman/listinfo/zope-db


Re: [Zope-DB] updating fields in a zsql method programmatically

2007-08-27 Thread Maciej Wisniowski
onsombal napisaƂ(a):
 I tried the techniques you suggested and it results in the same error --
 KeyError: 'form.submitted'
You didn't tell about this kind of error before.
Post a full traceback, please.
I suppose that error is somewhere else...

-- 
Maciej Wisniowski
___
Zope-DB mailing list
Zope-DB@zope.org
http://mail.zope.org/mailman/listinfo/zope-db


Re: [Zope-DB] updating fields in a zsql method programmatically

2007-08-27 Thread onsombal

So, my script now works!!  Thanks to everyone for your input.  It is greatly
appreciated.  Below is a quick summary of what I did and a relevant excerpt
of the working script.

1) I never was able to get passing the arguments via the context.Statement
to work.  I'm sure it's something I've done wrong.

2) I successfully updated the context.REQUEST.form dictionary key:value pair
with my computed value.  The computed value was to replace the blank
(hidden) 'fdbkurl' pfg form field with the url of a form object that was
copied from a standard-template to another folder, and then renamed.  After
renaming, I re-indexed the object, and then captured its absolute url --
which I then used to update the dictionary key:value.

Code follows:

#copy, paste, rename std-survey to Folder
from Products.CMFCore.utils import getToolByName

urltool = getToolByName(context, portal_url)
portal = urltool.getPortalObject()
mydoc_folder = getToolByName(context, my-documents)
crm_folder = getToolByName(context, crm)
survey_folder = getToolByName(context, std-forms)
listing_folder = getattr(mydoc_folder, listings)

#manage_copyObjects(self, ids=None, REQUEST=None, RESPONSE=None)
cb_copy_data = survey_folder.manage_copyObjects([std-survey])
dest = getattr(listing_folder, tls_id)

#manage_pasteObjects(self, cb_copy_data=None, REQUEST=None)
#Paste previously copied objects into the current object.
#If calling manage_pasteObjects from python code, 
#pass the result of a previous call to manage_cutObjects or
manage_copyObjects as the first argument.
dest.manage_pasteObjects(cb_copy_data)

#manage_renameObjects(self, ids=[], new_ids=[], REQUEST=None)
tls_folder = getattr(listing_folder, tls_id)
survey_id = survey + form.get('tls')
survey_title = Survey + form.get('tls')
survey_obj = getattr(tls_folder, std-survey)
tls_folder.manage_renameObjects(ids=[std-survey], new_ids=[survey_id])
survey_obj.setTitle(survey_title)
survey_obj.reindexObject()
fbkurl = survey_obj.absolute_url()
formresult['fbkurl'] = fbkurl

#create record in usdb listing table
context.listingsCreateRow()
  
And it works!




Charlie Clark-2 wrote:
 
 Am 27.08.2007, 21:59 Uhr, schrieb onsombal [EMAIL PROTECTED]:
 
 I'm assuming the form results are stored as an object represented as a
 dictionary.  If so, then there must be a way for my python script to  
 change
 the key | value pair for field1 before I call my Z SQL Method.  Is this
 reasonable, or am I just going down a rat-hole?
 
 All form values are in the context.REQUEST.form dictionary which can  
 overwrite to your heart's content.
 
 Charlie
 -- 
 Charlie Clark
 eGenix.com
 
 Professional Python Services directly from the Source
 Python/Zope Consulting and Support ...http://www.egenix.com/
 mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/
 mxODBC, mxDateTime, mxTextTools ...http://python.egenix.com/
 
 
  Try mxODBC.Zope.DA for Windows,Linux,Solaris,MacOSX for free ! 
 
  eGenix.com Software, Skills and Services GmbH  Pastor-Loeh-Str.48
  D-40764 Langenfeld, Germany. CEO Dipl.-Math. Marc-Andre Lemburg
 Registered at Amtsgericht Duesseldorf: HRB 46611
 ___
 Zope-DB mailing list
 Zope-DB@zope.org
 http://mail.zope.org/mailman/listinfo/zope-db
 
 

-- 
View this message in context: 
http://www.nabble.com/updating-fields-in-a-zsql-method-programmatically-tf4335404.html#a12359442
Sent from the Zope - DB mailing list archive at Nabble.com.

___
Zope-DB mailing list
Zope-DB@zope.org
http://mail.zope.org/mailman/listinfo/zope-db