Blog

Microsoft Dynamics AX Blog

3

If you wanted to write a an X++ code to generate a number sequence and assign it to a field, you might use the following X ++ statement.

1
yourTableBuffer.Field = NumberSeq::newGetNum(NumberSequenceReference::find(TypeID2ExtendedTypeId(TypeId(YourExtendedDataType)))).num();

And for the continuous number sequence (notice the “true” parameter):

1
yourTableBuffer.Field = NumberSeq::newGetNum(NumberSequenceReference::find(TypeID2ExtendedTypeId(TypeId(YourExtendedDataType))), true).num();

But, what you could do if you have that field in form and you want to generate a number sequence while the user creates a new record is the class NumberSeqFormHandler.

NumberSeqFormHandler is a great class that doesn’t only take care of generating a new number sequence for your field… but also it takes care of removing or inserting that number in the Number Sequence List table when the number is not used (in case that the record hasn’t been inserted although the number has been already generated).

To use the NumberSeqFormHandler class, you have to declare a NumberSeqFormHandler object in the class declaration. Also you have to create a method at the Form level like the following:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
//Form level method
NumberSeqFormHandler numberSeqFormHandler()
{;
    //you should have been declared numberSeqFormHandler variable in the ClassDeclaration of your form
    if (!numberSeqFormHandler)
    {
        numberSeqFormHandler = NumberSeqFormHandler::newForm(NumberSequenceReference::find(TypeID2ExtendedTypeId(TypeId(YourExtendedDataType))).NumberSequence,
                                                             element,
                                                             YourDataSourceName,
                                                             fieldnum(YourTableName, Field));
    }
 
    return numberSeqFormHandler;
}

Then you need to actually call the NumberSeqFormHandler class methods like:

1
2
3
4
5
6
7
8
9
//Form methods
public void close()
{
    if (numberSeqFormHandler)
    {
        numberSeqFormHandler.formMethodClose();
    }
    super();
}
1
2
3
4
5
6
//DataSource method
public void write()
{
    element.numberSeqFormHandler().formMethodDataSourceWrite();
    super();
}
1
2
3
4
5
6
7
8
9
10
//DataSource method
public boolean validateWrite()
{
    boolean ret;
 
    ret = super();
    ret = element.numberSeqFormHandler().formMethodDataSourceValidateWrite(ret) && ret;
 
    return ret;
}
1
2
3
4
5
6
//DataSource method
public void linkActive()
{
    element.numberSeqFormHandler().formMethodDataSourceLinkActive();
    super();
}
1
2
3
4
5
6
//DataSource method
public void delete()
{
    element.numberSeqFormHandler().formMethodDataSourceDelete();
    super();
}
1
2
3
4
5
6
7
8
9
//DataSource method
public void create(boolean _append = false)
{
    element.numberSeqFormHandler().formMethodDataSourceCreatePre();
 
    super(_append);
 
    element.numberSeqFormHandler().formMethodDataSourceCreate();
}

By this you will have your form works efficiently with the Number Sequence engine of Dynamics AX  and you don’t have to write any code at the table level… so remove all that code that you might have written at the initValue method of your table.

One last important thing, NumberSeqFormHandler works with Continuous and non-Continuous number sequences. But if you want to “regenerate” the unused numbers that have been previously generated, you have to set your number sequence as Continuous of course.

Dynamics AX 2012 Event

Recent Posts

Tags

Archives

Random Testimonial

  • ~ Mohamad Adel, Sr. Dynamics AX Developer at Al-Fanar IT

    Adel"I recommend Amer Atiyah as i worked with him in many simple and complicated tasks and i realized that he is very intelligent in the way of thinking to solve tasks problems. He has a very good experience and knowledge of his job. He is very hard worker, committed, organized and creative and very open mind in his work and that is the reason if his brilliant in his specialized field. He is always showing a high degree of professionalism and ability to deliver and accomplish very complicated tasks at any condition with high quality. I am recommending him to work in any team and i know he will fit with all challenges. Purely, he is a professional guy. I wish to him more and more success in his career and his life."

  • Read more testimonials »