The main purpose of Number sequence is to be used as unique identifier, readable alphanumeric number for Master data or can be used as business Id for transaction details records.
In general there is no difference between creating new number sequence in AX 2012 and D365FO
Scenario in few steps :
In my case i have a new specific module, the name of my module is MyNewD365Module
Step 1 : Create a new extension of « NumberSeqModule » standard base enum, and add my enum value. which represent the name of my D365FO Module.
Step 2 : Create a new EDT, which will represent the value of your number sequence Id.
My EDT name is : MyNumSeqEDT
Step 3-1 : Create new parameter table,
Just like accounts receivable or project management, Each new module must have a global parameter table, in our case « MyNewTableParameter » will contain the basic setup information for the new module. this include the default information and the options that determine how the processes within « MyNewD365ModuleEnum » module operate.
Step 3-2 : Add new method to parameter table
Add the Following method:
public client server static NumberSequenceReference numRefID()
{
return NumberSeqReference::findReference(extendedTypeNum(MyNumSeqEDT));
}
Step 4 : Create a new class, which extend from « NumberSeqApplicationModule » standard class, and add the following method.
public void loadModule()
{
NumberSeqDatatype datatype = NumberSeqDatatype::construct();datatype.parmDatatypeId(extendedTypeNum(MyNumSeqEDT));
datatype.parmReferenceHelp(« My Number Seq ID »);
datatype.parmWizardIsContinuous(false);
datatype.parmWizardIsManual(NoYes::No);
datatype.parmWizardIsChangeDownAllowed(NoYes::Yes);
datatype.parmWizardIsChangeUpAllowed(NoYes::Yes);
datatype.parmSortField(1);
datatype.parmWizardLowest(1);
datatype.parmWizardHighest(9999);datatype.addParameterType(NumberSeqParameterType::DataArea, true, false);
this.create(datatype);
}
In this method i configure the static information for data type that will be associated with my number sequence by passing number of parameters, some of them are optional.
- I can indicate if the number sequence is continious and Manual by default or not for the associated EDT.
- If an administrator can change the value of the next number in a number sequence backward / forwards or not.
- Minium, Maximum value
Complet class code :
class MyNumberSeqModule extends NumberSeqApplicationModule
{
public void loadModule()
{
NumberSeqDatatype datatype = NumberSeqDatatype::construct();datatype.parmDatatypeId(extendedTypeNum(MyNumSeqEDT));
datatype.parmReferenceHelp(« My Number Seq ID »);
datatype.parmWizardIsContinuous(false);
datatype.parmWizardIsManual(NoYes::No);
datatype.parmWizardIsChangeDownAllowed(NoYes::Yes);
datatype.parmWizardIsChangeUpAllowed(NoYes::Yes);
datatype.parmSortField(1);
datatype.parmWizardLowest(1);
datatype.parmWizardHighest(9999);datatype.addParameterType(NumberSeqParameterType::DataArea, true, false);
this.create(datatype);
}public NumberSeqModule numberSeqModule()
{
return NumberSeqModule::MyNewD365Module;
}}
class loadMyModule
{
/// <summary>
/// Runs the class with the specified arguments.
/// </summary>
/// <param name = « _args »>The specified arguments.</param>
public static void main(Args _args)
{
MyNumberSeqModule numberSeq = new MyNumberSeqModule();
numberSeq.loadModule();
}}



static void number(Args _args){NumberSeq numberSeq;MyNumSeqEDT num;numberSeq = NumberSeq::newGetNum(MyNewTableParameter::numRefID());num = numberSeq.num();info(num);}