' 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
%>