ASP - Объект ObjectContext
Объект ObjectContext можно использовать для завершения или прерывания транзакции, управляемой службой компонентов и инициированной сценарием на ASP-странице.
Когда файл .asp содержит директиву @TRANSACTION, страница выполняется в транзакции и не заканчивает обработку до успешного или неудачного завершения транзакции.
Синтаксис
ObjectContext.метод
Методы
SetAbort | Метод SetAbort объявляет, что транзакция, инициированная сценарием, не завершена и ресурсы не должны быть обновлены. |
SetComplete | Метод SetComplete объявляет, что сценарий не видит причин, по которым транзакция не может быть завершена. Если все компоненты, участвующие в транзакции, также вызывают SetComplete, транзакция будет завершена. |
События
OnTransactionAbort |
OnTransactionCommit |
Замечания
ObjectContext реализует два метода объекта COM ObjectContext. Метод SetAbort явно прерывает транзакцию. Это не позволит службе компонентов внести любые изменения в ресурсы, к которым обращались в течение первой фазы транзакции. Когда транзакция прерывается, будет обработано событие сценария OnTransactionAbort.
Вызов метода SetComplete не означает, что транзакция обязательно завершена. Транзакция будет завершена, если все компоненты транзакции, вызванные сценарием, вызовут метод SetComplete. В большинстве случаев нет необходимости вызывать SetComplete из сценария, так как сценарий считается завершенным, если он закончил работу без вызова SetAbort.
ObjectContext предоставляет методы в дополнение к SetAbort и SetComplete. Эти другие методы недоступны для сценариев в ASP-сценарии; однако они доступны компонентам, вызываемым сценарием.
Пример
Приведенный ниже пример использует методы SetAbort и SetComplete. Файл Sales.htm получает данные, необходимые для обработки запроса на продажу. Второй файл (SalesVerify.asp) содержит сценарий, использующий для обработки продаж два объекта: Inventory и Sales. SetAbort вызывается, если Inventory возвращает код ошибки, свидетельствующий о недостаточном количестве товара на складе для обработки продажи. Если объект Inventory не возвращает код ошибки, вызывается SetComplete и продажа обрабатывается.
Sales.htm
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<HTML>
<HEAD>
<TITLE>Sales Order</TITLE>
</HEAD>
<BODY BGCOLOR="#FFFFFF"><FONT FACE="ARIAL,HELVETICA">
<H2>Sales Order Form </H2>
<FORM METHOD=POST ACTION="SalesVerify.asp">
<P>Please enter the product code, quantity, and your account number.
<INPUT TYPE=TEXT NAME=QuantityToBuy>
<INPUT TYPE=TEXT NAME=ProductCode>
<INPUT TYPE=TEXT NAME=AccountIn>
<P>
<INPUT TYPE=SUBMIT>
</FONT>
</BODY>
</HTML>
Файл SalesVerify.asp
<%@ Transaction = Required %>
<%
Set CurrentQOH = Server.CreateObject("Mycomp.Inventory")
Set CurrentSales = Server.CreateObject("Mycomp.Sales")
CheckQuantity = Request("QuantityToBuy")
CheckProduct = Request("ProductCode")
QuantityStatus = CurrentQOH.CheckQOH(CheckQuantity,CheckProduct)
If QuantityStatus = None
ObjectContext.SetAbort
Response.Write "Sorry, there is not sufficient quantity on hand to
process your sale."
Else
ObjectContext.SetComplete
Account = Request("AccountIn")
Saleupdate = CurrentSales.PostIt(AccountIn)
End If
%>
Дополнительные сведения см. в разделе Представление о транзакциях.