Axapta ax 2012中自定义表的编号顺序
我有一个自定义实用程序,它在AX 2012 AOT中使用一个自定义表,我想为我的表设置一个标识字段,有人告诉我可以使用数字序列,并可以将数字序列映射到我的表,以便它可以在插入行时获得一个新的唯一id,当我尝试生成数字序列时,它会询问我区域和模块信息,由于我希望自定义表和实用程序使用.net business connector在dynamics ax 2012外部工作,因此我无法确定该向导的输入内容。您可能已经看到了使用NumberSeqModule enum并向其中添加自定义模块enum值的方法。然后,您通常会创建一个扩展NumberSeqApplicationModule类的类,然后使用数字序列引用加载链接到数据类型的NumberSequence 虽然这是“最佳实践方式”,但对于您现在想要做的事情来说,这有点过头了。下面是你能做的: 您可以只覆盖正在使用的表的insert方法。另外,您可以在NumberSeq类上使用newGetNumFromCode构造函数Axapta ax 2012中自定义表的编号顺序,axapta,dynamics-ax-2012,number-sequence,Axapta,Dynamics Ax 2012,Number Sequence,我有一个自定义实用程序,它在AX 2012 AOT中使用一个自定义表,我想为我的表设置一个标识字段,有人告诉我可以使用数字序列,并可以将数字序列映射到我的表,以便它可以在插入行时获得一个新的唯一id,当我尝试生成数字序列时,它会询问我区域和模块信息,由于我希望自定义表和实用程序使用.net business connector在dynamics ax 2012外部工作,因此我无法确定该向导的输入内容。您可能已经看到了使用NumberSeqModule enum并向其中添加自定义模块enum值的方
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(组织管理|数字序列|数字序列)中创建一个新的数字序列,并记住数字序列代码
然后在表的insert方法上可以执行以下操作:(示例取自联系人表)
这应该确保在插入记录时,您还将填充ID。您可能已经看到了使用NumberSeqModule枚举并向其添加自定义模块枚举值的方法。然后,您通常会创建一个扩展NumberSeqApplicationModule类的类,然后使用数字序列引用加载链接到数据类型的NumberSequence 虽然这是“最佳实践方式”,但对于您现在想要做的事情来说,这有点过头了。下面是你能做的: 您可以只覆盖正在使用的表的insert方法。另外,您可以在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(组织管理|数字序列|数字序列)中创建一个新的数字序列,并记住数字序列代码
然后在表的insert方法上可以执行以下操作:(示例取自联系人表)
这应该确保在插入记录时,您也会填写ID。这是您以正常方式对序列进行编号的方式
custTable.xyz = NumberSeq::newGetNum(CompanyInfo::numrefContactId()).num();
这就是你如何用正常的方式给序列编号
custTable.xyz = NumberSeq::newGetNum(CompanyInfo::numrefContactId()).num();
感谢Kenny,我创建了一个数字序列,覆盖了我的insert方法,并使用了newGetNumFromCode方法,我得到了重复的数字,然后有人告诉我必须使用连续的数字序列,并将代码包装到事务TTSBegin和TTSEnd中。它起作用了。@Kenny Saelen:您在本例中使用了NumberSeq::newGetNum()。我正在创建NumberSeq::newGetNumFromCode(),但它(有时,并非总是)抛出一个异常“数字序列不存在”。你知道为什么会这样吗?我在组织管理中使用“新数字序列”生成了数字序列,而不是通过代码(使用EDT stuff、loadModule()方法和所有方法)或生成序列向导生成的。感谢Kenny,我创建了一个数字序列并覆盖了我的插入方法,使用了newGetNumFromCode方法,我得到了重复的数字,然后有人告诉我,我必须使用连续的数字序列,并将代码包装在一个事务TTSBegin和TTSEnd中。它起作用了。@Kenny Saelen:您在本例中使用了NumberSeq::newGetNum()。我正在创建NumberSeq::newGetNumFromCode(),但它(有时,并非总是)抛出一个异常“数字序列不存在”。你知道为什么会这样吗?我在组织管理中使用“新数字序列”生成数字序列,而不是通过代码(使用EDT stuff、loadModule()方法和所有方法)或生成序列向导。这确实是上面的答案:)这确实是上面的答案:)