Start using properly the D365FO Number Sequences in your forms: NumberSeqFormHandler X++ class

Keep scrolling down to get the code snippets.

Understand Why using the framework and why we override every single form data source method in this Video:

Code:

In order to use effectively this framework, you will need to, once the Number sequence is added to the appropiate NumberSeqModule:

[ExtensionOf(classStr(NumberSeqModuleRetailParameters))]
internal final class FTDNumberSeqModuleRetailParameters_extension
{
    protected void loadModule()
    {
        next loadModule();
 
        this.ftdAddRestaurantNumSeqs();
    }

    private void ftdAddRestaurantNumSeqs()
    {
        this.ftdAddNumberSequence(extendedTypeNum(FTDNumSeqExampleId),
            true,
            literalStr("@FTDLabels:Id"),
            literalStr("@FTDLabels:Id"));

    }

    private void ftdAddNumberSequence(ExtendedTypeId _edtId,
        boolean _perCompany = true,
        NumberSequenceRefLabel _numberSeqRefLabel = "",
        NumberSequenceRefHelp _numberSeqRefHelp = "",
        int _sortField = 1,
        boolean _wizardIsContinuous = false,
        NoYes _wizardIsManual = NoYes::No,
        int _fetchAheadQty = 10,
        NoYes _wizardIsChangeDownAllowed = NoYes::No,
        NoYes _wizardIsChangeUpAllowed = NoYes::No)
    {
        NumberSeqDatatype dataType = NumberSeqDatatype::construct();
 
        dataType.parmDatatypeId(_edtId);
        if (_numberSeqRefLabel)
        {
            dataType.parmReferenceLabel(_numberSeqRefLabel);
        }
 
        if (_numberSeqRefHelp)
        {
            dataType.parmReferenceHelp(_numberSeqRefHelp);
        }
 
        dataType.parmWizardIsContinuous(_wizardIsContinuous);
        dataType.parmWizardIsManual(_wizardIsManual);
        datatype.parmWizardfetchAheadQty(_fetchAheadQty);
        dataType.parmWizardIsChangeDownAllowed(_wizardIsChangeDownAllowed);
        dataType.parmWizardIsChangeUpAllowed(_wizardIsChangeUpAllowed);
        dataType.parmSortField(_sortField);
 
        if (_perCompany)
        {
            dataType.addParameterType(NumberSeqParameterType::DataArea);
 

        }
 
        this.create(dataType);
    }
}

And once you’ve created in your parameters class, a method to return your NumberSequenceReference:

[ExtensionOf(tableStr(RetailParameters))]
internal final class FTDRetailParameters_Extension
{
    public static NumberSequenceReference ftdNumRefNumSeqExampleId()
    {
        return NumberSeqReference::findReference(extendedTypeNum(FTDNumSeqExampleId));
    }
}

Then, all you need to do is to add this variable and method in the Form:

NumberSeqFormHandler numberSeqNumSeqExampleId;

NumberSeqFormHandler numberSeqNumSeqExampleId()
{
    if (!numberSeqNumSeqExampleId)
    {
        numberSeqNumSeqExampleId = numberSeqFormHandler::newForm(RetailParameters::ftdNumRefNumSeqExampleId().NumberSequenceId,
                                                         element,
                                                         FTDNumSeqExample_ds,
                                                         fieldNum(FTDNumSeqExample, Id)
                                                         );
    }
 
    return numberSeqNumSeqExampleId;
}

And override the methods Create, LinkActive, delete, write and validateWrite as shown below: (If you want to understand why, check the video)

[DataSource]
class FTDNumSeqExample
{
    public void create(boolean _append = false)
    {
		element.numberSeqNumSeqExampleId().formMethodDataSourceCreatePre();

        super(_append);

        element.numberSeqNumSeqExampleId().formMethodDataSourceCreate();
        
    }

    public void linkActive()
    {

        element.numberSeqNumSeqExampleId().formMethodDataSourceLinkActive();

        super();
    }

    public void delete()
    {
        ttsbegin;

        element.numberSeqNumSeqExampleId().formMethodDataSourceDelete();

        super();
 
        ttscommit;
    }

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

    public boolean validateWrite()
    {
        return element.numberSeqNumSeqExampleId().formMethodDataSourceValidateWrite(super());
    }
}

Leave a comment