28 Eylül 2011 Çarşamba

AXAPTA A'dan Z'ye numara serisi oluşturma

İlk önce hangi modül için numara serisi oluşturacaksak onun tablosu ve class'ını öğreniyoruz.
Benimkinin tablosu SMAParameters (Modülün parametreler ekranında kurulumdan öğrenilebilir ). Aşağıdaki methodu tablonun methodlarına ekliyoruz:

public server static NumberSequenceReference numRefRMARequestNo()
{
    return NumberSeqReference::findReference(
            typeid2extendedtypeid(typeid(B_RMARequestNo)));
}

AX 2012 için güncelleme:

typeid2extendedtypeid(typeid(B_RMARequestNo))

yerine

extendedTypeNum(SNBmasterNum) 

yazmalısınız.

Buradaki "B_RMARequestNo" tablomuzdaki anahtar alanın extended data tipi oluyor.

Ardından classa gidiyoruz. İlgili sınıfının adı parametre tablosunun numberSeqModule metodundan öğrenilebilir. Benimki NumberSeqReference_SMA. loadModule methoduna aşağıdaki kodu ekliyoruz:

    /* RMA Request No */
    numRef.DataTypeId              = typeId2ExtendedTypeId(typeid(B_RMARequestNo));
    numRef.ConfigurationKeyId      = configurationkeynum(SMAManagement);
    numRef.ReferenceHelp           = literalstr("Benim Numaram");
    numRef.WizardContinuous        = false;
    numRef.WizardFetchAheadQty     = 20;
    numRef.WizardManual            = NoYes::No;
    numRef.WizardAllowChangeDown   = NoYes::No;
    numRef.WizardAllowChangeUp     = NoYes::No;
    numRef.SortField               = 11;
    this.create(numRef);

Sortfield alanına bir üstteki tanımlanmış numberseqin bir fazlasını veriyoruz. Hiç yoksa 1.

AX 2012 için güncelleme:
Sihirbazı çalıştırmadan önce ya AOS restart ya da aşağıdaki komutu çalıştırın:

NumberSeqApplicationModule::loadAll();


Sonra Temel->Kurulum->Numara serileri->Numara serileri'ne (AX 2012 için Organizasyon yönetimi->Ortak->Numara serileri->Üret) giriyoruz. Burda da sihirbazı çalıştırıyoruz.
Kontrol etmek için ilgili modülünü servis parametrelerinden numara serileri tabına gidip bir göz atıyoruz.

Sıra bu numara serisini formda kullanmakta:

Form classDeclaration a bu satırı ekleyin:

NumberSeqFormHandler numberSeqFormHandler;

Forma bu methodu ekleyin:

NumberSeqFormHandler numberSeqFormHandler()
{
    ;
    if (!numberSeqFormHandler)
    {

        numberSeqFormHandler = NumberSeqFormHandler::newForm(SMAParameters::numRefRMARequestNo().NumberSequence,
                                                             element,
                                                             B_RMARequestTable_DS,
                                                             fieldnum(B_RMARequestTable,RequestNo));
    }
    return numberSeqFormHandler;
}

Güncelleme: Yukarıdaki satır AX 2012 için şöyle olacak:
numRefRMARequestNo().NumberSequence
yerine
numRefRMARequestNo().NumberSequenceId 

B_RMARequestTable_DS sizin tablonuzun Datasourcesi. RequestNo da anahtar field.

Form close method:

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

Data source methodlarında yapılacaklar:

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

public boolean validateWrite()
{
    boolean ret;

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

    return ret;
}

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

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

public void create(boolean _append = false,boolean extern = false)
{
    element.numberSeqFormHandler().formMethodDataSourceCreatePre();
    super(_append);
    if (!extern)
    {
        element.numberSeqFormHandler().formMethodDataSourceCreate();
    }
}

Hepsi bu kadar...

Hiç yorum yok:

Yorum Gönder