[Zope] Passing a string argument by URL to a Z SQL Method

Ben Gustafson cbg3@earthlink.net
Mon, 28 May 2001 15:48:14 -0400


I'm working on Chapter 10 of the Zope Book (Relational Database
Connectivity), and have had problems passing a string argument by URL to a Z
SQL Method, although I was able to implement the example in the book of
passing an integer argument by URL. My test is as follows:

1) I have a Z SQL Method named list_reqs, located at
http://localhost:8080/Zoo/Employees/Departments:
	Arguments: department_id
	SQL: select * from requisitions
	     where <dtml-sqltest department_id op=eq type=string>

When I test the Method, I get these results:
--
DEPARTMENT ID 	REQ ID 	DESCRIPTION 	UNIT COST	QUANTITY
Sales 		1 		paper clips		10.0 	  	1000
Sales 		2 		golf clubs    	500.0  	10
Sales 		4 		staples        	10.0	   	500

----------------------------------------------------------------
SQL used:

select * from requisitions
where department_id = 'Sales'
--
Under the Advanced tab of the Method, I have the "Allow 'simple' direct
traversal" box checked.

2) I have a DTML Method named reqs, located in the same folder as the
list_reqs Z SQL Method. I call the DTML Method on the Z SQL Method and
attempt to pass it Sales as the department_id using this URL:
http://localhost:8080/Zoo/Employees/Departments/list_reqs/Sales/reqs. When I
do so, I get the following error:

--
Site Error
An error was encountered while publishing this resource.

Debugging Notice

Zope has encountered a problem publishing your object.
Cannot locate object at:
http://localhost:8080/Zoo/Employees/Departments/list_reqs/Sales
--

Is there a reason why Zope won't accept the Sales ID in the URL as an
argument, but instead tries to access it as a folder? The obvious workaround
is to use an integer for the Department ID instead of a varchar, but that
would make the URL less readable. Besides, I want to do it this way!