IPOWERWEB.com

 Affordable, reliable
web hosting solutions

Call IPOWERWEB Today at 1-888-511-HOST Chat with an IPOWERWEB representative LIVE!
24/7x365 service - Live Technical Support

Domain Name Registration
web hosting services
cheap web hosting
IPOWERWEB help section
contact IPOWERWEB
testimonials for best hosting
affordable web hosting
IPOWERWEB web hosting
IPOWERWEB accolades
best domain prices


Web Hosting Money Back Guarantee
home build profit promote manage


Page 19 of 22 - Chapter 14

Roll with it - Degrading Gracefully When It All Goes Wrong

We have not finished with the ProcessOrder.asp page yet: we need to add some code to handle the out of stock error (547) in a more user friendly way then just redirecting to an error page.

The out of stock problem is dealt with by displaying a list of the order items not available in sufficient quantity to fulfill the order and letting the user choose to either cancel the order completely or proceed with the amounts available. If the order was successful, or any error other than out of stock occurred, then the user will be redirected to another page elsewhere and will never see the HTML we are about to create.

The ASP page will be processed in totality even if re-direction occurs, so, to avoid the overhead of the order failed code, we nest it inside an if statement. Place the code at the bottom of the page immediately following the code we just created.

<HTML>
<BODY>
<%
   // If error is Out Of Stock then create HTML
   if (iErrorNo == 547)
   {
%>

The next task is to create a form replicating the form elements originally passed when the customer submitted their order - the last thing they want to do is be retyping the information. The form action returns to this page for reprocessing, this time hopefully with sufficient stock (though it is possible others may place orders whilst this customer is thinking about what to do).

<H2>Sorry we are unable to fully satisfy your order</H2>
<P>
<FORM ACTION="ProcessOrder.asp" method="POST">
   We do not currently have sufficent stock for some items in your order,
   details listed below<BR>
   <!-- Name/Address Details -->
   <INPUT TYPE="HIDDEN" NAME="txtTitle"
          VALUE="<%=Request.Form("txtTitle")%>">
   <INPUT TYPE="HIDDEN" NAME="txtFirstName"
          VALUE="<%=Request.Form("txtFirstName")%>">
   <INPUT TYPE="HIDDEN" NAME="txtLastName"
          VALUE="<%=Request.Form("txtLastName")%>">
   <INPUT TYPE="HIDDEN" NAME="txtEmail"
          VALUE="<%=Request.Form("txtEmail")%>">
   <INPUT TYPE="HIDDEN" NAME="txtStreet"
          VALUE="<%=Request.Form("txtStreet")%>">
   <INPUT TYPE="HIDDEN" NAME="txtCity"
          VALUE="<%=Request.Form("txtCity")%>">
   <INPUT TYPE="HIDDEN" NAME="txtLocality"
          VALUE="<%=Request.Form("txtLocality")%>">
   <INPUT TYPE="HIDDEN" NAME="txtPostCode"
          VALUE="<%=Request.Form("txtPostCode")%>">
   <INPUT TYPE="HIDDEN" NAME="txtCountry"
          VALUE="<%=Request.Form("txtCountry")%>">
   <!-- Credit Card Details -->
   <INPUT TYPE="HIDDEN" NAME="txtCCHolderName"
          VALUE="<%= Request.Form("txtCCHolderName") %>">
   <INPUT TYPE="HIDDEN" NAME="txtCCNo"
          VALUE="<%= Request.Form("txtCCNo") %>">
   <INPUT TYPE="HIDDEN" NAME="txtCCType"
          VALUE="<%= Request.Form("txtCCType") %>">
   <INPUT TYPE="HIDDEN" NAME="txtCCExpire"
          VALUE="<%= Request.Form("txtCCExpire") %>">


We need to create a list of the items the customer ordered and check the availability of each item. In order to do so, we use the ItemAvailability stored procedure to retrieve the quantities available. Then we create a new command object which will be reused to execute the stored procedure as we loop though the shopping basket's items.

<%
   var loRS;
   // Create new command object
   loCommand = null;
   loCommand = Server.CreateObject("ADODB.Command");
   loCommand.CommandText = "ItemAvailability";
   loCommand.CommandType = adCmdStoredProc;
   loCommand.Name = "ItemAvailability";
   //@ItemId int
   loParam =loCommand.CreateParameter("ItemId", adInteger, adParamInput);
   loCommand.Parameters.Append(loParam);
   loCommand.ActiveConnection = loConn;

Next we start looping though the item elements in the form, retrieving the ItemId and quantity and using this information to access the database with the Command object and find out how many we actually have in stock.

var sElementKey;
   var iItemId;
   var iQty;
   var iQtyInStock;
   for (var iElementCounter = iItemElementStart; _
        iElementCounter <= Request.Form.Count; iElementCounter++)
   {
      sElementKey = new String(Request.Form.Key(iElementCounter));
      // If this is an item element
      if (sElementKey.substr(3,2) == "ID")
      {
         // get ItemId
         iItemId = parseInt(sElementKey.substring(5,sElementKey.length));
         iElementCounter++;
         // Get desired quantity
         iQty = parseInt(Request.Form(iElementCounter));
         // access database to see how many are actually available
        loCommand.Parameters("ItemId") = iItemId;
        loRS = loCommand.Execute();
        iQtyInStock = loRS("QtyInStock");

If we find that there is insufficient stock available for the item we need to let the customer know. If there is no stock at all then we tell the user, otherwise we tell them how many are actually available. We also create hidden form elements to store the ItemId and quantities actually available. If the user goes ahead with the quantities available then this information can be retrieved after the form post.

 
home | products | about us | help center | testimonials | press room | contact us
affiliates | careers | domain names | web hosting | site map

Copyright © 1999-2007 IPOWER, Inc. Read our Terms and Conditions. All rights reserved.