0

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

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

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

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

LedgerJournalTable .delete();
ttsCommit;

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

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

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

谢谢指教,

请享用!

4

2 回答 2

4

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

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

这仅在与newGetNum数字序列相同的事务范围内且连续的情况下才有效。如果不是,则两个调用都是无操作的。

于 2016-02-08T11:45:44.170 回答
-1

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

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;
        }
    }
}

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

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

    super();
}
于 2016-10-19T14:59:31.820 回答