发生错误后如何回滚事务

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()