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 table
numberSeqFormHandler =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 properties
datatype.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);
datatype.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);
this.create(datatype);
Write the following code in the job and then run it
static void loadNumSeqCustDemo(Args _args)
{
//define the class variable
NumberSeqModuleCustomer seqMod = new NumberSeqModuleCustomer();
{
//define the class variable
NumberSeqModuleCustomer seqMod = new NumberSeqModuleCustomer();
//load the number sequences that were not generated
seqMod.load();
}
seqMod.load();
}
No comments:
Post a Comment