共用方式為


藉由通知根物件來加速交易

若要有效地使用自動交易,每個交易元件都應該指出它已完成其工作。 當對象實例順利完成其工作時,應該藉由呼叫 IObjectContext::SetComplete 方法,將其一致且完成的旗標設定為 True。 當交易的所有內部物件都呼叫 SetComplete 時,可以藉由呼叫其 SetComplete 方法,明確地停用根對象來終止交易。 藉由明確指出根物件已完成其工作,您可以減少交易的長度。

當交易物件方法失敗時,對象應該藉由呼叫 IObjectContext::SetAbort 方法,將其一致的旗標設定為 False,並將其完成旗標設定為 True。 藉由呼叫 SetAbort 方法,物件會將控制權傳回給其呼叫端,並確保交易最終中止。

不過,除非呼叫 SetAbort 的物件是交易的根目錄,否則交易會繼續執行,即使最終無法從中止中儲存任何專案也一樣。 若要加速終止失敗的交易,您可以引發錯誤,以警示根對象同時呼叫 SetAbort。 若要完成,根對象應該接著將錯誤訊息傳送至其用戶端。

雖然您可以採取許多不同的方法來處理錯誤,但您的方法應該清楚協調內部物件與根對象之間的通訊。

下列 Visual Basic 代碼段顯示一種方法來處理錯誤。 在第一個片段中,內部物件會呼叫 SetAbort、引發錯誤,併產生錯誤訊息,如下所示:

Dim ObjCtx As ObjectContext
Dim ErrorCode As Long, Description As String

Set ObjCtx = GetObjectContext()
ObjCtx.SetAbort
ErrorCode = vbObjectError + 5
Description = "Some meaningful message"
Err.Raise ErrorCode, , Description

在第二個片段中,根物件會處理錯誤並將訊息傳遞至其用戶端,如下所示:

Sub MyObjMethod1()
  On Error GoTo MyObjMethod1_err
  Dim ObjCtx As ObjectContext
  Dim InteriorObj1 As Cinterior  ' Cinterior is a user-defined object.

  Set ObjCtx = GetObjectContext()
  Set InteriorObj1 = CreateObject ("MyDll.Cinterior")
  InteriorObj1.Method1
  ' If the call completed successfully, then...
  ObjCtx.SetComplete
Exit Sub
  MyObjMethod1_err:
  ' Doom the transaction and exit.
  ObjCtx.SetAbort
  ' Pass the message back to client.
  Err.Raise Err.Number, , Err.Description
End Sub

在 COM+ 中管理自動交易