Kod ile Form Açmak (Form Çağırma)
İhtiyaca göre kullanılan classlardan veye formlar üzerinden başka formları açmak(çağırmak) gerekir. Bu işlem genelde form üzerindeki MenuItem butonlarıyla yapılır ancak bazı durumlarda bu ihtiyacı karşılamaz ve kod içerinden istenilen formu çağırmak gerekir. Bu gibi ihtiyaçları X++ da menuItemlar yardımıyla yada formRun ile form isimini kullanarak yapabiliriz. Aşağıda bu iki yöntemide açıklayacağım.
İlk olarak menuItem ile form çağırma aşağıdaki gibidir. Burada dikkat edilecek nokta menuItemDisplayStr kısmına mutlaka Display olarak bulunan bir menuItem ismi yazılmalıdır. Args diğer çağrılacak forma parametre, tablo, datasource gibi değerler gönderilebilir.
static void Erkn_FormCallMenuItem(Args _args) { str menuItem; MenuFunction menuFunction; Args args = new Args(); SalesTable vSalesTable; ; vSalesTable = SalesTable::find("MST-000007"); //menuItem = menuItemDisplayStr(Kullanılacak MenuItem adı); menuItem = menuItemDisplayStr(SalesTable); menuFunction = new MenuFunction(menuItem, MenuItemType::Display); args.record(vSalesTable); //Açılacak forma args ile tablo kaydı,datasource veya parm değer gönderilebilir. menuFunction.run(args); }
*Eğer bir raporu çağıracaksak “menuItemDisplayStr” yerine “menuItemOutputStr” yazılır. “MenuItemType::Display” yerine “MenuItemType::Output” kullanılır. Ancak Ax 2012 de beyaz sayfa diye tabir edilen raporların kullanımı azaldığı için report kullanım ihtiyacı azalmıştır.
FormRun ile koddan form çağırma ise aşağıdaki gibidir.
static void Erkn_FormCallFormRun(Args _args) { FormRun formRun; Args args = new Args(); SalesTable vSalesTable; vSalesTable = SalesTable::find("MST-000007"); //args.name(formStr(Formun Adı)); args.name(formStr(SalesTable)); args.record(vSalesTable); //Açılacak forma args ile tablo kaydı,datasource veya parm değer gönderilebilir. formRun = classfactory.formRunClass(args); formRun.init(); formRun.run(); formRun.wait(); //İstenirse Formun kapatılmasını bekleyebilirsiniz. //Böylece form kapatıldıktan sonra işlemlerinize devam edebilirsiniz if (formRun.closedOk()) info("Form ok ile kapatıldı"); else info("Form cancel ile kapatıldı"); }