Follow these steps for Number Sequence -
1) Create an EDT string and give it any name (Like I have given NumSequence).
2) Create a Parameter Table and give it any name(Like I have given NumSeqParameterTable).
Add Key-> Integer Type.
Set Key Properties ->
Visible- No
Allow Edit – No
Allow Edit on Create – No
Extended Data Type- Parameters Key
3) Create an Index -
Give it a Name(Like I have given PrimaryIdx)
Set Properties of PrimaryIdx as follows –
Allow Duplicates- No
Alternate Key- Yes
Now Drag and Drop Key in PrimaryIdx.
4) Now Create all these methods in NumSeqParameterTable-
Delete Method-
public void delete()
{
super();
throw error("@SYS23721");
}
Update Method-
public void update()
{
super();
flush NumSeqParameterTable;
}
Find Method-
public static NumSeqParameterTable find(boolean _forupdate = false)
{
NumSeqParameterTable parameter;
parameter.selectForUpdate(_forupdate);
select firstonly parameter
index PrimaryIdx
where parameter.Key == 0;
if (!parameter && !parameter.isTmp())
{
Company::createParameter(parameter);
}
return parameter;
}
Exist Method-
public static boolean Exist()
{
return (select firstonly RecId from NumSeqParameterTable).RecId != 0;
}
numberSeqModule Method-
Static client server NumberSeqModule numberSeqModule()
{
Return NumberSeqModule::NumSeq;
}
numRefPjSequence Method-
static client server NumberSequenceReference numRefPJSequence()
{
return NumberSeqReference::findReference(extendedTypeNum(Num_Sequence));
}
5) Create an Extension of the “NumberSeqModule” base enum.
Create new Element(NumSeq).
6) Create an extension of ModuleAxapta base enum.
Add new element(NumSeqModel).
7) Create a new class(NumSeqModuleClass), and add the following code.
class NumSeqModuleClass extends NumberSeqApplicationModule
{
Public NumberSeqModule numberSeqModule()
{
Return NumberSeqModule::NumSeq;
}
public void loadModule()
{
NumberSeqDatatype datatype = NumberSeqDatatype::construct();
datatype.parmDatatypeId(extendedTypeNum(Num_Sequence));
datatype.parmReferenceHelp("Unique identifier for work orders");
datatype.parmWizardIsContinuous(false);
datatype.parmWizardIsManual(NoYes::No);
datatype.parmWizardIsChangeDownAllowed(NoYes::No);
datatype.parmWizardIsChangeUpAllowed(NoYes::No);
datatype.parmSortField(1);
datatype.parmWizardHighest(999999);
datatype.addParameterType(NumberSeqParameterType::DataArea, true, false);
this.create(datatype);
}
[SubscribesTo(classStr(NumberSeqGlobal), delegateStr(NumberSeqGlobal, buildModulesMapDelegate))]
public static void NumberSeqGlobal_buildModulesMapDelegate(Map numberSeqModuleNamesMap)
{
NumberSeqGlobal::addModuleToMap(classnum(NumSeqModuleClass), numberSeqModuleNamesMap);
}
public static NumberSequenceReference numRefPJSequence()
{
NumberSeqScope scope = NumberSeqScopeFactory::createDataAreaScope(curext());
return NumberSeqReference::findReference(extendedtypenum(Num_Sequence), scope);
}
}
8) Create a form for Parameter Table (apply Pattern -> Table of contents).
Copy Number Sequence Reference from ProjParameter(Standard Form).
Paste it in datasource of Form.
Copy NumberSeq Tab Page from ProjParameter form and paste it in FormTabControl.
9) Create New Tab Page(General)
Drag and drop fields of Parameter Table.
10) In the form method, write the following code.
[Form]
public class NumSeqForm extends FormRun
{
boolean runExecuteDirect;
TmpIdRef tmpIdRef;
NumberSeqScope scope;
NumberSeqApplicationModule numberSeqApplicationModule;
container numberSequenceModules;
public void init()
{
this.numberSeqPreInit();
NumSeqParameterTable::find();
super();
this.numberSeqPostInit();
}
void numberSeqPreInit()
{
runExecuteDirect = false;
numberSequenceModules = [NumberSeqModule::NumSeq];
numberSeqApplicationModule = new NumSeqModuleClass();
scope = NumberSeqScopeFactory::createDataAreaScope();
NumberSeqApplicationModule::createReferences(NumberSeqModule::NumSeq, scope);
tmpIdRef.setTmpData(NumberSequenceReference::configurationKeyTableMulti(numberSequenceModules));
}
void numberSeqPostInit()
{
numberSequenceReference_ds.object(fieldNum(NumberSequenceReference, AllowSameAs)).visible(numberSeqApplicationModule.sameAsActive());
ctrlLabelSameAs.visible(numberSeqApplicationModule.sameAsActive());
}
public NumberSeqModule numberSeqModule()
{
return NumberSeqModule::NumSeq }
public Common resolveReference(FormReferenceControl _formReferenceControl)
{
NumberSequenceCode code = _formReferenceControl.filterValue(
AbsoluteFieldBinding::construct(fieldStr(NumberSequenceTable, NumberSequence),
tableStr(NumberSequenceTable))).value();
return NumberSequenceTable::findByNaturalKey(code, scope.getId(true));
}
public Common lookupReference(FormReferenceControl _formReferenceControl)
{
NumberSequenceTable selectedRecord;
SysReferenceTableLookup sysTableLookup = SysReferenceTableLookup::newParameters(tableNum(NumberSequenceTable), _formReferenceControl, true);
Query lookupQuery;
sysTableLookup.addLookupfield(fieldNum(NumberSequenceTable, NumberSequence));
lookupQuery = new Query();
lookupQuery.addDataSource(tableNum(NumberSequenceTable)).addRange(fieldNum(NumberSequenceTable, NumberSequenceScope)).value(queryValue(scope.getId(true)));
sysTableLookup.parmQuery(lookupQuery);
selectedRecord = sysTableLookup.performFormLookup();
return selectedRecord;
}
}
11) Create a Runnable Class and give it any name( Like I have given NumberSeqLoadJob).
class NumberSeqLoadJob
{
public static void main(Args _args)
{
NumberSeq PayNumSeq;
Num_Sequence payid;
ttsbegin;
PayNumSeq = NumberSeq::newGetNum(NumSeqModuleClass::numRefPJSequence());
payid = PayNumSeq.num();
ttscommit;
Info(strFmt("Payslip Id is :%1",payid));
}
}
12) Add these methods in the Form on which you want to apply Number Sequence-
a) a) NumberSeqFormHandler
b) b) close
[Form]
public class VehMasterForm extends FormRun
{
NumberSeqFormHandler numberSeqFormHandler;
NumberSeqFormHandler NumberSeqFormHandler()
{
If (!numberSeqFormHandler)
{
NumberSeqFormHandler = numberseqformhandler::newForm(NumSeqParameterTable::numRefPJSequence().NumberSequenceId,element,VehMaster_ds,fieldNum(VehMaster, VehNumber));
}
return NumberSeqFormHandler;
}
void close()
{
if (NumberSeqFormHandler)
{
numberSeqFormHandler.formMethodClose();
}
super();
}
13) Add this code in Data sources of that form on which you want to apply number sequence.
[DataSource]
class VehMaster
{
void create(boolean append = false, boolean extern = false)
{
element.numberSeqFormHandler().formMethodDataSourceCreatePre();
super(append);
if (!extern)
{
element.numberSeqFormHandler().formMethodDataSourceCreate(true);
}
}
public void delete()
{
element.numberSeqFormHandler().formMethodDataSourceDelete();
super();
}
public void write()
{
element.numberSeqFormHandler().formMethodDataSourceWrite();
super();
}
public boolean validateWrite()
{
boolean ret;
ret = super();
ret = element.numberSeqFormHandler().formMethodDataSourceValidateWrite(ret) && ret;
if (ret)
{
VehMaster.validateWrite();
}
return ret;
}
public void linkActive()
{
element.numberSeqFormHandler().formMethodDataSourceLinkActive();
super();
}
Functional Setup-
1) Open UI and select Organization Administration and select Number Sequences.
2) Go to New and select Number Sequence.
3) Fill all the details like Number Sequence Code, Name, Scope(Select Company), and then select Company.
4) Adjust the Alphanumeric and Largest Field according to the size of the field on which you want to apply number sequence.









Thanks a lot mam...
ReplyDeleteVery helpful & easy to understand code.
ReplyDeleteThanks mam