Programming

You are currently browsing the articles from KomKid.Net matching the category Programming.

Axapta : Open OpenOffice document and Save as

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
    COM OpenOffice;
    COM oDeskTop;
    COM oDocument;
    COMVariant arg;
    COMVariant byte;
    Array Arr = new Array(Types::Class);
    Array oArr = new Array(Types::Class);
    str url,outFile;
    COM FileProperties;
;
    OpenOffice = new Com("com.sun.star.ServiceManager");
    oDeskTop = OpenOffice.CreateInstance("com.sun.star.frame.Desktop");
 
// #############################################################
// เปิดไฟล์
    arg = comVariant::createFromArray(Arr);
    url = "file://Axaptaserver/AxaptaSP4/Excel/Losses.xls";
    oDocument = oDeskTop.LoadComponentFromURL(url, "_blank", 0, arg);
// #############################################################
 
// #############################################################
// Save as เป็นอีกไฟล์
    FileProperties = OpenOffice.Bridge_GetStruct('com.sun.star.beans.PropertyValue');
    FileProperties.Name('Overwrite');
    FileProperties.Value(true);
    oArr.value(1,FileProperties);
    arg = comVariant::createFromArray(oArr);
    outFile = "file:///C:/Losses.xls";
    oDocument.storeAsURL(outFile,arg);
// #############################################################

Written by Komkid on November 22nd, 2009 with no comments.
Read more articles on Axapta and OpenOffice and Programming.

Axapta : Get next number sequence

การเรียกใช้ Number sequence สำหรับ running no. ต่าง ๆ ทำได้โดยใช้คำสั่ง

NumberSeq::newGetNum(ProdParameters::numRefProdJournalId()).num();

ตรง Parameter ก็เปลี่ยนไปขึ้นอยู่ว่าเป็น Number sequence ของ Module ไหน
และจะใช้งานได้ Number sequence ต้องไม่ตั้งค่าให้เป็น Continuous

1
2
3
4
5
6
     JournalId          myJournalId;
      ;
     myJournalId = NumberSeq::newGetNum(ProdParameters::numRefProdJournalId()).num();
     myJournalId = NumberSeq::newGetNum(PurchParameters::numRefPurchaseOrderId()).num();
     myJournalId = NumberSeq::newGetNum(InventParameters::numRefInventJournalId()).num();
     myJournalId = NumberSeq::newGetNum(SalesParameters::numRefConfirmId()).num();

การตั้งค่า Number sequence ของแต่ละ module เข้าไปที่ Setup -> Parameters แล้วไปที่ tab Number sequences
ตรง Reference แต่ละตัวสามารถ คลิกขวา Go to the main table เพื่อตั้งค่ารูปแบบ Running number ที่ต้องการได้
Axapta_Setup_Number_Sequence
Axapta_Number_Sequence_Format

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

Axapta : Formatting style in Excel

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
static void ExcelFormating(Args _args)
{
    #Excel
 
    SysExcelApplication         excel;
    SysExcelWorkbooks           books;
    SysExcelWorkbook            book;
    SysExcelWorksheet           sheet;
    SysExcelRange               range;
    SysExcelStyles              styles;
    SysExcelStyle               style;
    SysExcelInterior            interior;
    SysExcelFont                font;
    COM                         _char, _r;
    ;
    excel       = SysExcelApplication::construct();
    excel.visible(true);
    books       = excel.workbooks();
    book        = books.add();
    sheet       = excel.activeSheet();
    range       = sheet.range('A1');
    styles      = book.styles();
    style       = styles.add('MyStyle');
    interior    = style.interior();
    interior.color(WinApi::RGB2int(246, 233, 206));
    font        = style.font();
    font.bold(true);
    font.color(winapi::RGB2int(153, 204, 255));
    range.style('MyStyle');
    range.locked(true);
    _r          = range.comObject();
    _char       = _r.characters(1);
    _char.insert('MyStyle');
 }

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

Axapta : Enable/Disable Dialog Control at runtime

วิธี Enable/Disable หรือ Dialog Control ในขณะ runtime ทำได้โดย ดังนี้
disable_runtime_dialog_control
1.classDeclaration

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class SCI_Costing extends RunBase
{
    FormStringControl   SalesIdCtrl, ItemIdCtrl;
    FormCheckBoxControl bAllCtrl;

    SalesId     salesId;
    ItemId      itemId;
    NoYes       bAll;

    #define.CurrentVersion(1)

    #localmacro.CurrentList
        salesId,
        itemId,
        bAll
    #endmacro
}

2.สร้าง dialog แบบอนุญาตให้ update control ได้ โดยใช้ dialog.allowUpdateOnSelectCtrl(true)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
protected Object dialog(Dialog dialog, boolean forceOnClient)
{
    DialogRunBase ret;
    ;
    ret = super(dialog, forceOnClient);
    ret.caption('Costing report by order');
    ret.allowUpdateOnSelectCtrl(true); //อนุญาตให้ update control ได้

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

    bAllCtrl = ret.formBuildDesign().addControl(FormControlType::CheckBox,'bAll');
    bAllCtrl.label('All');

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

    return ret;
}

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

1
2
3
4
5
6
7
8
9
10
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');
    bAllCtrl = dialog.dialogForm().formRun().design().controlName('bAll');
}

4.ใช้ method dialogSelectCtrl เพื่อดำเนินการ update control ซึ่งในที่นี้ก็คือการ enable/disable ItemId

1
2
3
4
5
6
7
8
9
10
11
12
public void dialogSelectCtrl()
{
;
    if (bAllCtrl.value()== 0)
    {
        ItemIdCtrl.allowEdit(true);
    }
    else
    {
        ItemIdCtrl.allowEdit(false);
    }
}

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

Axapta : Get or Set Checkbox value

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
public void clicked()
{
    Qty     tmpQty1;
    Qty     tmpQty2;
    FormCheckboxControl formCheckboxControl;
    ;
 
    super(); // ต้องรัน super ก่อน ไม่งั้นค่าไม่เปลี่ยน
// รับค่าจาก design
    formCheckboxControl = element.design().control(control::ProdParmHistoricalCost_EndJob);
//   box::info(strfmt("%1",formCheckboxControl.value()));
if(formCheckboxControl.value() == 1){ //ถ้า checked จะเป็น 1
    tmpQty1 = ProdTable::find(ProdParmHistoricalCost.ProdId).QtySched;
    tmpQty2 = ProdTableJour::reportedFinishedGood(ProdParmHistoricalCost.prodId);
 
    if(tmpQty1 != tmpQty2){
       if(box::yesNo("Sure?", DialogButton::Yes, "Confirm") == DialogButton::Yes)
       {
          if(box::yesNo("Sure?",DialogButton::Yes,"Confirm")== DialogButton::Yes){
            formCheckboxControl.value(true); //สั่งให้ checked
          }else{
            formCheckboxControl.value(false); //สั่งให้  ไม่ checked
          }
       }else{
        formCheckboxControl.value(false);
       }
    }
}
}

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

« Older articles

Newer articles »