【问题标题】:Number sequence for custom table in ax 2012ax 2012 中自定义表格的编号规则
【发布时间】:2013-09-25 19:29:59
【问题描述】:

我有一个自定义实用程序,它在 AX 2012 AOT 中使用自定义表格,我想为我的表格设置一个身份字段,有人告诉我我可以为此使用数字序列,并且可以将数字序列映射到我的表格中它可以在插入行时获得一个新的唯一 ID,当我尝试生成数字序列时,它会询问我 AREA 和模块信息,因为我希望它用于我的自定义表和实用程序,该表和实用程序在 Dynamics ax 2012 之外使用.net业务连接器,我不知道该输入什么向导。

【问题讨论】:

    标签: axapta dynamics-ax-2012 number-sequence


    【解决方案1】:

    您可能已经看到使用 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);
    }
    

    所以现在要使用它,您只需在 Dynamics Ax 中创建一个新的数字序列(组织管理 | 数字序列 | 数字序列)并记住数字序列代码。

    然后在你的表的插入方法上,你可以执行以下操作:(示例取自联系人表)

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

    这应该确保在插入记录时,您也会填写 ID。

    【讨论】:

    • 感谢 Kenny,我创建了一个数列并覆盖了我的插入方法并使用了 newGetNumFromCode 方法,我得到了重复的数字,然后有人告诉我必须使用连续数列并将代码包装在一个事务中TTSBegin 和 TTSEnd。它奏效了。
    • @Kenny Saelen:你在这个例子中使用了 NumberSeq::newGetNum()。我正在创建 NumberSeq::newGetNumFromCode(),但它(有时,并非总是)抛出“数字序列不存在”的异常。知道为什么会这样吗?我在组织管理中使用“新数字序列”生成了数字序列,而不是通过代码(使用 EDT 的东西、loadModule() 方法和所有方法)或生成序列向导。
    【解决方案2】:

    这就是你正常编号的方式

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

    【讨论】:

    • 确实是上面的答案:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-01
    • 1970-01-01
    • 2015-09-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多