[Howard Hansen]
Thanks Eric (and Neil), passing REQUEST to zsql_method works.
Here's what I had to do to get it working:
zsql_method gets a parameter named request.
Call the query with <dtml-call "zsql_method(request=REQUEST)">
Inside the zsql_method, get the form values out with calls like this:
<dtml-sqlvar "request.field_companyname" type=string> or <dtml-sqlvar "request['field_companyname']" type=string>
I'm still confused about my confusion. It looks to me like the zsql_method has its own REQUEST and thus doesn't try to find the values in the calling object. I find it odd that I haven't seen any discussion of this issue in any of the books/documentation I've run across. But when acquisition does work inside ZSQL Methods, it's very cool!
Zope methods, including zsql methods, have no namespace of their own. When you invoke one like this from a dtml document, Zope sends it the document's namespace, which includes the REQUEST and all its properties: <dtml-var theMethod> However, if you call it using a Python invocation, things are different; <dtml-var "theMethod()"> Now it does not receive any namespace or variables, and so it cannot find them. You could pass in any specific parameter by writing <dtml-var "theMethod(companyname=REQUEST.field_companyname)"> (or better to use <dtml-sqlvar> for a zsql method) Or you can pass in the whole REQUEST as you did. Cheers, Tom P