发生错误后如何回滚事务
How to roll back transaction after error occurs
我有一个自定义项目,它正在创建“日记账交易”屏幕的图形对象并输入数据。我想知道处理任何错误的最佳方法,如果发生这种情况,可以回滚所有条目。
下面是我如何插入行的片段(部分代码未显示):
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();
我是否应该在完成所有条目(插入)之前不坚持(对于几个批次)- 并且在任何坚持完成之前以某种方式回滚?
代码示例会有所帮助。谢谢
如果您希望所有持久化一起发生,除非收到错误,否则应将持久化代码包装在事务中。因此,您可以使用 PXTransactionScope 将您拥有的代码(2 个单独的持久性)包装在同一事务中,如下所示。
using (PXTransactionScope ts = new PXTransactionScope())
{
// Persisting code here...
ts.Complete();
}
收到错误时会自动回滚或不调用ts.Complete()
我有一个自定义项目,它正在创建“日记账交易”屏幕的图形对象并输入数据。我想知道处理任何错误的最佳方法,如果发生这种情况,可以回滚所有条目。
下面是我如何插入行的片段(部分代码未显示):
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();
我是否应该在完成所有条目(插入)之前不坚持(对于几个批次)- 并且在任何坚持完成之前以某种方式回滚?
代码示例会有所帮助。谢谢
如果您希望所有持久化一起发生,除非收到错误,否则应将持久化代码包装在事务中。因此,您可以使用 PXTransactionScope 将您拥有的代码(2 个单独的持久性)包装在同一事务中,如下所示。
using (PXTransactionScope ts = new PXTransactionScope())
{
// Persisting code here...
ts.Complete();
}
收到错误时会自动回滚或不调用ts.Complete()