原文地址:http://axdaily.blogspot.com/2010/04/deadlocks-with-number-sequences.html
Number sequence cannot be set up and used in the same transaction. If you’ll try to do so you’ll face a deadlock. This happens because of the fact that AX uses separate connection to get next number from a number sequence.
For example, the following code will cause deadlock:
public static void testNumberSequences()
{
NumberSequenceTable numberSequenceTable;
NumberSequenceReference numberSequenceReference;
ttsbegin;
numberSequenceTable.NumberSequence = 'A';
numberSequenceTable.Lowest = 1;
numberSequenceTable.Highest = 99999;
numberSequenceTable.NextRec = 1;
numberSequenceTable.Format = '#####';
numberSequenceTable.Continuous = NoYes::No;
numberSequenceTable.insert();
numberSequenceReference.DataTypeId = typeId2ExtendedTypeId(typeid(ItemGroupId));
numberSequenceReference.NumberSequence = numberSequenceTable.NumberSequence;
numberSequenceReference.insert();
NumberSeq::newGetNum(NumberSeqReference::findReference(
typeId2ExtendedTypeId(typeid(ItemGroupId))))
.num();
ttscommit;
}
By moving the line with num() call out of tts scope the deadlock will be eliminated.
转载请注明:ww12345678 的部落格 | AX Helper » [转]Microsoft Dynamics AX 由编号序列导致的死锁