Kamis, 28 Juli 2011

Requirement User perlu di cari solusi, begitu pula Requirement mood kita



spAXrtan ...

have you feel frustrated and depressed with your busy and makes you feel that you are the miserable person in the world. Well, sometimes we will get better if break it down with our best friend but do not get used. it's good if we learn to overcome our mood.

Ya benar. Mood yang tidak bagus-entah karena sakit, perdebatan dengan atasan atau dengan teman maupun karena situasi-kondisi lingkungan kerja/kantor yang sedang fooging, ga kebagian kursi atau meja(warung bakmi kalie), ada yang kentut dll, secara tidak sadar membuat perubahan pada diri kita. misalnya ...
1. mendadak menjadi saingan-nya Tukul Arwana.
2. bikin bingung arah mouse mau kemana (mengscroll mouse secara bolak-balik).
3. raib dari meja kerja-pergi jalan-jalan.
4. menjadi mahluk paling liar dan buas di kantor-sensitif.
5. jajan (ga pake tanda kutip yah) berlebihan.ujung-ujungnya takut dengan timbangan badan.
6. ada juga yang sampai kehilangan semangat hidup sampai
7. Nyuruh sesuatu yang ga penting(cabutin uban) ke OB kita dll.

Ada bebarapa cara yang biasa-nya saya lakukan jika saya menghadapi situasi yang membuat mood ga jelas tak menentu. Saya biasa ... dari pada membolak-balik/memutar-mutar scroll pada mouse saya mengambil pinsil dan kertas - mulai menggambar kadang Saya juga bersenandung ria. Bukan bermaksud menjadi so' baik atau so' alim terkadang saya menunggu datang-nya waktu sholat untuk bisa mengadu pada-Nya.

Dr. Donald Schnell, salah satu pendiri dari The Spiritual Java Coaching Programme (http://www.spiritualjava.com/) memberikan 7 langkah yang bisa Anda lakukan untuk menuju kehidupan yang lebih baik.

  1. Selalu tanyakan pada diri Anda apabila Anda frustrasi menghadapi masalah. Misal: “Bagaimana caranya agar pekerjaan ini bisa lebih menyenangkan, lebih mudah dikerjakan, lebih cepat selesai, lebih baik?”
  2. Ciptakan ketertarikan dan rasa ingin tahu yang besar terhadap diri sendiri atau hal-hal di sekitar Anda. Sikap ini akan membuat Anda termotivasi untuk mengetahui sesuatu yang baru dan menyelesaikan sebuah masalah.
  3. Terima kekurangan Anda. Semua orang memiliki kekurangan, jadi jangan terfokus bagaimana caranya agar Anda tidak memiliki kekurangan. Sebaliknya, carilah teman yang sekiranya bisa membantu Anda mengatasi kekurangan tersebut.
  4. Jangan pernah berhenti belajar. Sama halnya dengan tubuh kita, otak kita juga perlu dilatih setiap hari, jika tidak otak kita akan menjadi lemah. Buka mata Anda dan Anda akan lihat setiap hari pasti ada hal baru yang bisa Anda pelajari dan membuat hidup Anda menjadi lebih baik.
  5. Maksimalkan hari ini. Maksudnya jangan sia-siakan waktu dan belajar menghargai hal-hal baik dan benar. Jangan sampai Anda kehilangan hal-hal yang menakjubkan dalam hidup Anda hari ini, ketika Anda disibukkan dengan mereka-reka masa depan.
  6. Jangan hidup di masa silam. Hal ini menekankan Anda untuk konsentrasi di masa ini yaitu hari ini. Yang lalu biarlah berlalu karena tidak ada yang bisa Anda lakukan untuk memperbaikinya kecuali yang bisa Anda lakukan hari ini. Jadi, apa yang bisa Anda lakukan hari ini, lakukanlah!!
  7. Berenang mengikuti arus. Jangan membuang waktu dengan hal yang tidak dapat Anda kendalikan. Atau dengan kata lain, konsentrasilah dengan apa yang dapat Anda kontrol. Misal: pekerjaan Anda, buku yang Anda baca, teman yang Anda peluk, kapan harus tertawa, kemana Anda pergi, apa yang Anda pikirkan atau lakukan, dsb.
Sumber: conectique

Selain langkah-langkah tersebut ada baiknya kalau ditambah dengan :

  1. Jaga kondisi kesehatan, apapun langkah yang kita tempuh dari nomor 1-7, jika badan sedang sakit, usaha tersebut tidak akan optimal, bahkan mungkin gagal
  2. kita niatkan apa yang kita lakukan semua adalah memiliki nilai ibadah. sesuatu yang dilakukan serius, tidak main-main/malas-malasan, punya potensi untuk bernilai ibadah.
Daftar pustaka:
http://mediasurviva.wordpress.com/
»»  READMORE...

Progress Bar ...


spAXrrtaaann!!


There's another thing that i always forget to inform the user "Mem ... the process is still running" ... spAXrrtan!, you can use this for your looping ...

YeAH! ...this Progress Bar is very UseFul to facing your unpatience analyst/functional and your user/client also ... show them the application is still running.

Okay to all Unpatience Analyst/Functional and User/Client
please stop whining and worried the process have failed ...



check this out ... Progress Bar
»»  READMORE...

Rabu, 27 Juli 2011

Parameter menjadi default Bag.2


SpAXrrrttaaaaaaaaann!! ...


Masih ingatkan dengan membuat parameter menjadi default dengan cara mengset-up Range yang ada di Datasource dan membuat Status Properties-nya menjadi Lock?! ...

Selain dengan cara demikian ... +>atus - another SpAXrtan juga mempunyai cara lain yaitu dengan cara coding, maksudnya kita bisa membuat parameter kita menjadi default dengan cara membuat method Initquery().

Penjelasan lebih lanjut ada di bawah ini
http://atus.wordpress.com/2011/07/26/method-dalam-report-yg-sering-digunakan/

Try it at Home ....
Selamat Mencoba ...
»»  READMORE...

Selasa, 26 Juli 2011

SysQuery Class

SpAXrtaaaaaaann!! ...


i want to talk about SysQuery ...
Goose this class is very usefull to make Parameter value u dont have to worried about type of the paramter
its effected to String,Enum,Int,Real etc ...

n this is a sample of using SysQuery

for a range like ...range date (ex.fromdate to date)
element.query().dataSourceName('PurchLine').addRange(fieldnum(PurchLine, DeliveryDate)).value(sysQuery::range(fromdate,todate));

for one value like String,Int,Real
element.query().dataSourceName('PurchLine').addRange(fieldnum(PurchLine, DeliveryDate)).value(sysQuery::value(EmployeeId));

that's alll

you can try it at home ...
»»  READMORE...

Senin, 25 Juli 2011

Sampel penggunaan Class Query


spAXrrrtaaaaaann!! ...

For this session i try to create a report without Datasource Node.
Just filled blank the Data Source node

at ClassDeclaration method you can filled it with
and at the fetch method fill it with this code

Okay ... this is the next step for you to show the data at the report.
Create a new Design Report then right click at the AutoDesignSpecs and choose 'New->Body'.
Now you have a Body node and you can set-up the properties from right click at the Body node then choose 'Properties'.
Set up the 'Table' Properties and fill it with 'Purch Line'. Dont forget to set up 'Name' properties with the same name(table's name).
Create some Field String by Right Click at the body and choose 'New Control -> String'. You can fill the properties with 'Table' = 'PurchLine' 'DataField' = 'PurchId'.

Save n Compile your Report. Drag your report to the Output Menu item. Give it a label n save it.
for some improvisation you can add Display method at that Body Node
display PurchIdBase getPurchId()
{
;
return _purchLine.PurchId;
}


and one Enum field that referred to PurchStatus.
»»  READMORE...

Dont Forget to Set-up your TableGroup



spAXrrtaaaaaaaaann!! ...


Its been for a few month iv been working with Ax Standard. Usually if i make some table i don't care about this properties TableGroup. It's changed after iv got run the Sysdatabasetransdelete ...
there is some tables that iv made but when the class Sysdatabasetransdelete running n done ... my tables doesn't changed - especially for the records

After iv checked in the Sysdatabasetransdelete class... there's a some table group criteria.

Miscellaneous
Parameter
Group
Main
Transaction
Worksheetheader and
Worksheetline

n Sysdatabasetransdelete class is execute the Group of Table :
Transaction
WorkSheetHeader and
WorkSheetLine

btw ... maybe u wondering why i used Sysdatabasetransdelete class?? ...
This Class is very useful to delete all transaction that have been recorded on a tables .... so its makes our application like start from the beginning. It is deleted all transaction but not for the basic data.

So for the spAXrtan ..dont forget to set up ur TableGroup on your Tables ....
»»  READMORE...

Jumat, 22 Juli 2011

Report dengan Dialog dan Method LookUp


OOOoooiII spAXrtan ... mau posting lagi nih ..

Inget dengan postingan saya yang tentang LookUp dengan parameter kan?
ya ... itu nempelnya di sebuah Form.
Dan sekarang aku menghadapi suatu report yang harus ada lookup seperti itunya.
so .. ada yang bisa Bantu ga?
Report tersebut Running dengan DialogForm dan juga extends ke RunBasebatch. DialogField yang ditampilkan
untuk parameter adalah ItemGroupId dan ItemId. Dimana ItemId meLookup berdasarkan Value dari ItemGroup.
...
Untuk disebuah fOrm aku sudah tahu bagaimana caranya tapi bagaimana jika hal ini terjadi disebuah Dialog RunBaseBatch

Akhirnya demi mengimplementasikan permintaan parameter untuk report yang menggunakan Lookup berdasarkan inputan
aku menggunakan Form untuk dialog Reportnya.
pertama aku membuat form dengan 3 buah object didalamnya
yaitu FieldString ItemGroupId
FieldString ItemId
dan terkahir Button
setelah itu di class Declaration Form itu aku tambahkan variable berupa array

dan aku buat sebuah method di form tersebut ... sebut saja namanya lemparvalue().
void lemparvalue()
{
args args;
Menufunction mnu;
;
data = new array(types::String);
data.value(1,itemgroupid.valueStr());
data.value(2,itemid.valueStr());

args = new args();
args.parmObject(data);
mnu = new Menufunction(menuitemoutputstr(Itemdeliveryreport),menuitemtype::Output);
mnu.run(args);
}

sebelumnya aku sudah membuat report dengan nama Itemdeliveryreport.

tak lupa di FieldString ItemId aku tambahkan method LookUp
public void lookup()
{

Query query = new Query();
QueryBuildDataSource queryBuildDataSource;
QueryBuildRange queryBuildRange;

SysTableLookup sysTableLookup = SysTableLookup::newParameters(tableNum(InventTable), This);
;

sysTableLookup.addLookupField(fieldNum(InventTable, ItemId));
sysTableLookup.addLookupField(fieldNum(InventTable, ItemGroupId));


queryBuildDataSource = query.addDataSource(tableNum(InventTable));
queryBuildRange = queryBuildDataSource.addRange(fieldNum(InventTable, ItemGroupId));

queryBuildRange.value(ItemGroupId.valueStr());
sysTableLookup.parmQuery(query);

sysTableLookup.performFormLookup();
}

terakhir di Button-method Cliked
void clicked()
{
;
super();

element.lemparvalue();
element.close();
}

Di Report ItemDeliveryreport yang sudah aku buat aku deklarasikan sebuah Variable array

public class ReportRun extends ObjectRun
{
....
....
....
Array datadata;

}
dan juga sebuah method init()
public void init()
{


;
super();

datadata = this.args().parmObject();


}

terakhir ..tentu saja di Fetch()
karena nilai yang dilempar itu ada 2 nilai pertama ItemGroupId dan ItemId, dan sudah dimasukan ke variable data yang ada di form maka aku harus memecahnya kembali dengan cara
public boolean fetch(){
boolean ret;
ItemGroupId _itemGroup;
ItemId _itemId;

//ret = super();
ret = true;

_itemgroup = datadata.value(1);
_itemId = datadata.value(2);

///selanjutnya silahkan anda manfaatkan atau daya gunakan kedua variable yang sudah berisi nilai-nilai yang diambil dari form inputan tadi.
..........
........
.........
..........
}

say thanks to dulu sebelum pamit ...thanks yak om Atus

Okay SpAXrtan ... mangga di cobian ... :)
»»  READMORE...

Minggu, 10 Juli 2011

Parameter menjadi default


spAXrrtaaaaaaann!! ...

Membuat parameter yang kita inginkan menjadi default (di sebuah report)
di Report yang kita buat, kita bisa memasukan/men-set-nya di
Report
Datasources
Query
DataSource (yang kita masukan/set)
Ranges

(disini kita masukan field dari Datasource kita)
(klik kanan di field yang sudah kita masukan ke node Ranges pilih properties)
(pada properties Value isi dengan Data/record yang kita maksud)
(pada properties status isi dengan Lock)

Save & Compile

Selamat Mencoba ...
»»  READMORE...

Kamis, 26 Mei 2011

Remote Desktop and my Foolishness


spAXrrtaaaaaaann!! ...

So ... this is my foolishness at my work ...

Selama project berlangsung kami mendeploy XPO-xpo dengan cara Remote Desktop ke server. Disini kami membuat beberapa user untuk bisa Remote Desktop. Pada suatu saat License Remote Desktop di Server client kami habis masa berlakunya dan terpaksa kami membeli tiga license.

Disini yang menarik ... untuk bisa mengakses dan melakukan Remote Desktop kami harus absen dahulu seperti "saya masuk ke bla bla bla (maksudnya ip server) ...". Karena satu user untuk satu session dan jika ada yang bentrok maka user pertama kali yang masuk langsung keluar dari Remote Desktop tersebut.Dengan keadaan ini ada juga yang sampai Marah-marah sehingga mendatangkan pertengkaran dan saling menyalahkan*.

Dan hari ini saya mendapatkan tips untuk menanggulangi "Pertengkaran" tersebut ...maksudnya menanggulangi masalah Sesion Remote Desktop ini.

Kebetulan waktu itu client kami menggunakan Windows Server 2008.
di Menu Server Manager
kita bisa masuk
Roles
Terminal Services
Terminal Services Configuration
(di Group Edit Setting);
ubah Menu Restrict user to single session di rubah keNo

n Voila! walau teman kita masuk dengan log-in yang sama untuk Remote Desktop tidak akan saling mengakhiri Sesion Remote Desktop teman kita yang sudah masuk duluan.

Terima Kasih pada Om Daru Prasetyo ... :) bermanfaat banget nih Info-nya ...hehehe


*(Paling ga suka gw kalo dibilang 'Jangan bikin kerja gw lambat' or 'Bottle neck' ... itu sama saja ga nghargain usaha orang itu. daripada marah dan ngatain orang, Lebih bijak kalo kita bantu Orang yang mengalami kesulitan dalam pekerjaannya.so, siklus kerja jadi bisa berjalan kembali ... :) )
»»  READMORE...

Rabu, 25 Mei 2011

Make footer appear at the end of the page


spAXrrttaaaann!! ...

Waktu itu user mencoba mencetak Purchase Order yang lumayan banyak list itemnya. Saat proses print dan menampilkannya di Screen footer PurchaseOrder tampil disetiap Halaman. Sedangkan Idealnya sebuah footer menurut versi user saya footer tersebut harus berada di akhir halaman (kondisi Report PurchPurchaseOrder sudah kami modifikasi dengan menambahkan satu footer lagi untuk Tanda Tangan user-user yang bertanggung jawab untuk Dokumen Purchase order ini).

dan bertambah kembali-lah pekerjaan modifikasi kami. Kami menambahkan dan memodifikasi beberapa Syntak yang ada di method fetch PurchPurchaseOrder ...

Pertama:
Saya tambahkan PageFooter tambahan yang isinya Kotak-kotak Yang akan dipakai user untuk Tanda tangan.
Kedua:
Saya tambahkan variable Boolean printFooter di classdeclaration di Report PurchPurchaseOrder
Ketiga:
Saya tambahkan method executeSection seperti ini ...
void executeSection()
{
if (printReference)
super();

printReference = true;
}
Keempat:
di method Fetch di modifikasi seperti ini di bagian ...

while (purchFormLetterReport.moveNextPrintSetting())
{
// Set print settings for this report
element.unpackPrintJobSettings(purchFormLetterReport.getCurrentPrintSetting().parmPrintJobSettings().packPrintJobSettings());
element.printJobSettings().copies(purchFormLetterReport.getCurrentPrintSetting().parmNumberOfCopies());
element.printJobSettings().fitToPage(false);
/*Original start
printFooter = this.totalsPage(FirstLast::First, vendPurchOrderJour.AmountPurchaseOrder);
printFooterEuro = this.totalsPage(FirstLast::First, vendPurchOrderJour.AmountPurchaseOrder && element.printEuroTotals());
printDocuHeader = false;
*/Original end
//Hy's modified start
printFooter = this.totalsPage(FirstLast::Last, vendPurchOrderJour.AmountPurchaseOrder);
printFooterEuro = this.totalsPage(FirstLast::Last, vendPurchOrderJour.AmountPurchaseOrder && element.printEuroTotals());
printDocuHeader = false;
//Hy's modified end

setelah itu di bagian ini ... masih di method fetch

/* Original Start
if (element.pagesTotal())
{

printFooter = this.totalsPage(FirstLast::Last, vendPurchOrderJour.AmountPurchaseOrder);
printFooterEuro = this.totalsPage(FirstLast::Last, vendPurchOrderJour.AmountPurchaseOrder && element.printEuroTotals());
}
*/ Original end
//Hy's Modified start
if (element.pagesTotal())
{
printFooter = this.totalsPage(FirstLast::First, vendPurchOrderJour.AmountPurchaseOrder);
printFooterEuro = this.totalsPage(FirstLast::First, vendPurchOrderJour.AmountPurchaseOrder && element.printEuroTotals());
//printReference ... variable yang mewakili PageFooter baru yang saya buat
printReference = this.totalsPage(FirstLast::First,vendPurchOrderJour.AmountPurchaseOrder);
}
else
//Hy's modified end
»»  READMORE...

Senin, 23 Mei 2011

Find Data Voucher in LedgerTrans


spAXrrtaaaaaaaaaaaannn!! ...

Saat Itu saya mempunyai Requirement Report yang resource data-nya entah dari table mana. Dan saya hanya mempunyai clue dari Contoh datanya saja. Data-data yang akan ditampilkan itu berupa data2 Voucher dan ada Amount Debit Creditnya ...
Saya sama sekali Blank dengan Debit Credit dan tetekbengeknya ... dulu waktu SMU pelajaran yang saya Ikuti dan BT sama sekali adalah Accounting. Dan Waktu kuliah saya bertemu lagi dengan mata Kuliah itu.Ditambah dengan Dosen yang ga Asyik jadi semakin parahk lah Perhitungan dan pengertian debit credit saya.

Dari Lihat Contoh di Spek Requirementnya data tersebut di mulai dengan data Voucher,Dimension,Currencycode, Original Amount, Debit dan Credit ...
Dengan melakukan kenekatan akhirnya Saya pakai cara untung-untungan saja untuk membuat report tersebut. Dan akhirnya dengan bantuan teman saja pula saya mendapatkan Contoh Table yang Datanya mirip dengan contoh data yang Data Di Spek Report. Table itu adalah LedgerJournalTrans.
Setelah aku oprek dan membuat reportnya berdasarkan Table LedgerJournalTrans ... ternyata report ku itu masih salah karena data yang aku keluarkan tidak Detail. Dan Consultannya memperlihatkan form yang bisa aku ambil resoource-nya yaitu di Menu General Ledger-Journal-Lines-Journal Voucher-Inquiries Button-Voucher Transaction.

Di Voucher Transaction ini aku bisa melihat Detail datanya...
Sekarang yang menjadi pertanyaanku adalah bagaimana aku bisa mendefinisikan bahwa Amount Voucher itu masuk Kolom Debit atau Kredit?? ...
Sedangkan di Table LedgerJournalTrans kita bisa melihatnya dengan mudah. Satu-satunya clue Amount Voucher tersebut termasuk Debit atau Kredit adalah dia rata kanan untuk Kredit rata Kiri untuk Debit.Dari sana aku lihat ke EDT field LedgerTrans.AmountMST tersebut ternyata dia mempunyai properties seperti ini.

mmm ... ternyata properties DisplaceNegativenya yang bisa membuat dia rata kanan atau rata kiri. Lalu pertnyaan berikutnya muncul... bagaimana saya bisa mengakses properties tersebut untuk bisa saya mendefinisikan bahwa Amount Voucher yang sedang di query masuk ke kolom Debit atau Kredit. dan Sumpah ... selalu saja ada pertanyaan lagi! ...
Dan aku terus mencari lagi bagaimana aku bisa mendefinisikan dia Debit atau Kredit dan akhirnya ketemu....
Disini sepertinya ...

Ternyata di LedgerTrans ada Field Crediting yang bisa menunjukan voucher yang dimaksud itu masuk Debit atau Kredit.

dan akhirnya aku bisa mendefinisikan Amount Credit dan juga Debit.
Aku membuat method Display di table LedgerTrans seperti ini
Display Amount AmountCredit()
{
Amount credit;
;

if(this.Crediting == NoYes::Yes)
{
credit = this.AmountMST;
}
return credit;
}
dan
Display Amount AmountDebit()
{
Amount debit;
;

if(this.Crediting == NoYes::No)
{
debit = this.AmountMST;
}
return debit;
}

... bener ga ya? ...hihi...
»»  READMORE...

Rabu, 11 Mei 2011

TextBuffer at Dynamics Ax and my Foolishness


spAXrrttaaaaannnn!! ...

So ... this is my foolishness at my work ...
My friend erick want me to help him to produces some report which display a comment from user's input. so I used Memo for the String length in order to handle a possibility of length from the comment ... coz the comment may be like a story, have many paragraph. But unfortunately after the report is running there's some paragraph not displayed at the report and its because the height of the object who generated from EDT which is have lenght memo. in other word the object's height(which is generated from String) is not dynamic
So i use TextBuffer Class to handle this problem.
Here we are ... the TextBuffer ...

public class ReportRun extends ObjectRun
{
transdate Fromdate, Todate;
dialogfield dialogfromdate,dialogtodate,dialogComment;
transdate tempDate;
CustAccount tempCustAccount;
qty tempQty;
qty tempQtyconv;
str tempitemid;
IBMKeterangan Keterangan;
int i;
int panjangstr;

//TextBuffer Class
TextBuffer tb;
}

at Fetch
public boolean fetch()
{
boolean ret;
tb = new TextBuffer();



element.query().dataSourceNo(1).addRange(fieldnum(salesline,ShippingDateConfirmed)).value(strfmt('%1..%2',fromdate,todate));

tb.setText(Keterangan);

panjangstr = tb.numLines();
DistempKeterangan.height(panjangstr,units::char);

ret = super();

return ret;
}

Wait ..so where the Foolishness???
Here is the Foolishness ... to Handle the Dynamic Height's object you don't have to use TextBuffer class because Microsoft Dynamics Ax have a feature for this issue.
You can find the solving problem in a properties from the object which is generated from the variable that u have.

just right click from the object -> properties -> and voila ..there's a DynamicsHeight.
Change the DynamicsHeight to Yes.

Waakakkak .. Damd it!.
»»  READMORE...

Selasa, 19 April 2011

Create Own Sequence Number at Ms.Dynamics Ax


spAXrrttaaaaaaaann!! ..

Gowd ... sometimes we need own Sequence Number for our form at Axapta.
so these is code from one of my friends Dwipa Rachmawan(Ms.Dynamics Ax Technical), these code produces the order Number Sequence for our form without enrolled in the system sequence number that already exists in Axapta.

Select one table n create a Method
public void nextTaxInterval()
{
EHCTAXValueAddSubGroup eHCTAXValueAddSubGroup;
;
Select maxof(TaxInterval)
From eHCTAXValueAddSubGroup
where eHCTAXValueAddSubGroup.TaxGroupId == this.TaxGroupId;
// where eHCTAXValueAddSubGroup.TaxSubGroupId != this.TaxSubGroupId;
This.TaxInterval = eHCTAXValueAddSubGroup.TaxInterval + 1;

}

n then at form that contain with that datasource/table, generate Create method
public void create(boolean _append = false)
{
super(_append);
EHCTAXValueAddSubGroup.nextTaxInterval();
//assetDepreciationProfileSpec.nextInterval();
}
»»  READMORE...

Senin, 04 April 2011

Melempar record-record ke Kolom2 Excel dalam Axapta


spAXrrttaaaaaaannn!! ..

Waktu tahun 2002-2003 aku pernah dalam project Human Resource dan ada sebuah script yang melempar data-data/record-record ke file Excel ...

void clicked()
{
CustTable CustTableSelected; //buffor to store the selected
COM excelApplication;
COM excelWorkBooks;
COM excelWorkBook;
COM excelWorkSheets;
COM excelWorkSheet;
COM range;
int lineNum;
Array arr;
;

excelApplication = new COM("excel.application");
excelWorkBooks = excelApplication.workBooks();
excelWorkBook = excelWorkBooks.add();
excelWorkSheets = excelWorkBook.worksheets();
excelWorkSheet = excelWorkSheets.add();
excelApplication.visible(TRUE);

super();

for (CustTableSelected = CustTable_ds.getFirst(true) ?
CustTable_ds.getFirst(true) : CustTable_ds.cursor(); CustTableSelected;
CustTableSelected = CustTable_ds.getnext())
{
lineNum++;
arr = new Array(Types::String);
arr.value( 1, custTableSelected.AccountNum);
arr.value( 2, custTableSelected.Name);
arr.value( 4, custTableSelected.CustGroup);

range = excelWorkSheet.Range(strfmt("A%1:D%1", lineNum));
range.value2(COMVariant::createFromArray(arr));
}
}

source code diatas sebenarnya bukan dari yang aku punya tapi aku dapat dari http://snippets.dzone.com/tag/Axapta

oh iya ini hasil Editan saya

void clicked()
{
CustTable CustTableSelected; //buffor to store the selected
COM excelApplication;
COM excelWorkBooks;
COM excelWorkBook;
COM excelWorkSheets;
COM excelWorkSheet;

COM rangetit;
COM range;

int lineNum;
int linetit;

Array arr;
Array arrtit;
int i=1;
;

excelApplication = new COM("excel.application");
excelWorkBooks = excelApplication.workBooks();
excelWorkBook = excelWorkBooks.add();
excelWorkSheets = excelWorkBook.worksheets();
excelWorkSheet = excelWorkSheets.add();
excelApplication.visible(TRUE);

super();
/*
for (CustTableSelected = CustTable_ds.getFirst(true) ?
CustTable_ds.getFirst(true) : CustTable_ds.cursor(); CustTableSelected;
CustTableSelected = CustTable_ds.getnext())
{
lineNum++;
arr = new Array(Types::String);
arr.value( 1, custTableSelected.AccountNum);
arr.value( 2, custTableSelected.Name);
arr.value( 4, custTableSelected.CustGroup);

range = excelWorkSheet.Range(strfmt("A%1:D%1", lineNum));
range.value2(COMVariant::createFromArray(arr));
}
*/
lineNum = i;


linetit++;
arrtit = new Array(Types::String);
arrtit.value(1,"Account");
arrtit.value(2,"Name");
arrtit.value(4,"Group");
rangetit = excelWorkSheet.Range(strfmt("A%1:D%1", linetit));
rangetit.value2(COMVariant::createFromArray(arrtit));

while select CustTableSelected
{
lineNum++;
arr = new Array(Types::String);
arr.value( 1, custTableSelected.AccountNum);
arr.value( 2, custTableSelected.Name);
arr.value( 4, custTableSelected.CustGroup);

range = excelWorkSheet.Range(strfmt("A%1:D%1", lineNum));
range.value2(COMVariant::createFromArray(arr));
}

}
»»  READMORE...

lookup berdasarkan Parameter-nya


spAXrrttaaaaaaaaaaaaann!! ...

Method Lookup disini adalah sebuah method yang banyak dipakai dalam membangun/mengubah Applikasi di Microsoft Dynamics Ax ...

public void lookup()
{
//Lookup AttachmentCode berdasarkan TaxTrans
Query query = new Query();
QueryBuildDataSource queryBuildDataSource;
QueryBuildRange queryBuildRange;
// Create an instance of SysTableLookup where 'this' the current Form control.
SysTableLookup sysTableLookup = SysTableLookup::newParameters(tableNum(IBMTaxAttachment), This);
;
// The field to be shown in the lookup form.

sysTableLookup.addLookupField(fieldNum(IBMTaxAttachment, IBMTaxAttachmentCode));
sysTableLookup.addLookupField(fieldNum(IBMTaxAttachment, Description));

// Limit and arrange data selection.
queryBuildDataSource = query.addDataSource(tableNum(IBMTaxAttachment));
queryBuildRange = queryBuildDataSource.addRange(fieldNum(IBMTaxAttachment, IBMTaxTransCode));

queryBuildRange.value(Grid1_IBMTaxTransCode.valueStr());
sysTableLookup.parmQuery(query);
// Perform lookup
sysTableLookup.performFormLookup();
}
»»  READMORE...