dynamics etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
dynamics 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).

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.