介绍AX中的编号规则的使用
AX系统中的物料、销售订单、采购订单编号都可以通过灵活的设置使其支持手工或自动编号功能,
设置的方法很简单:
1. 依次打开“基本设置”->“设置”->“编号规则”
2. 在打开的“编号规则”窗体中新建一条规则
3. 在“常规”页签设置该编号规则特性
最小 | 从那个值开始编号 | INV_00001 |
最大 | 到那个值结束 | INV_99999 |
下一个 | 系统下一个获取的值 | INV_00001 |
格式 | INV_##### | 每个#号代表一位,#号个数必须和“最大”中指定的位数相同,比如在该例中最大值为99999,#号个数必须为5个。 |
手动/连续 | 手动还是自动编号 | 系统自动编号 |
4. 在每个模块的“设置”->“参数设置”的“编号规则”页签指定对应关系。
例如:“物料编号”使用名为“INV_物料编号”的编码规则
完成后,新建物料时,物料编码就会自动产生,格式为:INV_00001、INV_00002…
自定义编号规则–在已有模块中添加编号规则
假定我们要在AX的库存管理模块添加关于“包装箱ID”的编号规则,方法如下:
1. 为“包装箱ID”新建扩展数据类型,假定名称为“PackingID”,Label属性设置为“包装箱ID”。Label属性最终将出现在上图中的参考中。
2. 在AOT的Class中有若干个以“NumberSeqReference_”开头的类,每个类对应着AX系统的一个模块。例如:“NumberSeqReference_Inventory”类对应“库存管理”模块。
打开“NumberSeqReference_Inventory”类,在loadModule()方法中添加如下代码
protected void loadModule() { NumberSequenceReference numRef; //WW12345678 Start // 包装箱ID numRef.DataTypeId = typeId2ExtendedTypeId(typeid(PackingId)); //“PackingId”我们刚才定义的扩展数据类型 numRef.ReferenceHelp = literalstr("此键在整个系统中用于标示包装箱。如果创建包装箱时不希望手动指定包装箱编号,则可以使用该引用"); numRef.WizardManual = NoYes::No; numRef.WizardAllowChangeDown = NoYes::No; numRef.WizardAllowChangeUp = NoYes::No; numRef.SortField = 1; this.create(numRef); //WW12345678 End }
此键在整个系统中用于标示订单进度行,创建订单进度行时必须使用该引用自动指定订单进度行编号。
3. 在AOT的Table中有若干个以“Parameters”结尾的表,每个表类对应着AX系统的一个模块。例如:“InventParameters”类对应“库存管理”模块。
打开“InventParameters”表的Methods,新建以“numRef”为前缀的方法
//WW12345678 Start // 包装箱ID static client server NumberSequenceReference numRefPackingId() { return NumberSeqReference::findReference( typeId2ExtendedTypeId(typeid(PackingId))); } //WW12345678 End </pre> 4. 在你设计的“包装箱”的Form的“classDeclaration”中添加变量 <pre lang="C">public class FormRun extends ObjectRun { NumberSeqFormHandler numberSeqFormHandlerPackingId; } </pre> 5. 在你设计的“包装箱”的Form的数据源中,重载“create”方法 <pre lang="C">public void create(boolean _append = false) { super(_append); numberSeqFormHandlerPackingId = NumberSeqFormHandler::newForm( InventParameters::numRefPackingId().NumberSequence, element, packingTable_ds, fieldnum(PackingTable, PackingId) ); numberSeqFormHandlerPackingId.formMethodDataSourceCreate(); }
6. 当你如上一章节介绍的那样设置好后,运行窗体点击新建后,系统将根据你的设置自动或手动产生PackingId。
自定义编号规则–在新的模块中添加编号规则
假如我们要在AX中自己创建的的模块MyModule中添加关于PackingId的编号规则,方法如下:
1. 在AOT的baseEnum 下找到“NumberSeqModule”,添加一个新的元素命名为“MyModule”。
2. 为“包装箱ID”新建扩展数据类型,假定名称为“PackingID”,Label属性设置为“包装箱ID”。
3. 创建一个新类,命名为“NumberSeqReference_MyModule”,继承自“ NumberSeqReference”类。
public class NumberSeqReference__MyModule extends NumberSeqReference { } protected void loadModule() { NumberSequenceReference numRef; ; // 包装箱ID numRef.DataTypeId = typeId2ExtendedTypeId(typeid(PackingId)); //“PackingId”我们刚才定义的扩展数据类型 numRef.ReferenceHelp = literalstr("此键在整个系统中用于标示包装箱。如果创建包装箱时不希望手动指定包装箱编号,则可以使用该引用"); numRef.wizardContinuous = true; numRef.WizardManual = NoYes::No; numRef.WizardAllowChangeDown = NoYes::No; numRef.WizardAllowChangeUp = NoYes::No; numRef.SortField = 1; this.create(numRef); } static NumberSeqModule numberSeqModule() { return NumberSeqModule::PrePurchase; }
4. 修改“NumberSeqReference”类的下列”方法
ClassesNumberSeqReferencemoduleList
//WW12345678 Begin moduleList += NumberSeqReference__MyModule::numberSeqModule(); // WW12345678 End </pre> ClassesNumberSeqReferenceconstruct <pre lang="C">//WW12345678 begin case (NumberSeqReference_ MyModule::numberSeqModule()): return new NumberSeqReference__MyModule (_module); //WW12345678 end
5.模仿系统中FormsLedgerParameters的创建自己的“参数设置”窗体。
无灵活性、扩展性的简易方法
1. 依次打开“基本设置”->“设置”->“编号规则”
2. 在打开的“编号规则”窗体中新建一条规则,如“’MySequence”
3. 在“常规”页签设置该编号规则特性
最小 | 1 |
最大 | 99999 |
下一个 | 2 |
格式 | MySeq_##### |
手动/连续 | 自动编号 |
4. 在form的数据源的Create方法中写:
public void create(boolean _append = false) { NumberSeq _numberSeq; //声明NumberSeq variable ; super(_append); _numberSeq = numberSeq::newGetNumFromCode('MySequence',true,false); CurrentSequenceNo=_NumberSeq.num(); }
转载请注明:ww12345678 的部落格 | AX Helper » [原创]Microsoft Dynamcis AX 中的编号规则研究