October 15th, 2009

You are currently browsing the articles from KomKid.Net written on October 15th, 2009.

Axapta : Dialog with lookup control

วิธีสร้าง dialog แบบที่มี control ซึ่ง lookup ได้ เช่น เลือก SalesId แล้วให้อีก control นึง คือ ItemId lookup มาเฉพาะของ SalesId นั้น
dialog_with_lookup_control

ทำได้ดังนี้
1.declare control ไว้ ตาม extended data type ที่จะใช้

1
2
3
4
class LookupDialog extends RunBase
{
    FormStringControl   SalesIdCtrl, ItemIdCtrl;
}

2.สร้าง dialog

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
protected Object dialog(Dialog dialog, boolean forceOnClient)
{
    DialogRunBase ret;
    ;
    ret = super(dialog, forceOnClient);
    ret.caption('Costing report by order');

    SalesIdCtrl = ret.formBuildDesign().addControl(FormControlType::String,'SalesId');
    SalesIdCtrl.extendedDataType(extendedTypeNum('SalesId'));


    ItemIdCtrl = ret.formBuildDesign().addControl(FormControlType::String,'ItemId');
    ItemIdCtrl.extendedDataType(extendedTypeNum('ItemId'));


    return ret;
}

3.Set ให้ control สามารถ override method ตอน runtime ได้

1
2
3
4
5
6
7
8
9
public void dialogPostRun(DialogRunbase dialog)
{
    ;
    super(dialog);
    dialog.dialogForm().formRun().controlMethodOverload(true);
    dialog.dialogForm().formRun().controlMethodOverloadObject(this);
    SalesIdCtrl = dialog.dialogForm().formRun().design().controlName('SalesId');
    ItemIdCtrl = dialog.dialogForm().formRun().design().controlName('ItemId');
}

4.สร้าง lookup method

1
2
3
4
5
6
7
8
9
10
11
12
void ItemId_lookup()
{
    Query                   query          = new Query();
    SysTableLookup          sysTableLookup =
    SysTableLookup::newParameters(tableNum(SalesLine), SalesIdCtrl);
    ;
    sysTableLookup.addLookupField(fieldNum(SalesLine, ItemId));
    sysTableLookup.addLookupField(fieldNum(SalesLine, Name));
    query.addDataSource(tableNum(SalesLine)).addRange(fieldNum(SalesLine,SalesId)).value(SalesIdCtrl.text());
    sysTableLookup.parmQuery(query);
    sysTableLookup.performFormLookup();
}

5.เก็บรายละเอียด method อื่น ๆ

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public container pack()
{
    return conNull();
}

public boolean unpack(container packedClass)
{
    return true;
}

static void main(Args _args)
{
    LookupDialog test1 = new LookupDialog();
    ;
    if (test1.prompt())
    {
        test1.run();
    }
}

ที่มา :

Written by Komkid on October 15th, 2009 with no comments.
Read more articles on Axapta and Programming.