2016-02-06 8 views
0

У меня есть простой вопрос, я не знаю, возможно ли это.Как восстановить только что использованную последовательность чисел?

В моем классе У меня есть несколько методов, в одном, в частности, я создаю запись в LedgerJournalTable и сохранить ссылку на таблицу в глобальной переменной _createdLedgerJournalTable.

Таким образом, в другом методе, называемом после того, вероятность того, что я удалить моей createdLedgerJournalTable только что создали.

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

LedgerJournalTable .delete(); 
ttsCommit; 

Я знаю, что это странно, я могу получить номер детали удаленных записей?

Начните с удаления записи Я могу сохранить JournalNum и отметить последовательность чисел НЕ используется?

Я видел несколько примеров того, что используется для обозначения последовательности чисел (example seen), я могу разблокировать последовательность чисел?

Спасибо за консультацию,

наслаждайтесь!

ответ

3

Если возможно, избегайте создания заголовка журнала, если он вам не нужен. Например, создайте его непосредственно перед первой вставкой строки журнала. Тест if (!journalTable).

Вы можете добиться того, что указать, вызвав newGetNum со вторым параметром _makeDecisionLater значение ИСТИНА. Затем позвоните numberSeq.abort(), чтобы прервать генерацию номера или numberSeq.use(), чтобы использовать знак.

Это работает только в том же объеме транзакции, что и newGetNum, и если последовательность чисел непрерывна. Если нет, оба вызова не работают.

0

Вот мое решение для не непрерывной последовательности. Перезаписать метод удаления источника данных. Это также может быть реализовано в методе удаления таблицы:

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

И overwritting близкого метода формы, чтобы покрыть случай, если пользователь выходит из формы без сохранения записи:

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

    super(); 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^