Thursday 23 August 2012

Implementing The Enhanced Number Sequence Framework In Dynamics AX 2012:


Overview


Number sequencing is an essential feature in an Enterprise Resource Planning (ERP) system. Microsoft Dynamics
® AX employs a number sequence framework to generate alphanumeric number sequences. The primary purpose of the number sequence framework is to provide unique, user-friendly identifiers while maintaining a continuous or noncontinuous alphanumeric sequence.


There are two main concepts in Number Sequence Framework.


· Segments:

Is a data entity such as legal entity, operating unit, or fiscal calendar period that can be used to define a number sequence. In the enhanced number sequence framework, a number sequence can have more than one segment.

e.g) J-20-Jan11 is a combination of multiple segments.


· Scope:

Is a valid combination of segments used for a specific transaction or master data entity.

e.g.) Company + Fiscal Calender Period.


Steps


· Create an EDT of type String. In this Example I will use CustGroupId.

· Open the NumberSeqModuleCustomer class in the Application Object Tree (AOT), and add the following code to the bottom of the loadModule() method:

datatype.parmDatatypeId (extendedTypeNum (CustGroupId));
datatype.parmReferenceHelp ("Customer group ID");
datatype.parmWizardIsContinuous (false);
datatype.parmWizardIsManual (NoYes::No);
datatype.parmWizardIsChangeDownAllowed (NoYes::Yes);
datatype.parmWizardIsChangeUpAllowed (NoYes::Yes);
datatype.parmWizardHighest (999);
datatype.parmSortField (20);
datatype.addParameterType (NumberSeqParameterType::DataArea,true, false);
this. Create(datatype);


· Create a new job with the following code and run it:


Static void NumberSeqLoadAll (Args _args)

{

      NumberSeqApplicationModule::loadAll();
}


· In the Organization administration | Common | Number sequences | Number sequences generate number sequence. Delete everything apart from the lines where Area is Accounts receivable and Reference is Customer group.


· Locate the CustParameters table in the AOT and create the following method:



Public server static NumberSequenceReference numRefCustGroupId ()
{
         return NumberSeqReference::findReference ( extendedTypeNum(CustGroupId));
}


· In the AOT, open the CustGroup form and add the following code to its class declaration:

   NumberSeqFormHandler             numberSeqFormHandler;


· Create a new method called numberSeqFormHandler() in the same form:


Public NumberSeqFormHandler numberSeqFormHandler()
 {
     if (!numberSeqFormHandler)
{
      numberSeqFormHandler = NumberSeqFormHandler::new Form(
      CustParameters::numRefCustGroupId().NumberSequenceId,
      element,
      CustGroup_ds,
      fieldNum(CustGroup,CustGroup));
}
      return numberSeqFormHandler;

}



· Override CustGroup data source's create() method with the following code:

Public void create (Boolean _append = false)
{
element. NumberSeqFormHandler ().formMethodDatasourceCreatePre ();
super (_append);
element. NumberSeqFormHandler ( ).formMethodDatasourceCreate ();
}



· Override its delete() method with the following code:

Public void delete ()

{
ttsBegin;
element.numberSeqFormHandler().formMethodDatasourceDelete ();
super ();
ttsCommit;
}

· override its write () method with the following code:

Public void write()
{
ttsBegin;
super();
element.numberSeqFormHandler().formMethodData sourceWrite();
ttsCommit;
}

· Override its validateWrite() method with the following code:

Public boolean validateWrite ()
{
boolean ret;
ret = super();
ret = element.numberSeqFormHandler( ).formMethodDatasourceValidateWrite(ret)&& ret;
return ret;
}


· Override its LinkActive() method with the following code:

Public void linkActive()
{
element.numberSeqFormHandler ( ).formMethodDatasourceLinkActive();
super();
}


· Finally, override the form's close() method with the following code:


Public void close ()
{
if (numberSeqFormHandler)
{
numberSeqFormHandler.formMethodClose ();
}
super();
}


· Open Accounts receivable | Setup | Customers | Customer groups to test and create new entries.
 

0 comments:

Post a Comment