Archive for the ‘AX Technical’ Category

CREATE NUMBER SEQUENCE IN AX

Posted: June 12, 2015 in AX Technical

CREATE NUMBER SEQUENCE

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. To create custom number sequence need to follow some steps:

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 ‘MyNumSeq’ of type String1
  •    Set the properties as shown below2
  • Now go to AOT → Classes and open the NumberSeqModuleCustomer class by right clicking it and selecting View Code3
  • In  the loadModule method, add the following code after the last line of code

//define the EDT
datatype.parmDatatypeId(extendedTypeNum(MyNumSeq));//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);

//define its scope
datatype.addParameterType(NumberSeqParameterType::DataArea, truefalse);
this.create(datatype);

  • Now, go toAOT  Jobs  and create a new job loadMyNumSeq

Write the following code in the job and then run it

static void loadMyNumSeq(Args _args)
{
//define the class variable
NumberSeqModuleCustomer numSeqMod = new NumberSeqModuleCustomer();

//load the number sequences that were not generated
numSeqMod.load();
}

  • Now, go to  System AdministrationOrganization administration → Common → Number sequences → Number sequences4
  • Click on Number Sequence button in the New button group5
  •  In New Record change value of tabs according to your requirement.

          Identification → Name and Code of Number Sequence
         Scope parameter → Scope → company→company → “Your company” 6

  • Set values of segment tab as shown in picture below:7
  •        Set values of General tab8
  •    Set values in Largest and continuous as shown in picture and press close button9
  •  Now click on Generate button and wait for some time it will create new number sequence.10
  • In the Setup number sequences wizard, Press Next11
  • In the last step, Click Finish to generate the number sequences12
  •    Now check your generated number sequence by typing name of your number sequence in filter13
  •    Now goto Account Receivable , expand setup and click on account receivable parameters
  •    Now click on Number Sequence (left below as visible in picture) , in reference column find mynumseq (EDT) and in number sequence code column find mynum (your number sequence code)14
  •     Create a new table, if you already have a table where you want to use number sequence add a new string field            and set properties as follows15
  •  Create a new form, if you already have a form in which you want to use number sequence then  simply add the table to form’s data source.
  •  Write the following code on the Class declaration node

NumberSeqFormHandler numberSeqFormHandler;

  •   Create a new method on the form and write the following code

NumberSeqFormHandler 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,MyNumSeqTable_DS,fieldnum(MyNumSeqTable,MyNumSeq));
}
return numberSeqFormHandler;
}

  •       Override the close method of the form and write the following code

public void close()
{
if (numberSeqFormHandler)
{
numberSeqFormHandler.formMethodClose();
}

super();
}

  •      Override the create method on the MyNumSeqTable data source and add the following code

public void create(boolean _append = false)
{
element.numberSeqFormHandler().formMethodDataSourceCreatePre();

super(_append);

element.numberSeqFormHandler().formMethodDataSourceCreate(true);
}

  •       Override the write method on the MyNumSeqTable  data source and add the following code

public void write()
{
super();

element.numberSeqFormHandler().formMethodDataSourceWrite();
}

  •     Override the validateWrite method on the MyNumSeqTable  data source and add the following code

public boolean validateWrite()
{
boolean ret;

ret = super();

ret = element.numberSeqFormHandler().formMethodDataSourceValidateWrite(ret) && ret;

return ret;
}

  •     Override the delete method on the MyNumSeqTable  data source and add the following code

public
void delete()
{

element.numberSeqFormHandler().formMethodDataSourceDelete();

super();
}

  •          Override the linkActive method on the MyNumSeqTable  data source and add the following code

public
void linkActive()
{

element.numberSeqFormHandler().formMethodDataSourceLinkActive();

super();
}

  •     Now open form.16
  • The number in number sequence will be automatically created every time you create a new record in form.