2017-05-12 48 views
0

我有一個自定義項目正在創建「日誌事務」屏幕的圖形對象並輸入數據。我想知道處理任何錯誤的最佳方法,如果發生這種情況,可以回滾所有條目。錯誤發生後如何回滾事務

下面是我插入行的片斷(有一些代碼未顯示):

 Batch batch; 
     GLTran tran; 

     if (gltran.BatchNbr != lastbatchnbr) 
     { 
      batch = new Batch(); 
      batch.BranchID = branchID; 
      batch.Description = "InterCo JE from " + osd.String01 + "Module AP Batch " + gltran.BatchNbr; 
      batch.FinPeriodID = gltran.FinPeriodID; 
      jegraph.BatchModule.Insert(batch); 
      jegraph.Persist(); 
     } 



     tran = new GLTran(); 
     tran.AccountID = accountID; 
     tran.SubID = subID; 
     tran.TranDate = gltran.TranDate; 
     tran.RefNbr = gltran.RefNbr; 
     tran.CuryDebitAmt = gltran.DebitAmt; 
     tran.CuryCreditAmt = gltran.CreditAmt; 

     jegraph.GLTranModuleBatNbr.Insert(tran); 
     jegraph.Persist(); 

我不該繼續下去,直到所有條目(插入)完成(幾批) - 不知何故卷在任何堅持完成之前回來?

一個代碼示例會有所幫助。謝謝。

回答

1

如果您希望所有持續發生在一起,除非收到錯誤,則應將持久代碼包裝在事務中。因此,您可以使用PXTransactionScope在相同的事務中包裝您擁有的代碼(2個獨立的持久存儲),如下所示。

using (PXTransactionScope ts = new PXTransactionScope()) 
{ 
    // Persisting code here... 

    ts.Complete(); 
} 

當收到一個錯誤會自動回滾或不叫ts.Complete()