Session 数字序列问题

Session 数字序列问题,session,axapta,dynamics-ax-2009,Session,Axapta,Dynamics Ax 2009,我们经常遇到这样一个问题,即工作会话或客户端会话是否崩溃,这些会话是否正在使用数字序列创建新记录,但它们最终会完全阻止该数字序列,任何试图使用相同序列创建记录的人都将冻结其客户端 发生这种情况时,我通常会进入NUMBERSEQUENCELIST表,找出正确的DataAreadId和用户,并删除状态为=1的行 但这真的很烦人。是否有任何方法可以配置AOS服务器,以便在客户端/工作者崩溃时释放数字序列 对于worker会话,我想我们可以微调其中运行的代码,但是对于客户端会话崩溃,我们无能为力 有什么

我们经常遇到这样一个问题,即工作会话或客户端会话是否崩溃,这些会话是否正在使用数字序列创建新记录,但它们最终会完全阻止该数字序列,任何试图使用相同序列创建记录的人都将冻结其客户端

发生这种情况时,我通常会进入
NUMBERSEQUENCELIST
表,找出正确的
DataAreadId
和用户,并删除
状态为
=1的行

但这真的很烦人。是否有任何方法可以配置AOS服务器,以便在客户端/工作者崩溃时释放数字序列

对于worker会话,我想我们可以微调其中运行的代码,但是对于客户端会话崩溃,我们无能为力

有什么想法吗

谢谢


编辑:在这种情况下,重新启动AOS服务器后,您可以进入数字序列菜单中的列表,并将其清除。在重新启动之前,我的客户端将冻结尝试这样做。因此,无需直接通过SQL执行此操作。

每24小时自动清理
NumberSequenceList
中的连续数字(或按数字顺序设置)。如果有许多“死亡”数字(数百或数千),清理过程相当缓慢。这可能被视为挂起,但不是

需要考虑的事项:

  • 是否需要连续数字序列
  • 更频繁地进行清理(例如每半小时清理一次,而不是默认的24小时清理一次)
  • 将清理过程设置为批处理过程
  • 使用数字序列修复客户端代码中的错误
同时,避免保留号码,只需使用即可。而不是反模式:

NumberSeq idSequence = NumberSeq::newGetNum(IntrastatParameters::numRefIntrastatArchiveID(), true);
this.IntrastatArchiveID = idSequence.num();
idSequence.used();
只需使用以下号码:

this.IntrastatArchiveID = NumberSeq::newGetNum(IntrastatParameters::numRefIntrastatArchiveID()).num();
makeDecisionLater
参数只能在表单中使用,用户可以在表单中决定不使用数字(通过删除或转义)。在这种情况下,
numbersQformHandler