2016-02-06 6 views
0

J'ai une question simple, je ne sais pas si c'est possible.Comment récupérer une séquence numérique juste utilisée?

Dans ma classe J'ai un des méthodes, dans un en particulier que je crée un enregistrement dans LedgerJournalTable et enregistrer la référence de la table dans _createdLedgerJournalTable variable globale.

Ainsi, dans une autre méthode appelée après il y a la possibilité que je supprimer mon createdLedgerJournalTable vient d'être créé.

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

LedgerJournalTable .delete(); 
ttsCommit; 

Je sais qu'il est étrange que je peux récupérer la partie Nombre d'enregistrements supprimés? Début Je supprime l'enregistrement Je peux enregistrer le JournalNum et marquer la séquence numérique n'est pas utilisée?

J'ai vu quelques exemples de cela est utilisé marquer la séquence de numéros (example seen), je peux déverrouiller la séquence de numéros?

Merci à des conseils,

profiter!

Répondre

3

Si possible, évitez de créer l'en-tête du journal si vous n'en avez pas besoin. Par exemple, créez-le juste avant la première insertion de la ligne de journal. Test if (!journalTable).

Vous peut obtenir ce spécifier en appelant newGetNum avec le second paramètre _makeDecisionLater valeur true. Puis appelez numberSeq.abort() pour abandonner la génération de numéro ou numberSeq.use() pour marquer utilisé.

Cela ne fonctionne que si dans la même portée de transaction que newGetNum et si la séquence de numéros est continue. sinon, les deux appels sont no-operations.

0

Voici ma solution pour une séquence non continue. Remplacer la méthode de suppression de la source de données. Cela pourrait également être mis en œuvre dans la méthode de suppression de la table:

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

Et la méthode proche écrasant de la forme, pour couvrir le cas si l'utilisateur quitte le formulaire sans enregistrer l'enregistrement:

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

    super(); 
}