İ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.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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ı"
);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| 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.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
| 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ı" ); } |
Merhaba
YanıtlaSilKendi yaptığım bir formda buton üzerinden VendPackingSlipJournal'e range ekleyerek ulaşmak istiyorum.
yazdığınız kodların aynısını yaptım ancak range eklemeyi başaramadım. Yardımcı olabilirseniz sevinirim..
yazdığım kodlar:
str menuItem;
MenuFunction menuFunction;
Args args = new Args();
VendPackingSlipJour vendPackingSlipJoure;
;
breakpoint;
vendPackingSlipJoure = VendPackingSlipJour::findFromPurchId(ARKPurchaseRequisitionLine.PurchId);
menuItem = menuItemDisplayStr(VendPackingSlipJournal);
menuFunction = new MenuFunction(menuItem, MenuItemType::Display);
args.record(vendPackingSlipJoure); //Açılacak forma args ile tablo kaydı,datasource veya parm değer gönderilebilir.
menuFunction.run(args);
Bu arada elimde PurchId var o kısımda sorun yok debug yaptığımda görebiliyorum.
YanıtlaSil