Friday, 1 August 2014

Creation of Number Sequence

Number Sequence Creation Through Code

Suppose we want create number sequence for field on form in General  ledger module
Consideration: EDT-NumberseqTest, Table-NumberseqTestTable and Form- NumberseqTestTable

Step1. Create new EDT with name NumberseqTest


Step 2. Modify load module() method on  NumberSeqModuleLedger class

{
     datatype.parmDatatypeId(extendedTypeNum(NumberseqTest));
     datatype.parmReferenceHelp(literalStr("NumberseqTest"));
     datatype.parmWizardIsManual(NoYes::No);
     datatype.parmWizardIsChangeDownAllowed(NoYes::No);
     datatype.parmWizardIsChangeUpAllowed(NoYes::No);
     datatype.parmWizardHighest(999);
     datatype.parmSortField(30);
     datatype.addParameterType(NumberSeqParameterType::DataArea, truefalse);
     this.create(datatype);
}

Step 3.Create a method on LedgerParameters Table

     client server static NumberSequenceReference numRefNumberseqTest()
{
     return NumberSeqReference::findReference(extendedTypeNum(NumberseqTest));
}


Step 4.Write and run following job

static void NumberSeqLoadAll(Args _args)
{
    NumberSeqApplicationModule::loadAll();

}


Step 5.Then run the wizard

Organization Administration -> CommonForms -> Numbersequences->Numbersequences-> Generate -> run the wizard.



Step 6.Now we have to check the number sequence  is correctly working  for that write a job:

static void NumSeq(Args _args)
{
    NumberSeq  numberSeq;
    NumberseqTest num;
    ;
    numberSeq = NumberSeq::newGetNum(ProjParameters:: numRefNumberseqTest ());
    num = numberSeq.num();
    info(num);
}



Step 7.Now we want that Number Sequence in form level(NumberseqTest Table):


 Write below code in class declaration  
public class FormRun extends ObjectRun
{
    NumberSeqFormHandler numberSeqFormHandler;

}



Step 8.Write the NumberSeqFormHandler() in form methods node.

NumberSeqFormHandler numberSeqFormHandler()
{
    if (!numberSeqFormHandler)
    {
       numberSeqFormHandler = NumberSeqFormHandler::newForm(LedgerParameters:: numRefNumberseqTest ().NumberSequenceId,
                                                             element,
                                                             NumberseqTestTable_DS,
                                                             fieldNum(NumberseqTestTable, NumberseqTest)
                                                            );
    }
    return numberSeqFormHandler;
}




Step 9.Write the  Create(),Delete(),Write() , Validate Write(),Link Active() on the Data source methods node.
 Create() Method
void create(boolean append = false,
            boolean extern = false
{
    element.numberSeqFormHandler().formMethodDataSourceCreatePre();

    super(append);

    if (!extern)
    {
        element.numberSeqFormHandler().formMethodDataSourceCreate(true);
    }
}

Delete() Method

public void delete()
{
    element.numberSeqFormHandler().formMethodDataSourceDelete();
    super();
}

Write()Method

public void write()
{
    super();
    element.numberSeqFormHandler().formMethodDataSourceWrite();
}



Validate Write() Method

public boolean validateWrite()
{
    boolean         ret;
    ret = super();
    ret = element.numberSeqFormHandler().formMethodDataSourceValidateWrite(ret) && ret;
    if (ret)
    {
        NumberseqTestTable.validateWrite();
    }
    return ret;
}

Link Active() Method

public void linkActive()
{
    ;
    element.numberSeqFormHandler().formMethodDataSourceLinkActive();
    super();
}


Step 10.Finally add Close() method on form
void close()
{
    if (numberSeqFormHandler)
    {
        numberSeqFormHandler.formMethodClose();
    }
    super();
}