Overview
Number sequences are unique identifiers that can be associated with a master record so that they can be individually distinguished. They can be either formatted as alpha-numeric strings or simply as numbers.
Microsoft Dynamics AX 2012 provides an easy to implement framework to generate custom number sequences.
Scenario
As part of this tutorial, a custom number sequence will be generated for the Customer Groups setup form (Accounts receivable à Setup à Customers à Customer groups)
Steps
- First create a new Extended Data Type (EDT). Open AOT àData Dictionary à Extended Data Types
- Right Click on Extended Data Types and create a new EDT NumSeqDemoCustGroupNum of type String
- Set the properties as shown below
- Now go to AOT à Classes and open the NumberSeqModuleCustomer class by right clicking it and selecting View Code
- In the loadModule method, add the following code after the last line of code
- Now, go to AOT à Jobs and create a new job loadNumSeqCustDemo
- Now, go to Organization administration à Common à Number sequences à Number sequences
- Click on Generate button in the New button group
- In the Setup number sequences wizard, Press Next
- In the Setup set different values for the number sequence like the format, highest value and lowest value
- Click Next
- In the last step, Click Finish to generate the number sequences
- The number sequence is generated and can be used on the Customer Groups form
- Open AOT à Data Dictionary à Tables à CustGroup
- Add a new String field and set the properties as follows
- Add the newly added field in the Overview field group
- Now go to Forms àCustGroup and restore the form. It will add the newly added field in the grid
- Write the following code on the Class declaration nodeNumberSeqFormHandler numberSeqFormHandler;
- Create a new method on the form and write the following codeNumberSeqFormHandler numberSeqFormHandler(){
if (!numberSeqFormHandler){//create a reference of number sequence form handler class specifying the EDT, Data source name and the field of the tablenumberSeqFormHandler =NumberSeqFormHandler::newForm(NumberSeqReference::findReference(extendedtypenum(NumSeqDemoCustGroupNum)).NumberSequenceId, element,CustGroup_DS,fieldnum(CustGroup,CustGroupNumber));}return numberSeqFormHandler;
} - Override the close method of the form and write the following codepublic void close(){
if (numberSeqFormHandler)
{numberSeqFormHandler.formMethodClose();}super();} - Override the create method on the CustGroup data source and add the following codepublic void create(boolean _append = false){
element.numberSeqFormHandler().formMethodDataSourceCreatePre();super(_append);element.numberSeqFormHandler().formMethodDataSourceCreate(true);} - Override the write method on the CustGroup data source and add the following codepublic void write(){
super();element.numberSeqFormHandler().formMethodDataSourceWrite();} - Override the validateWrite method on the CustGroup data source and add the following codepublic boolean validateWrite(){
boolean ret;ret = super();ret = element.numberSeqFormHandler().formMethodDataSourceValidateWrite(ret) && ret;return ret;} - Override the delete method on the CustGroup data source and add the following codepublic
void delete(){element.numberSeqFormHandler().formMethodDataSourceDelete();super();} - Override the linkActive method on the CustGroup data source and add the following codepublic
void linkActive(){element.numberSeqFormHandler().formMethodDataSourceLinkActive();super();} - Now go to Accounts receivable à Setup à Customers à Customer groups
- Create a new record. The number sequence is generated according to the format defined as shown below
//customer group number
//define the EDT
datatype.parmDatatypeId(extendedTypeNum(NumSeqDemoCustGroupNum));
//define its default propertiesdatatype.parmReferenceHelp(literalStr(“Unique number for customer group”));datatype.parmWizardIsContinuous(true);datatype.parmWizardIsManual(NoYes::No);datatype.parmWizardIsChangeDownAllowed(NoYes::No);datatype.parmWizardIsChangeUpAllowed(NoYes::No);datatype.parmWizardHighest(999999);datatype.parmSortField(27);
//define its scope
datatype.addParameterType(NumberSeqParameterType::DataArea, true, false);this.create(datatype);
Write the following code in the job and then run it
static void loadNumSeqCustDemo(Args _args){
//define the class variableNumberSeqModuleCustomer seqMod = new NumberSeqModuleCustomer();
//define the class variableNumberSeqModuleCustomer seqMod = new NumberSeqModuleCustomer();
//load the number sequences that were not generatedseqMod.load();}