dynamics 365 etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
dynamics 365 etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

27 Kasım 2021 Cumartesi

Dynamics 365 F&O - Debugger saçmalarsa bu bir içiçe çağrı yüzünden olabilir

 AX 2009 ile zamanında bir kodumda bilmeden içiçe sonsuz çağrı yazmıştım. Kodu çalıştırdığımda kilitlenince sonsuz döngüden şüphelendim ve debug etmeye kalktım. Debuggerın kafa karıştırıcı bir şekilde saçma sapan yerlere atladığını gördüm. İnternette kısa bir araştırmadan sonra buna sonsuz bir içiçe döngünün sebep olabileceğini okudum. 

Aynı durumu iki gün önce 365 F&O ile de yaşayınca doğrusu çok şaşırdım. Tamamen yenilenen altyapısıyla derlenmiş kodun Visual Studio debugger ile aynı şekilde saçmalamasını beklemiyordum doğrusu. Bu sefer biraz daha farklı saçmalıyordu ama yine aynı davranışa benzerdi (2009'da tamamen rastgele satırlara gidip duruyordu, bunda yine aniden alakasız bir koda gitti, ama orada döndü durdu). Tabii bu sefer yıllar önce yaşadığım tecrübeyi hatırlayarak daha çabuk gittim sonuca.

Yani demem o ki, debugger tuhaf tuhaf yerlere atlıyorsa içiçe sonsuz çağrı hatasını yapmış olabilirsiniz (Tabii bir danışman arkadaşınız DEV makinesinde test yapıyor da olabilir).

20 Ağustos 2021 Cuma

Dynamics 365 F&O - Virgülden sonra beş haneyi geçmek

 Dynamics 365 F&O virgülden sonra en fazla altı hane destekliyor. Yani aşağıdaki gibi sadece extended data type uzunluğunu değiştirmek yeterli değil:

 

 

Bir iki numara daha var yapmamız gereken:

Önce virgülden sonraki değeri saklayabilmek için yeni bir field ekliyoruz ve aşağıdaki gibi bir metodun her write işleminde çalışmasını sağlıyoruz ( update/insert metodlarından çağırabiliriz).

  public void updateInterestRateDecimals()
    {
        this.InterestRateDecimal = (this.InterestRate - real2int(this.InterestRate) ) *
            100000000;
    }

 

Sonra da postLoad metodunu aşağıdaki gibi düzenliyoruz:

public void postLoad()
    {
        super();
        if (this.InterestRateDecimal != 0)
        {
            this.InterestRate = real2int(this.InterestRate) +
                this.InterestRateDecimal / 100000000;
        }
    }

 

Sonuç:

 


4 Mart 2021 Perşembe

AX 2012/365 F&O - Satıcı/müşteri hareket kapatma

  public static void settlement(CustVendTransOpen _trans1,CustVendTransOpen _trans2,
        CustVendACType _type = CustVendACType::Vend)
    {
        CustVendOpenTransManager manager;

        if (_type == CustVendACType::Vend)
            manager = CustVendOpenTransManager::construct(VendTable::find(_trans1.AccountNum));
        else
            manager = CustVendOpenTransManager::construct(CustTable::find(_trans1.AccountNum));
        manager.updateTransMarked(_trans1, true);
        manager.updateTransMarked(_trans2, true);
        manager.settleMarkedTrans();
    }

26 Ocak 2021 Salı

AX 2012 - Args ile filtre göndermek

Args ile filtreniz sadece bir kayıttan ibaretse args.record() kullanarak filtreleyebilirsiniz, record metodu ile birden fazla kayıt gönderemezsiniz. Bunun için InitialQueryParameter sınıfını kullanabilirsiniz: 

            Args                 args = new Args();
            MenuFunction         MenuFunction = new MenuFunction('LedgerJournalTable', MenuItemType::Display);
            Query                q = new Query();
            QueryBuildDataSource QBDS = q.addDataSource(tableNum(LedgerJournalTable));

            if (ABCRCreditTable.AccualJournalNum != "")
                QBDS.addRange(fieldNum(LedgerJournalTable,JournalNum)).value(ABCRCreditTable.AccualJournalNum);
            if (ABCRCreditTable.AccualJournalNum2 != "")
                QBDS.addRange(fieldNum(LedgerJournalTable,JournalNum)).value(ABCRCreditTable.AccualJournalNum2);

            args.initialQuery(InitialQueryParameter::createByQuery(q));
            args.caller(this);

            MenuFunction.run(args);