2012-12-14 101 views
1

我有一个自定义实用工具,它使用AX 2012 2012 AOT中的自定义表格,我想为我的表格添加一个标识字段,并且有人告诉我我可以使用数字序列进行此操作,并且可以将一个数字序列映射到我的表中,以便在插入行时可以得到一个新的唯一ID,当我尝试生成数字序列时,它询问我AREA和模块信息,因为我想为我的定制表和实用程序工作在使用.net商业连接器的动态轴心之外,我无法弄清楚输入向导的内容。斧头自定义表格的数字序列2012

回答

4

您可能已经看到了使用NumberSeqModule枚举并向其添加自定义模块枚举值的方法。然后,您通常会创建一个扩展NumberSeqApplicationModule类的类,然后使用数字序列引用加载链接到数据类型的数字序列。

虽然这是'最佳实践方式',但对于您现在要做的事情来说,这有点矫枉过正。所以这里是你可以做的:

你可以覆盖你正在使用的表的插入方法。你可以在NumberSeq类上使用newGetNumFromCode构造函数。

public static NumberSeq newGetNumFromCode(
    NumberSequenceCode _numberSequenceCode, 
    NumberSeqScope  _scope = NumberSeqScopeFactory::createDefaultScope(), 
    boolean    _makeDecisionLater   = false, 
    boolean    _dontThrowOnMissingRefSetUp = false, 
    SysLastValue  _nextNumSeq = null, 
    boolean    _fillNextNumSeq = false) 
{ 
    return NumberSeq::newGetNumFromId(
      NumberSequenceTable::findByNaturalKey(_numberSequenceCode, _scope.getId()).RecId, 
      _makeDecisionLater, 
      _dontThrowOnMissingRefSetUp, 
      _nextNumSeq, 
      _fillNextNumSeq); 
} 

所以现在使用这个,你只需要创建动态AX中的一个新numbersequence(组织管理|数列|数列),并记数序列编码。

然后在你的表的插入方法,你可以做到以下几点:(例子中从联系人表中获得)

if (!this.ContactPersonId) 
{ 
    this.ContactPersonId = NumberSeq::newGetNum(CompanyInfo::numRefContactPersonId()).num(); 
} 

这应该确保当插入一条记录,你也将填写身份证。

+0

感谢肯尼,我创建了一个数列,并重写我的插入方法和使用newGetNumFromCode方法,我得到了重复号码,后来有人告诉我,我有使用连续数字序列并将代码包装在事务TTSBegin和TTSEnd中。有效。 – alphaprolix

+0

@Kenny Saelen:在这个例子中你使用了NumberSeq :: newGetNum()。我正在创建NumberSeq :: newGetNumFromCode(),但它(有时并不总是)抛出一个“数字序列不存在”的异常。任何想法为什么是这样?我在组织管理中使用“新数字序列”生成数字序列,而不是通过代码(使用EDT stuff,loadModule()方法和全部)或生成序列向导。 –

1

这是如何U以正常的方式,你数列

custTable.xyz = NumberSeq::newGetNum(CompanyInfo::numrefContactId()).num(); 
+0

这的确是上面的答案:) –