Figure 5    CProducts, Purchase Method


 ' class CProducts
 ' Transaction setting: Supports transactions
 ' ADO code omitted for clarity
 Function Purchase(ByVal ProductID As String, _
                   ByVal Quantity As Long) As Currency
   Dim ObjCtx As ObjectContext
   Set ObjCtx = GetObjectContext
   ' ADO code: query to determine quantity in inventory
   If(InventoryLevel>=Quantity)
    ' ADO code: modify inventory level
    ' ADO code: determine price per unit
    Purchase = Quantity * Price
    CtxObj.SetComplete
   Else
    CtxObj.SetAbort
    Err.Raise vbObjectError + 1, , "Quantity unavailable"
   End If
 End Sub

Figure 6   CBroker SubmitOrder Method


 Function SubmitOrder(ByVal Customer As String, _
                      ByVal Product As String, _
                      ByVal Quantity As Long, _
                      ByRef OrderStatus As String) As Long

   On Error GoTo SubmitError
   Dim ObjCtx As ObjectContext
   Set ObjCtx = GetObjectContext()

 Dim Products As CProducts, Price As Currency
 Dim Customers As CCustomers
 Dim Orders As COrders, OrderNumber As Long

 Set Products = ObjCtx.CreateInstance("Market.CProducts")
 Set Customers = ObjCtx.CreateInstance("Market.CCustomers")
 Set Orders = ObjCtx.CreateInstance("Market.COrders")

 Price = Products.Purchase(Product, Quantity)
 Customers.Charge Customer, Price
 OrderNumber = Orders.Add(Customer, Product, Quantity, Price)
 OrderStatus = "The order has been accepted." & _
        " Your order number is " & OrderNumber
 SubmitOrder = OrderNumber
  ObjCtx.SetComplete

 SubmitError:
  ' if something goes wrong call SetAbort and get out ASAP
  ObjCtx.SetAbort
  Err.Raise Err.Number, , Err.Description
 End Function

Figure 7   Business Logic in Broker Object


 <%
 On Error Resume Next

 Customer = Request.Form("txtCustomer")
 Product = Request.Form("cboProduct")
 Quantity = Request.Form("txtQuantity")

 Dim OrderStatus

 Set Broker = Server.CreateObject("Market.CBroker")
 Broker.SubmitOrder Customer, Product, Quantity, OrderStatus

 If Err.Number = 0 Then
  Response.Write OrderStatus
 Else
  Response.Write "Your order was not accepted<br>"
  Response.Write Err.Description
 End If
 %>

Figure 8   Business Logic in ASP


 <%@ TRANSACTION=Required LANGUAGE="VBScript" %>
 <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">

 <%
 On Error Resume Next

 Customer = Request.Form("txtCustomer")
 Product = Request.Form("cboProduct")
 Quantity = Request.Form("txtQuantity")

 Set Products = Server.CreateObject("WebMarket.CProducts")
 Set Customers = Server.CreateObject("WebMarket.CCustomers")
 Set Orders = Server.CreateObject("WebMarket.COrders")

 Dim bAborted, Price, OrderNumber, OrderStatus

 Price = Products.Purchase(Product, Quantity)
 If Err.Number <> 0 Then bAborted = True

 If Not bAborted Then
     Customers.Charge Customer, Price
 End If
 If Err.Number <> 0 Then bAborted = True

 If Not bAborted Then
     OrderNumber = Orders.Add(Customer, Product, Quantity, Price)
 End If
 If Err.Number <> 0 Then bAborted = True

 If bAborted Then
  ObjectContext.SetAbort
 Else
  OrderStatus = "Your order for has been accepted<br>"
  OrderStatus = OrderStatus & "Your order number is " & OrderNumber
  ObjectContext.SetComplete
 End If

 ' transactional events
 Sub OnTransactionCommit()
  Response.Write OrderStatus
 End sub

 Sub OnTransactionAbort()
  Response.Write "You order was not accepted<br>"
  Response.Write Err.Description
 End sub

 %>