Powered By

Skin Design:
Free Blogger Skins

Powered by Blogger

Cari Blog Ini

26 Maret 2020

Koneksi External Database MS Acess di Dynamics AX 2012

Jika dulu pernah saya post mengenai koneksi database ekseternal di Ms Dynamics AX 2012 dengan database eksternalnya SQL Server, maka kali ini saya mencoba koneksi pada database Ms Access!

https://shindu-b-raditya.blogspot.com/2016/10/problem-koneksi-eksternal-database-sql.html

Berbeda dengan database SQL Server dimana merupkan client-server database, maka database Access adalah File Database. Database bersifat local karena untuk membuka database tersebut harus membuka file mdb nya. Maka harus akses via network share agar dapat konek dengan database tersebut jika diakses bukan dari server/pc itu sendiri.

Langkah-langkah nya adalah sebagai berikut.

Pertama, persiapkan dulu agar folder lokasi file MDB tersebut dapat di akses dari luar yaitu dengan men-share folder nya. Karena PC tersebut tidak konek domain maka saya membuat user local baru di PC tersebut dan membuka share untuk user tersebut.

Kedua, persiapkan ODBC.
Dikarenakan AX memiliki dua mode aplikasi (mode server 64 bit, dan mode client 32 bit) maka kita perlu memilih akan menggunakan mode yang mana. Jika jalan di client maka harus membuat ODBC 32 bit. Sedang jika menggunakan run on server/batch job, maka gunakan ODBC 64 bit. Untuk ODBC 64 bit bisa download driver Access (Access Database Engine)  https://www.microsoft.com/en-us/download/details.aspx?id=54920

Perlu di pertimbangkan, jika kita jalan di sisi Client, maka setting ODBC juga perlu di setting di setiap client AX yang menjalankan fungsi akses ke eksternal DB tersebut. Sedang jika kita jalan di sisi server, maka ODBC cukup di setting di Server AOS. Karena itu akhirnya saya putuskan untuk jalankan aplikasi di sisi server, agar juga nanti saya bisa membuat job batch yang secara periodik melakukan download data.

Pada server AOS jika driver belum di install maka saat menambah ODBC hanya akan muncul SQL Server.

Setelah di install maka pilihannya menjadi:

Terlihat versi drivernya adalah 14 (office 2010). 

Setelah driver untuk ms Access terinstall, maka dilanjutkan membuat ODBC baru dengan target ke file .mdb yang ada di PC.



Langkahnya isi nama datasource, kemudian select untuk memilih file mdb nya. Maka isikan langsung path shared folder nya. Dan kemudian error! 

Error tersebut terjadi karena saat akan masuk ke shared folder tersebut membutuhkan akun. Lha gimana cara ngisi akunnya gimana? Maka kita lakukan adalah dengan konek ke folder tersebut via File Explorer, maka akan ditanya user dan password untuk masuk. Masukkan user dan password kemudian jangan lupa centang Remember My Credential agar data user dan password tersimpan. Atau dengan cara manual kita dapat langsung tambah data user dan password pada Credential Manager

Setelah user dan password disimpan, ulangi proses Select tadi. Jika semua benar, akan muncul file mdb yang ada di dalam folder sharing tersebut. Pilih file yang dimaksud.
Selanjutnya masukkan password untuk membuka file jika pada bagian Advanced.
Saat saya setting ODBC ini terkadang beberapa kali tampilan ODBC tertutup sendiri. Jika seperti itu maka ulangi lagi prosesnya sampai akhirnya benar-benar tersimpan odbc nya.

Oh ya, server AX berjalan sesuai user service nya. Maka semua proses ODBC diatas dilakukan pada user service AX tersebut.

Ketiga, coding di AX.
Coding di AX tidak ada hal yang khusus. Untuk membuka koneksi bisa langsung menggunakan kode di bawah ini:

// Set the information on the ODBC.
loginProperty = new LoginProperty();

loginProperty.setDSN(nama DSN);


odbcConnection = new OdbcConnection(loginProperty);
//Assert permission for executing the sql string.
perm = new SqlStatementExecutePermission(query String);
perm.assert();

//Prepare the sql statement.
statement = odbcConnection.createStatement();
resultSet = statement.executeQuery(query String);

while (resultSet.next()){
    //TODO: READ per ROW
    ...
    ...
}
resultSet.close();
statement.close();

Pada case ini coding tersebut saya pasang pada sebuah Class, kemudian class tersebut di panggil di class lain yang mengimplementasikan RunBaseBatch dan class ini di jalankan via batch job.

Jika ingin memanggil fungsi tersebut di Menu, maka jangan lupa set menu tersebut run on server.