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

时间:2016-02-06 22:37:36

标签: axapta dynamics-ax-2012 x++ unlock number-sequence

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

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

所以,在我之后调用的另一种方法中,我可能删除我刚创建的 createdLedgerJournalTable

LedgerJournalTable deletedLedgerJournalTable ;
ttsBegin;
select forUpdate LedgerJournalTable 
where LedgerJournalTable .RecId == _createdLedgerJournalTable;

LedgerJournalTable .delete();
ttsCommit;

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

开始我删除记录我可以保存 JournalNum 并标记未使用的数字序列?

我看过一些用于标记数字序列(example seen)的例子,我可以解锁数字序列吗?

感谢您的建议,

享受!

2 个答案:

答案 0 :(得分:3)

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

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

仅当与newGetNum处于相同的事务范围且数字序列是连续的时才有效。如果没有,两个电话都是无操作。

答案 1 :(得分:0)

这是我对非连续序列的解决方案。覆盖数据源的删除方法。这也可以在表的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();
}