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.

Related articles

No comments

There are still no comments on this article.

Leave your comment...

If you want to leave your comment on this article, simply fill out the next form:

You have to be identified to write a comment.