Number sequences

Number sequences in Axapta are a mechanism for generating unique numbers. These are generally used as a unique Id to identify a table record.

Every number sequence is linked to an ExtendedDataType inside Axapta. Therefore you will need to create separate datatypes for each number sequence which will be created.

Adding a number sequence
You may wish to use one or more new number sequences when you create your own module inside Axapta.

The steps to add your own number sequence to Axapta are fairly straight-forward, but lengthy. The following description is based on the Axapta best-practice methodologies.

For this example, we will add one new number sequence called NSId for a new module called NS. This assumes that an ExtendedDataType called NSId already exists.

If not using an existing extended datatype, create a new string EDT, which extends datatype 'num'. Note that in Ax 3.0 this num is a string field, length of 20.

Add an element to the NumberSeqModule base enum
One element should be added to the enum for your module, irrespective of the number of actual number sequences which will be created.

Therefore we modify the NumberSeqModule enum and add the element NS.

Extend the NumberSeqReference class
Create a new sub-class of NumberSeqReference and implement the numberSeqModule and loadModule methods. Use an existing sub-class as a template to assist with this. This is shown below. public class NumberSeqReference_NS extends NumberSeqReference {

}

/* Detailed description of how to setup references for number sequences can be found i method loadModule on the 'father' class: numberSeqReference.

protected void loadModule {   NumberSequenceReference numRef; ;

// Setup Job TransId numRef.dataTypeId             = typeid2extendedtypeid(typeid(NSId)); numRef.referenceHelp          = "Some description here"; numref.WizardContinuous        = false; numRef.WizardManual            = NoYes::No; numRef.WizardAllowChangeDown   = NoYes::No; numRef.WizardAllowChangeUp     = NoYes::No; numRef.sortField              = 1;

this.create(numRef);

} public static NumberSeqModule numberSeqModule {   return NumberSeqModule::NS; }

In addition, you must modify the construct and moduleList methods on NumberSeqReference itself to add references to your new module class. Note the sections of code surrounded by //--- NS Begin and //--- NS End

static public container moduleList {   container moduleList; ;

moduleList += NumberSeqReference_Bank::numberSeqModule; moduleList += NumberSeqReference_BOM::numberSeqModule; moduleList += NumberSeqReference_Customer::numberSeqModule; moduleList += NumberSeqReference_Document::numberSeqModule; moduleList += NumberSeqReference_ForeignTrade::numberSeqModule; moduleList += NumberSeqReference_General::numberSeqModule; moduleList += NumberSeqReference_Inventory::numberSeqModule; moduleList += NumberSeqReference_Ledger::numberSeqModule; moduleList += NumberSeqReference_Location::numberSeqModule; moduleList += NumberSeqReference_MasterPlanning::numberSeqModule; moduleList += NumberSeqReference_Production::numberSeqModule; moduleList += NumberSeqReference_Project::numberSeqModule; moduleList += NumberSeqReference_PurchaseOrder::numberSeqModule; moduleList += NumberSeqReference_Route::numberSeqModule; moduleList += NumberSeqReference_SalesOrder::numberSeqModule; moduleList += NumberSeqReference_Tax::numberSeqModule; moduleList += NumberSeqReference_Vendor::numberSeqModule; moduleList += NumberSeqReference_Internet::numberSeqModule; moduleList += NumberSeqReference_Asset::numberSeqModule;

//--- HRM Begin moduleList += NumberSeqReference_HRM::numberSeqModule; moduleList += NumberSeqReference_KnowledgeCollector::numberSeqModule; moduleList += NumberSeqReference_VirtualNetwork::numberSeqModule; //--- HRM End //--- CRM Begin moduleList += NumberSeqReference_CRM::numberSeqModule; //--- CRM End

//--- SFC Begin moduleList += NumberSeqReference_JobManager::numberSeqModule; //--- SFC End

//--- NS Begin moduleList += NumberSeqReference_NS::numberSeqModule; //--- NS End

return moduleList; } public static numberSeqReference construct(NumberSeqModule _module) {   switch (_module) {       case (NumberSeqReference_Ledger::numberSeqModule)         : return new NumberSeqReference_Ledger(_module); case (NumberSeqReference_Tax::numberSeqModule)           : return new NumberSeqReference_Tax(_module); case (NumberSeqReference_Bank::numberSeqModule)          : return new NumberSeqReference_Bank(_module); case (NumberSeqReference_SalesOrder::numberSeqModule)    : return new NumberSeqReference_SalesOrder(_module); case (NumberSeqReference_ForeignTrade::numberSeqModule)  : return new NumberSeqReference_ForeignTrade(_module); case (NumberSeqReference_Customer::numberSeqModule)      : return new NumberSeqReference_Customer(_module); case (NumberSeqReference_PurchaseOrder::numberSeqModule) : return new NumberSeqReference_PurchaseOrder(_module); case (NumberSeqReference_Vendor::numberSeqModule)        : return new NumberSeqReference_Vendor(_module); case (NumberSeqReference_Inventory::numberSeqModule)     : return new NumberSeqReference_Inventory(_module); case (NumberSeqReference_BOM::numberSeqModule)           : return new NumberSeqReference_BOM(_module); case (NumberSeqReference_Route::numberSeqModule)         : return new NumberSeqReference_Route(_module); case (NumberSeqReference_Production::numberSeqModule)    : return new NumberSeqReference_Production(_module); case (NumberSeqReference_MasterPlanning::numberSeqModule) : return new NumberSeqReference_MasterPlanning(_module); case (NumberSeqReference_Project::numberSeqModule)       : return new NumberSeqReference_Project(_module); case (NumberSeqReference_Location::numberSeqModule)      : return new NumberSeqReference_Location(_module); case (NumberSeqReference_Document::numberSeqModule)      : return new NumberSeqReference_Document(_module); case (NumberSeqReference_General::numberSeqModule)       : return new NumberSeqReference_General(_module); case (NumberSeqReference_Internet::numberSeqModule)      : return new NumberSeqReference_Internet(_module); case (NumberSeqReference_Asset::numberSeqModule)         : return new NumberSeqReference_Asset(_module); // CC begin case (NumberSeqReference_HRM::numberSeqModule)                : return new NumberSeqReference_HRM(_module); case (NumberSeqReference_VirtualNetwork::numberSeqModule)     : return new NumberSeqReference_VirtualNetwork(_module); case (NumberSeqReference_KnowledgeCollector::numberSeqModule) : return new  NumberSeqReference_KnowledgeCollector(_module); // CC end // Shop Floor Control begin case (NumberSeqReference_JobManager::numberSeqModule)         : return new NumberSeqReference_JobManager(_module); // Shop Floor Control end // CRM addition begin case (NumberSeqReference_CRM::numberSeqModule)                 : return new NumberSeqReference_CRM(_module); // CRM addition end // Product Builder addition begin case (NumberSeqReference_PBA::numberSeqModule)                : return new NumberSeqReference_PBA(_module); // Product Builder addition end // NS begin case (NumberSeqReference_NS::numberSeqModule)                : return new NumberSeqReference_NS(_module); // NS end }   throw error(strFmt("@SYS53742")); }

Create a parameters table and form
You should create a parameters table and form for your new module. The easiest way is generally to duplicate an existing Parameters table and modify it as required.

The important elements on the new parameter table are the numberSeqModule and numberSeqReference methods.

client server static NumberSeqModule numberSeqModule {   return NumberSeqReference_NS::numberSeqModule; } client server static NumberSeqReference numberSeqReference {   return NumberSeqReference::construct(NSParameters::numberSeqModule); } In the parameters form, you must ensure that the code in the numberSeqPreInit, numberSeqPostInit and NumberSequenceType.executeQuery methods correctly reflect your new number sequence elements.

Calling a number sequence
The following code gets a number from the number sequence setting for EDT CustAccount static void Job1(Args _args) {   ExtendedTypeId id = TypeID2ExtendedTypeId(TypeId(CustAccount)); NumberSeq num = NumberSeq::newGetNum(NumberSequenceReference::find(id)); ;   num.used;  // mark the number as used info(num.num); }

'"" Please post the example code here - where can i find the "NumberSequenceType.executeQuery" method""'