Membuat Form Pendaftaran User Dengan Custom Tool CreateUserWizard

Tool CreateUserWizard adalah kontrol yang digunakan untuk membuat atau mendaftarkan user baru ke sistem ASP.net membership. Dengan tool ini kita bisa mendaftarkan user ke database ASP.net membership tanpa perlu menulis kode untuk menyimpan ke database. Semua proses dilakukan di belakang layar.

Di artikel sebelumnya saya telah menulis sedikit tentang tool ini. Secara default ada dua langkah ketika membuat user baru

  1. CreateUserWizardStep yang berisi 6 textbox isian
  2. CompleteWizardStep, jika user baru telah terbentuk


CreateUserWizard Step

Complete wizard step

Namun selain 6 informasi default tersebut, kita bisa menambahkan textbox lain untuk mendapatkan informasi yang lain. Informasi tambahan ini bisa di buat di wizard step, ataupun kita tambahkan di CreateUserWizardStep.
Jika ingin menggunakan wizardstep, pilih menu ‘Add/Remove WizardSteps…’

Menu Add/Remove

Di contoh ini saya tidak menggunakan wizardstep, tapi memodifikasi tampilkan CreateUserWizardStep, seperti gambar berikut

Perlu diperhatikan ketika kita membuat sendiri desain dari tool ini

  • ID textbox nama user harus “UserName”
  • ID textbox password harus ‘Password’
  • ID textbox untuk konfirmasi password harus ‘ConfirmPassword’
  • ID textbox untuk pertanyaan rahasia harus ‘Question’
  • ID textbox untuk jawaban dari pertanyaan harus ‘Answer’
  • ID Literal untuk pesan kesalahan harus ‘ErrorMessage’
  • Tombol ‘Create User’ bisa menggunakan kontrol yang lain tetapi harus ada attribut ‘Command=”CreateUser”‘
  • Tombol ‘Cancel’ untuk membatalkan proses bisa menggunakan kontrol yang lain tetapi harus ada attribut ‘Command=”Cancel”‘

Ketika tombol ‘Create User’ di klik, nama user, password, email, pertanyaan rahasia dan jawaban rahasia akan secara otomatis tersimpan di database membership, di tabel aspnet_Users dan aspnet_Membership. Lalu bagaimana dengan informasi lain yang kita tambahkan?
Untuk menyimpan informasi tambahan tersebut, kita bisa menyimpan di tabel kita sendiri atau memanfaatkan ‘Profile’ di ASP.net

Membuat tabel sendiri

Cara pertama, untuk menyimpan informasi tambahan adalah dengan membuat tabel baru.
Buka database dan buat tabel baru dengan struktur dibawah ini, (misal namanya Profile)

Perhatikan, kolom pertama adalah ‘UserId’ dengan tipe data ‘uniqueidentifier’ dan set sebagai primary key.
Buat relasi antara tabel ‘profile’ dan ‘aspnet_Users’

Buat relasi dengan tabel aspnet_Users

Dan set ‘Delete Rule’ menjadi ‘Cascade’

Tabel baru yang dibuat

Sekarang, pilih CreateUserwizard, buka propertinya dan double click pada event ‘CreatedUser’

Buka codebehind, di event CreatedUser (C#) — Kebetulan lagi bikin app pake C#, untuk kode VB, translate sendiri aja ya.

protected void CreateUserWizard1_CreatedUser(object sender, EventArgs e)
{
	MembershipUser user = Membership.GetUser(CreateUserWizard1.UserName);
	Guid userId = (Guid)user.ProviderUserKey;
	
	TextBox firstname = (TextBox)CreateUserWizard1.CreateUserStep.ContentTemplateContainer.FindControl("FirstName");
	TextBox lastname = (TextBox)CreateUserWizard1.CreateUserStep.ContentTemplateContainer.FindControl("LastName");
	TextBox org = (TextBox)CreateUserWizard1.CreateUserStep.ContentTemplateContainer.FindControl("Organization");
	TextBox dept = (TextBox)CreateUserWizard1.CreateUserStep.ContentTemplateContainer.FindControl("Departement");
	TextBox phone = (TextBox)CreateUserWizard1.CreateUserStep.ContentTemplateContainer.FindControl("Phone");
	TextBox add = (TextBox)CreateUserWizard1.CreateUserStep.ContentTemplateContainer.FindControl("Address");
	TextBox city = (TextBox)CreateUserWizard1.CreateUserStep.ContentTemplateContainer.FindControl("City");
	
	string strKoneksi = ConfigurationManager.ConnectionStrings["ConUser"].ToString();
	string kueri = "INSERT INTO Profile (UserId,FirstName,LastName,Organization,Department,Phone,Address,City) VALUES(@UserId ,@FirstName ,@LastName ,@Organization ,@Department ,@Phone ,@Address ,@City)";
	SqlConnection sqlcon = new SqlConnection(strKoneksi);
	sqlcon.Open();
	SqlCommand cmd = new SqlCommand(kueri, sqlcon);
	cmd.CommandType = CommandType.Text;
	cmd.Parameters.AddWithValue("@UserId", userId);
	cmd.Parameters.AddWithValue("@FirstName", firstname.Text);
	if (lastname.Text == string.Empty)
		cmd.Parameters.AddWithValue("@LastName", DBNull.Value);
	else
		cmd.Parameters.AddWithValue("@LastName", lastname.Text);
	cmd.Parameters.AddWithValue("@Organization", org.Text);
	if (dept.Text == string.Empty)
		cmd.Parameters.AddWithValue("@Department", DBNull.Value);
	else
		cmd.Parameters.AddWithValue("@Department", dept.Text);
	if (phone.Text == string.Empty)
		cmd.Parameters.AddWithValue("@Phone", System.Data.SqlTypes.SqlDecimal.Null);
	else
		cmd.Parameters.AddWithValue("@Phone", phone.Text);
	if (add.Text == string.Empty)
		cmd.Parameters.AddWithValue("@Address", DBNull.Value);
	else
		cmd.Parameters.AddWithValue("@Address", add.Text);
	if (city.Text == string.Empty)
		cmd.Parameters.AddWithValue("@City", DBNull.Value);
	else
		cmd.Parameters.AddWithValue("@City", city.Text);

	cmd.ExecuteNonQuery();
	sqlcon.Close();
	sqlcon.Dispose();
	cmd.Dispose();
}

Ketika user baru terbentuk, informasi tambahan tersebut akan di simpan di tabel ‘profile’

Menggunakan ASP.net Profile

Cara kedua untuk menyimpan informasi tambahan adalah dengan memanfaatkan ASP.net profile. Kita tidak perlu membuat tabel baru, semua informasi akan tersimpan di database membership, di tabel ‘aspnet_Profile’.
Untuk menggunakan ASP.net Profile, definisikan terlebih dahulu informasi berikut di file Web.Config.

<profile enabled="true" >
	<properties>
		<add name="FirsName" type="string" />
		<add name="LastName" type="string"/>
		<add name="Organization" type="string"/>
		<add name="Department" type="string"/>
		<add name="Phone" type="string"/>
		<add name="Address" type="string"/>
		<add name="City" type="string"/>
	</properties>
</profile>

Jika kita menggunakan SQL Server selain SQL Express, tambahkan kode provider dan nama koneksi string dari database yang digunakan, sehingga kode diatas menjadi

<profile enabled="true" defaultProvider="MyProfileProvider">
	<providers>
		<clear/>
		<add name="MyProfileProvider"
		  connectionStringName="ConUser"
		  applicationName="/"
		  type="System.Web.Profile.SqlProfileProvider"/>
	</providers>
	<properties>
		<add name="FirsName" type="string" />
		<add name="LastName" type="string"/>
		<add name="Organization" type="string"/>
		<add name="Department" type="string"/>
		<add name="Phone" type="string"/>
		<add name="Address" type="string"/>
		<add name="City" type="string"/>
	</properties>
</profile>

Buka file codebehind, ubah kode di event ‘CreateUser’

protected void CreateUserWizard1_CreatedUser(object sender, EventArgs e)
{
	TextBox firstname = (TextBox)CreateUserWizard1.CreateUserStep.ContentTemplateContainer.FindControl("FirstName");
	TextBox lastname = (TextBox)CreateUserWizard1.CreateUserStep.ContentTemplateContainer.FindControl("LastName");
	TextBox org = (TextBox)CreateUserWizard1.CreateUserStep.ContentTemplateContainer.FindControl("Organization");
	TextBox dept = (TextBox)CreateUserWizard1.CreateUserStep.ContentTemplateContainer.FindControl("Departement");
	TextBox phone = (TextBox)CreateUserWizard1.CreateUserStep.ContentTemplateContainer.FindControl("Phone");
	TextBox add = (TextBox)CreateUserWizard1.CreateUserStep.ContentTemplateContainer.FindControl("Address");
	TextBox city = (TextBox)CreateUserWizard1.CreateUserStep.ContentTemplateContainer.FindControl("City");
	
	ProfileCommon profil = (ProfileCommon)ProfileCommon.Create(CreateUserWizard1.UserName, true);
	profil.FirsName = firstname.Text;
	profil.LastName = lastname.Text;
	profil.Organization = org.Text;
	profil.Department = dept.Text;
	profil.Phone = phone.Text;
	profil.Address = add.Text;
	profil.City = city.Text;

	profil.Save();
}

Ketika user baru terbentuk, informasi tambahan tersebut akan di simpan di tabel ‘aspnet_Profile’

Data profile yang tersimpan di tabel aspnet_Profiles

Semoga bermanfaat.
Happy Coding

About Yuniar

Penulis sekarang lebih banyak bekerja menggunakan teknologi Microsoft .NET secara umum dan TIDAK lagi menggunakan aplikasi MapXtreme.net dari MapInfo. Karena itu mohon maaf, jika pertanyaan-pertanyaan mengenai MapXtreme sudah tidak bisa saya jawab lagi.

Posted on 2 Juni 2010, in ASP.net and tagged , , , , . Bookmark the permalink. 4 Komentar.

  1. bisa ga di create user wizard menambahkan data ke database yg lain, tanpa perlu menggunakan database aspnetdb?

    • Kelihatannya sih gak bisa, karena setahu saya semua code untuk user wizard itu satu paket ama database aspnet membership.

      Saya gak tau bener apa gak, karena saya belum pernah menggunakan user wizard dengan database lain.

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s

%d blogger menyukai ini: