Skip to main content

Command Palette

Search for a command to run...

How to Use Number Sequences in Dynamics 365 Finance and Operations

Numara serileri oluşturmak

Updated
2 min read
How to Use Number Sequences in Dynamics 365 Finance and Operations

Bu yazımda Dynamics 365'te Custom bir tabloya nasıl numara serisi bağlayabileceğinizi anlatmaya çalışacağım.

Öncelikle string bir EDT oluşturuyoruz. Extends kısmından Num EDT’sine bağlıyoruz.

EDT

Daha sonra EDT’mizi ilgili tabloya ekliyoruz. Gerekli primary index ayarlamalarını yaptıktan sonra EDT’mizin üzerinde ki Reference Table ve Table References kısımlarını doldurmayı unutmuyoruz.

Field

Index


Daha sonra numara serisini hangi modüle bağlayacağımıza karar vermemiz gerekiyor. Bizim geliştirmemiz Retail ile ilgili olduğu için “Retail” modülü olacaktır.

İlgili modülümüzün class’larına aşağıda ki kodları ekliyoruz.

[ExtensionOf(tablestr(RetailParameters))]
final class RetailParameters_Extension
{
    static NumberSequenceReference numRefETGWholeSalesRequestNo()
    {
        return NumberSeqReference::findReference(extendedTypeNum(ETGWholeSalesRequestNo));
    }
}
[ExtensionOf(classStr(NumberSeqModuleRetail))]
final class NumberSeqModuleRetail_Extension
{
    protected void loadModule()
    {
        next loadModule();

        NumberSeqDatatype datatype = NumberSeqDatatype::construct();

        datatype.parmDatatypeId(extendedTypeNum(ETGWholeSalesRequestNo));
        datatype.parmReferenceLabel(literalstr("Talep no"));
        datatype.parmReferenceHelp(literalStr("Talep no"));
        datatype.parmWizardIsContinuous(false);
        datatype.parmWizardIsManual(NoYes::No);
        datatype.parmWizardIsChangeDownAllowed(NoYes::No);
        datatype.parmWizardIsChangeUpAllowed(NoYes::No);
        datatype.parmWizardHighest(999999);
        datatype.parmSortField(1);

        datatype.addParameterType(NumberSeqParameterType::DataArea, true, false);
        this.create(datatype);
    }

}

İlgili tablomuza aşağıda ki methodu ekliyoruz.

public static NumberSequenceReference numRefRequestNo()
{
    return NumberSeqReference::findReference(extendedTypeNum(ETGWholeSalesRequestNo));
}

İlgili formumuza da aşağıda ki gibi ilgili methodları ekliyoruz.

Form

[Form]
public class ETGWholeSalesRequest extends FormRun
{
    NumberSeqFormHandler numberSeqFormHandler;

    public NumberSeqFormHandler numberSeqFormHandler()
    {
        if (!numberSeqFormHandler)
        {
            numberSeqFormHandler = NumberSeqFormHandler::newForm(ETGWholeSalesRequestHeader::numRefRequestNo().NumberSequenceId,  element, ETGWholeSalesRequestHeader_ds, fieldNum(ETGWholeSalesRequestHeader, RequestNo));
        }

        return numberSeqFormHandler;
    }

    public void close()
    {
        if (numberSeqFormHandler)
        {
            numberSeqFormHandler.formMethodClose();
        }

        super();
    }

    [DataSource]
    class ETGWholeSalesRequestHeader
    {
        public void create(boolean _append = false, boolean _extern = false)
        {
            element.numberSeqFormHandler().formMethodDataSourceCreatePre();

            super(_append);
            if (!_extern)
            {
                element.numberSeqFormHandler().formMethodDataSourceCreate(true);
            }

        }

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

        public boolean validateWrite()
        {
            boolean         ret;

            ret = super();

            ret = element.numberSeqFormHandler().formMethodDataSourceValidateWrite(ret) && ret;

            if (ret)
            {
                ETGWholeSalesRequestHeader.validateWrite();
            }

            return ret;
        }

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

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

    }

}

Sonrasında ise numara serilerini yükleyen bir job oluşturuyoruz.

class ETGJobNumSeqLoadModule
{
    /// <summary>
    /// Runs the class with the specified arguments.
    /// </summary>
    /// <param name = "_args">The specified arguments.</param>
    public static void main(Args _args)
    {
        //NumberSeqApplicationModule::loadAll();
        NumberSeqModuleRetail retail = new NumberSeqModuleRetail();
        retail.load();

        Info("Yüklendi");
    }
}

Bu kodlarıda ekledikten sonra derleme ve senkronizasyon yapıyoruz.


Derleme ve senkronizasyon bittikten sonra önce oluşturduğumuz Job'ı(ETGJobNumSeqLoadModule) çalıştırıyoruz.

Job Runner


Job çalıştıktan sonra ilgili parametre formumuzda(RetailParameters) Numara serileri tabında oluşturduğumuz numara serisinin, Numara seri kodu boş olarak görünecektir.

Son olarak numara seri kodunun dolması için Organizasyon yönetimi modülünde ki Numara serileri sayfasından(NumberSequenceTableListPage) Numara serilerini oluşturan Wizard çalıştırılır.

NumberSequenceTableListPage

Formunuzda yeni tuşuna tıkladığınızda ilgili alanda numara serisi oluşuyor ise tebrikler. :)

Oluşmuyor ise adımları tekrar gözden geçirmenizde fayda var.

Dynamics 365 FO Blog

Part 33 of 33

Microsoft Dynamics 365 for Finance and Operations ürünü ile ilgili yaptığım işler ve tecrübelerim

Start from the beginning

How to Handle Unit Conversion for Variant Products in Dynamics 365 F&O

Dynamics 365 F&O - Varyantlı Ürünlerde Birim Dönüşümü