如何恢复刚刚使用的数字序列



>我有一个简单的问题,我不知道这是否可能。

在我的课堂上,我有一些方法,特别是我在 LedgerJournalTable 中创建一条记录并将表引用保存在全局变量 _createdLedgerJournalTable 中。

因此,在另一个调用的方法中,我有可能删除刚刚创建的 LedgerJournalTable

LedgerJournalTable deletedLedgerJournalTable ;
ttsBegin;
select forUpdate LedgerJournalTable 
where LedgerJournalTable .RecId == _createdLedgerJournalTable;
LedgerJournalTable .delete();
ttsCommit;

我知道很奇怪,我可以检索已删除记录的部件号?

开始我删除记录,我可以保存 JournalNum 并标记编号序列未使用?

我看过一些例子,就是用来标记数字序列(看到的例子),我可以解锁数字序列吗?

谢谢你的建议,

享受!

如果可能,请避免创建不需要的日志标题。例如,在日记帐行的第一个插入之前创建它。测试if (!journalTable) .

可以通过调用newGetNum将第二个参数设置为 true 来实现指定_makeDecisionLater。然后致电 numberSeq.abort() 中止号码生成或numberSeq.use()以标记为已使用。

仅当与newGetNum位于同一事务范围内并且编号规则连续时,这才有效。 否则,这两个调用都是无操作。

这是我对非连续序列的解决方案。重写数据源的删除方法。这也可以在表的 delete 方法中实现:

public void delete()
{
    NumberSequenceTable numSeqTable;
    CMT_RutaId          tmpRutaId;
    ;
    tmpRutaId = CMT_RutaJour.RutaId;
    numSeqTable = NumberSequenceTable::find(SalesParameters::numRefCMT_RutaId().NumberSequence);
    super();
    if (numSeqTable.Continuous)
    {
        // Por si se decide marcar la secuencia como contínua, liberamos el número
        NumberSeq::release(SalesParameters::numRefCMT_RutaId().NumberSequence, tmpRutaId);
    }
    else
    {
        // Si el registro que estamos eliminando es el último que hemos insertado, recuperamos el número
        if (NumberSeq::numInsertFormat(numSeqTable.NextRec - 1, numSeqTable.Format) == tmpRutaId)
        {
            ttsbegin;
            numSeqTable = NumberSequenceTable::find(numSeqTable.NumberSequence, true);
            numSeqTable.NextRec--;
            numSeqTable.doUpdate();
            ttscommit;
        }
    }
}

并重写表单的 close 方法,以覆盖用户退出表单而不保存记录的情况:

public void close()
{;
    if (CMT_RutaJour.RutaId && !CMT_RutaJour.RecId)
        CMT_RutaJour_ds.delete();
    super();
}

相关内容

  • 没有找到相关文章

最新更新