Blog Listem

9 Mart 2021 Salı

D365 F&O - Form kontrolüne sağ mouse popup menü eklemek

 Bu konuda hem AX 2009 hem AX 2012'de çalışan bir örnek paylaşımı yapmıştım 2015 yılında. 365'de yapı biraz değişmiş, bu sebeple artık o kod çalışmıyor. Microsoft öncesi-sonrası diye bu konuyu anlatan bir paylaşım yapmış, ben de oradan yararlandım. Daha önce tek metodda halledilen iş iki metoda çıkmış.

 Aşağıdaki constantları class declaration'a tanımlıyoruz. Constant kullanımı tabii ki zorunlu değil ama okunurluğu arttırıyor:

public const int listCredit = 1;
public const int listJournal = 2;

Bu metodu popup çalışmasını istediğimiz kontrole koyuyoruz. Bu metod popup menüyü çalıştırıyor. Aşağıdaki örnekte iki popup bar var:

        public str getContextMenuOptions()
        {
            str ret;
            ContextMenu menu = new ContextMenu();
            List menuOptions = new List(Types::Class);
            ContextMenuOption option;
            
            option = ContextMenuOption::Create("Credit number", listCredit);
            menuOptions.addEnd(option);

            option = ContextMenuOption::Create("Journal number", listJournal);
            menuOptions.addEnd(option);

            menu.ContextMenuOptions(menuOptions);
            return menu.Serialize();
        }

 


 Bu metod da popup menüde seçim yapılınca çalışıyor:

 public void selectedMenuOption(int selectedOption)
        {
            switch (selectedOption)
            {
                case -1:
                    break;
                case listCredit:

                    info("Bar 1 seçildi!..");
                    break;
                case listJournal:
                    info("Bar 2 seçildi!..");
                    break;
            }
        }


Benim yaptığım denemelerde popup menü bazen görünmedi. Böyle bir duruma 2012 veya 2009'da hiç rastlamamıştım. Sebebini bulamadım. Popup menünün görünmediği durumlarda debug yaptığımda getContextMenuOptions metodunun tetiklenmediğini gördüm.

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();
    }