Ismail Hamzah

"in harmonia progressio"
See also: Other Geeks@INDC

March 2008 - Posts

Custom MembershipProvider

Custom MembershipProvider diperlukan ketika aplikasi yang dikembangkan akan tidak menggunakan default provider untuk membership. Default provider yang digunakan adalah SqlMembershipProvider. Adapun pembuatan custom MembershipProvider sangat sederhana yaitu cukup meng-override method ValidateUser dari kelas MembershipProvider. Berikut adalah tiga langkah mudah pembuatan custom MembershipProvider:

1. Membuat sebuah kelas yang diturunkan dari kelas MembershipProvider

Membuat custom MembershipProvider berarti membuat sebuah kelas baru yang diturunkan dari kelas MembershipProvider.

namespace Provider

public class MyCustomMembershipProvider : MembershipProvider

public override bool ValidateUser(string username, string password)

{

// code untuk validasi user goes here

}

}

}

2. Meng-override method ValidateUser

Setelah kerangka kelas dibuat, langkah berikutnya adalah mengisikan code untuk mengoverride method ValidateUser. note: method lainnya dapat dioverride sesuai kebutuhan sehingga tidak harus semua method dari kelas MembershipProvider di override.

public override bool ValidateUser(string username, string password)

{

 

USERS_BO user = new USERS_BO();

user = USERS_MGR.GETUSERSBYNAME(username);

if (user != null)

{

if (user.PASSWORD != null)

{

string dbPassword = user.PASSWORD;

bool status = dbPassword.Equals(password);

return status;

}

else

{

return false;

}

}

else

{

return false;

}

 

 

}

isi code diatas sangat sederhana, yaitu membandingkan password yang dimasukan oleh user di login screen dengan password yang sudah disimpan didalam database untuk user tertentu (yang diindikasikan melalui username).

3. Konfigurasi di web.config

and the last step nya adalah melakukan sedikit konfigurasi di web.config. Konfigurasi dilakukan agar aplikasi kita mengenali dan kemudian menggunakan custom MembershipProvider yang telah dibuat. adapun konfigurasi yang dilakukan adalah cukup menambahkan code seperti berikut:

<membership defaultProvider="Provider.MyCustomMembershipProvider">

<providers>

<clear/>

<add name="Provider.MyCustomMembershipProvider" type="Provider.MyCustomMembershipProvider" applicationName="/" connectionStringName="ConnectionString"/>

</providers>

</membership>

Dapat dilihat, konfigurasi yang dilakukan adalah "memperkenalkan" custom MembershipProvider pada aplikasi dengan cara menuliskan nama kelas si custom MembershipProvider yang diawali dengan nama namespacenya.

done :-)

Share this post: | | | |
Posted: Mar 26 2008, 03:04 PM by go2ismail | with 2 comment(s)
Filed under:
ClientScript.RegisterStartupScript doesn't work with ASP.NET AJAX

Dalam day to day programming saya banyak menggunakan function javascript alert. Misalnya untuk memberitahu user bahwa proses yang dia kerjakan berhasil atau tidak.

try

{

//code untuk menyimpan data ke database

ClientScript.RegisterStartupScript(typeof(string), "Success", "alert('Data saved succesfully.');", true);

}

catch (Exception)

{

ClientScript.RegisterStartupScript(typeof(string), "Fail", "alert('Data not saved.');", true);

}

Namun masalah muncul ketika saya menggunakan Updatepanel, yaitu function alert tidak bekerja sebagaimana mestinya. Beruntung saya menemukan blognya Scott Klueppel dan mendapatkan solusi dari blog tersebut.

Solusinya adalah menggantikan ClientScript.RegisterStartupScript dengan ScriptManager.RegisterStartupScript jadi:

ClientScript.RegisterStartupScript(typeof(string), "Success", "alert('Data saved succesfully.');", true);

diganti dengan

ScriptManager.RegisterStartupScript(this.updatePanel, typeof(string), "Success", "alert('Data saved succesfully.');", true);

note: updatePanel adalah nama UpdatePanel yang digunakan.

thanks scott!!!

Share this post: | | | |
Posted: Mar 24 2008, 03:05 PM by go2ismail | with no comments
Filed under:
ASP.NET 2.0 Layered Application : Skin Dive ;-)

Pengalaman skin dive pertama saya adalah di pantai anyer bersama temen-temen dari SIAWARE8. Skin dive nya tidak terlalu menarik namun anak-anak SIAWARE8 nya sangat asik. Ok, mudah-mudahan skin dive di pantai "Layered Application" bisa lebih menarik ;-)

BO (Bussines Object)

Pada layer BO berkumpul banyak kelas yang menggambarkan sebuah record dari sebuah tabel. Kelasnya hanya berisi code get dan set yang akan mengisi dan mengambil nilai sebuah properties. Propertiesnya merupakan kolom-kolom dari tabel yang hendak di petakan menjadi BO. Misalkan ada tabel seperti dibawah:

maka kelas BO yang bersesuaian dengan tabel diatas adalah seperti berikut:

dapat dilihat bahwa kelas BO hanya berisi get dan set.

DAL (Data Access Layer)

Lapisan DAL berisi kelas-kelas yang mengandung code-code yang mengakses database secara langsung. Disinilah tempat yang paling baik untuk memanggil stored procedure yang ada di database. Pada DAL, saya membuat sebuah kelas yang akan dijadikan induk bagi semua kelas yang berada di DAL. si induk ini hanya bertugas membuat object database dengan menggunakan informasi connection string dari web.config. Why? agar proses pembuatan object database hanya dilakukan di satu tempat, jadi ketika ada perubahan informasi connection string kita hanya akan melakukan perubahan di satu tempat saja, tidak di semua kelas DAL. Berikut adalah contoh kelas induk di DAL yang saya beri nama kelas DAL:

 

dan berikut adalah kelas di DAL yang diturunkan dari kelas induk diatas:

Dapat dilihat bahwa kelas yang terdapat di lapisan BO digunakan disini. Method GETALLEMPLOYEE memanggil stored procedure DEMO_EMP_GET_ALL(). Dan karena yang akan dikembalikan oleh SP tersebut adalah banyak record, maka digunakanlah List dari BO untuk menangkap kembalian dari SP.

BLL (Bussiness Logic Layer)

Kelas-kelas di BLL akan memanggil method-method yang terdapat di DAL. berikut adalah contohnya:

BLL hanya memanggil method dari DAL. Kemudian, si BLL akan dipanggil oleh UI, berikut adalah contoh pemanggilan BLL oleh UI:

note: saya membuat BO, DAL dan BLL menggunakan C#, namun UI menggunakan VB.NET. .NET canggih kan :-)

untuk memperdalam, silahkan download DotNetNuke dan install pada mesin kesayangan Anda. setelah itu selamat "menelanjangi" DNN dan selamat terkagum-kagum dengan arsitekturnya :D

that just my two cents.

Share this post: | | | |
Posted: Mar 11 2008, 02:00 PM by go2ismail | with 10 comment(s)
Filed under:
ASP.NET 2.0 Layered Application : Introduction

Melihat code yang campur aduk adalah hal yang memusingkan apalagi code tersebut dibuat oleh programmer lain. Salah satu teknik yang saya lihat cukup berguna adalah sebuah teknik yang disebut layered application. Dari namanya saja sudah dapat diterka yaitu aplikasi yang berlapis, apa siy maxutnya? oke please bear on me.

Secara kasar dapat kita katakan bahwa aplikasi yang dibuat oleh para developer pada intinya adalah menyimpan data ke database dan kemudian menampilkan data yang telah di simpan tersebut. Pada jaman "jahiliyah" dulu biasanya saya menaruh semua code pada sebuah file kelas dan biasanya merupakan code behind dari file aspx. Code yang berhubungan dengan UI saya taro di sana, code yang berhubungan dengan akses data ke database saya taro juga disana, code yang berhubungan dengan bisnis proses saya taro juga disana, pokoknya saya campurkan semuanya. Aplikasi siy bisa berjalan lancar, namun ketika satu minggu kemudian saya lihat kembali itu source code, mendadak kepala ini jadi puyeng.

Beruntung pada masa awal karir profesional, saya bergabung dengan sekelompok developer hebat, arsitek hebat dan projek yang hebat pula. Disitu saya melihat code di pisah-pisahkan berdasarkan fungsi yang diemban oleh si code. Code yang berhubungan dengan data akses dibuat menjadi sebuah projek tersendiri. Code yang berhubungan dengan Bisnis Proses dibuat menjadi sebuah projek sendiri dan tentu saja UI nya juga dibuat menjadi sebuah projek tersendiri. Memang, it a little bit slow at first, tapi kemudian progressnya saya lihat bagus sekali. Let stop talking and let see picture ( i love picture):

Gambar diatas adalah gambar yang tergambar di kepala saya setelah melihat sorce code sebuah solution. Database digunakan untuk menyimpan data aktual. UI digunakan untuk "melihat" dan "memanipulasi" data yang telah tersimpan. DAL adalah sebuah project (yang terdiri dari banyak kelas) yang khusus memiliki fungsi akses data yaitu akses langsung ke database. Disinilah berkumpul code-code yang memanggil stored procedure di database. BLL adalah sebuah project (yang terdiri dari banyak kelas juga) yang khusus mengakses semua code yang berada di DAL. Code-code yang berada di BLL akan digunakan secara langsung oleh UI. BO adalah sebuah project yang terdiri dari kelas-kelas yang menggambarkan sebuah record dari suatu tabel. Ketika DAL memanggil SP yang mengembalikan banyak record maka kelas yang terdapat di BO akan dibungkus menjadi sebuah List. Cukup rapih bukan?

Kelas-kelas yang terdapat dalam project BO dapat digunakan pada setiap lapis (layer). Jadi, DAL dapat menggunakan BO, BLL dapat menggunakan BO dan UI dapat menggunakan BO. Berikut adalah gambar dari sebuah solution explorer yang telah menerapkan konsep layered application:

 dan dibawah adalah gambar yang memperlihatkan code dari BLL:

dari code diatas dapat dilihat bahwa kelas BO dibungkus menjadi sebuah List,  yang tentu saja dapat dipahami karena method GETALLEMPLOYEE akan mengembalikan banyak record. Dari code diatas juga dapat dilihat bagaimana BLL menggunakan method yang terdapat dalam DAL yang diakses dengan sangat mudah, cukup dengan di-"dot" :-)

Share this post: | | | |
Posted: Mar 11 2008, 12:43 PM by go2ismail | with 6 comment(s)
Filed under:
The breakpoint will not currently be hit. No symbols have been loaded for this document

Saya mendevelop aplikasi web dengan menggunakan VS2005. Setelah sebelumnya semuanya berjalan lancar, tiba-tiba pas mau nge-debug terjadi sesuatu yang cukup memusingkan. Breakpoint yang saya set di source code tidak "nyangkut-nyangkut". Cukup sangat memusingkan karena de-bugging adalah hal yang sangat principal. setelah googling di internet saya menemukan tips yang kemudian menjadi solusi atas permasalahan saya (banyak banget developer arround the world yang mengalami masalah ini dan banyak banget tips yang disuguhkan).

berikut adalah tips yang menjadi solusi untuk saya:

"reset Internet Explorer"

 caranya:

1. Pilih Tools kemudian Internet Options

2. Kemudian pilih tab Advanced dan klik tombol Reset

3. That's it!!!

Share this post: | | | |
Posted: Mar 10 2008, 04:15 PM by go2ismail
Filed under: