Excellent thinking. I'm guessing that the PyscopyDA handles that type of thing and makes sure that it doesn't get nasty. That's a big win for Zope when dealing with inventory and things like that. Thanks Oliver. On Tuesday 23 April 2002 10:33 am, you wrote:
Jason Spisak wrote:
You might remember me, I've been a big Zope fan since ZTables, and have recently been asked "Why Zope?". The project is commited to PostgreSQL and leaning toward PHP. Here's the project requirements for a softwre company:
Hardware Compatability List Software Compatability List Store/ECommerce User tracking and services like Pay for downloads Upgrades if they have a serial number paid up Billing/Invoicing for corporate accounts Inventory tracking CRM/Sales functions
They don't see that Zope's built in security machinery would beat something home brewed for what they expect to need it for. Plus the over head of running Zope instances is greater than PHP scripts.
What are the arguments for Zope in this context?
Transaction Safety?
When reading your requirements that was the first thing coming into my mind. I don't know how php does this, so I went to google and found http://www.phpbuilder.com/columns/linuxjournal200009.php3
Below is one snippet, notice all the ugly "//check for errors" and "//abort transaction". If someone knows where I misinterpret something or how php solves this, corrections welcome.
But wouldn't it be nice if we had an application server which would take care of all this for us?
Oh, wait ... ;-)
cheers, oliver
function cart_new() { //make the database connection handle available global $conn,$customer_id,$feedback;
//start a transaction query("BEGIN WORK");
//query postgres for the next value in our sequence $res=query("SELECT nextval('seq_customer_id')");
//check for errors if (!$res || pg_numrows($res)<1) { $feedback .= pg_errormessage($conn); $feedback .= ' Error - Database didn\'t return next value '; query("ROLLBACK"); return false; } else { //set that value in a local var $customer_id=pg_result($res,0,0);
//register the id with PHP4 session_register('customer_id');
//insert the new customer row $res=query("INSERT INTO customers (customer_id) VALUES ('$customer_id')");
//check for errors if (!$res || pg_cmdtuples($res)<1) { $feedback .= pg_errormessage($conn); $feedback .= ' Error - couldn\'t insert new customer row '; query("ROLLBACK"); return false; } else { //commit this transaction query("COMMIT"); return true; } } }
-- Jason Spisak Marketing Director, Lycoris jspisak@lycoris.com, http://www.lycoris.com Desktop/LX: Familiar. Powerful. Open. +1 425 869-2930 voice, +1 425 671-0504 fax