Project Review
Ada kebutuhan perusahaan untuk mentransfer data dari satu cabang ke cabang lainnya, cabang ke Head Office(HO), ataupun Head Office ke Cabang. nahh aplikasi ini merupakan salah satu alternatif untuk data transfer services tersebut dimana jika cabang membutuhkan update data maka cabang bisa langsung mendownload data dari cabang ataupun HO yang diinginkan. Sebenarnya hal ini bisa dicover melalui aplikasi task scheduler dimana aplikasi tersebut akan mendownload, upload atau transfer data dari cabang ke HO ataupun sebaliknya secara otomatis setiap 5 menit atau sesuai schedule secara otomatis., akan tetapi tentu memiliki effort yang lebih besar mengingat ada puluhan-ratusan cabang seluruh indonesia yang akan menjalankan aplikasi ini setiap menit sehingga aplikasi task schedulling tersebut hanya dijalankan di saat transaksi lainnya tidak dijalankan semisal jam 1 dini hari selain itu custom dan filter data melalui aplikasi ini akan lebih memudahkan user dalam mengelola data. Dan aplikasi data transformation services ini bisa dijalankan ketika user membutuhkan data dengan cara mendownload atau upload data, sehingga tidak mengganggu transaksi data lainnya mengingat beban kerja server.
Adapun struktur dari aplikasi adalah seperti gambar dibawah berikut. dimana data user dan settingan user ada di server yaitu asp web application dan application database. satu cabang(branch) bisa berhubungan dengan cabang lainnya ataupun HO dan begitu juga sebaliknya. Cara kerja dari aplikasi ini adalah dengan cara menfilter data melalui store procedure yang ada di server kemudian data yang telah didapat melalui datatable/dataset akan dimasukkan ke database yang dituju semisal database local yang ada di cabang dengan meneksekusi sp_insert yang telah disediakan di database local/cabang.
Struktur Aplikasi
How To Use
Berikut merupakan tampilan Home dari aplikasi ini. standar lah yya.. :)
Berikut akan dijelaskan langkah – langkah pemakaian aplikasi ini lengkap dengan snapshot gambar dan codenya.
1. Log In
Aplikasi ini sudah terlebih dahulu disetting user admin melalui ASP.Net Configuration Members. sehingga untuk login diawal untuk admin yang ingin mendaftarkan member lainnya bisa login seperti gambar berikut.
2. Post Login
Setelah login admin bisa melihat menu seperti gambar di bawah, di pojok kanan ada welcome message dan kode business unit (BU) yang belum di set. Menu bar sendiri ada set BU, Data Transfer (Download, Upload, Failed Download, Failed Upload), Setup( Users, Register, Business Unit, dan Menu ) dan Change Password. untuk langkah awal admin bisa mendaftarkan user member di sub menu register.
3. Register Member
Jika admin mengklik sub menu register maka akan tampil layar seperti gambar berikut :
Disini admin bisa mendaftarkan user baru dengan mengisi textbox user id, user name, email, password, confirm password dan hak akses apakah dia sebagai admin HO, Branch atau pun None. klik tombol insert untuk memasukkan data, dan apabila ingin mengupdate atau delete user bisa memilih(select) user yang ingin diupdate atau delete datanya. apa perbedaan antara hak akses HO, branch dan None? jika admin memilih radio button Head Office maka user tersebut memiliki akses menu [setup]., jika memilih Radio button Branch, maka user tersebut bisa melihat menu [admin cabang] sedangkan None adalah user biasa tanpa bisa mengakses menu yang bisa diakses oleh HO dan Branch. apa saja fitur dari menu tersebut akan dijelaskan di langkah berikutnya. berikut adalah contoh pengisian inserting data dan code snapshot.
Code Insert :
protected void CreateAccountButton_Click(object sender, EventArgs e) { SqlConnection con = new SqlConnection(GetConnectionString()); string pwd = Password.Text; string pwd2 = Password2.Text; if (pwd == pwd2) { try { MembershipUser newUser = Membership.CreateUser(Username.Text, Password.Text); string newUID = Membership.GetUser(Username.Text).ProviderUserKey.ToString(); SqlCommand cmd = new SqlCommand("spUpdateCreatedUser", con); cmd.Parameters.AddWithValue("@PisAdmin", RadioButton1.Checked ? 1 : 0); cmd.Parameters.AddWithValue("@Pcabang", RadioButton2.Checked ? 1 : 0); cmd.Parameters.AddWithValue("@Pusername2", txtUsername2.Text); cmd.Parameters.AddWithValue("@Pemail", txtEmail.Text); cmd.Parameters.Add("@pnewuid", SqlDbType.UniqueIdentifier).Value = new Guid(newUID); cmd.CommandType = CommandType.StoredProcedure; try { con.Open(); cmd.ExecuteNonQuery(); //ho if (RadioButton1.Checked == true) { SqlCommand cmdcreatemenu = new SqlCommand("update dts_menu set muser=1,mregister=1,mmenu=1,mbusinessunit=1 where userid='" + newUID + "'", con); cmdcreatemenu.CommandType = CommandType.Text; cmdcreatemenu.ExecuteNonQuery(); } //cabang if (RadioButton2.Checked == true) { SqlCommand cmdcreatemenu = new SqlCommand("update dts_menu set musercabang=1,mregistercabang=1,mmenucabang=1 where userid='"+newUID+"'", con); cmdcreatemenu.ExecuteNonQuery(); } con.Close(); this.Populate(); clear(); lblsuccess.Text = " Your account has been successfully created."; lblerror.Text = ""; } catch (Exception ex1) { lblerror.Text = ex1.Message; } } catch (Exception ex1) { lblerror.Text = ex1.Message; } } else { lblerror.Text = "password does not match"; } }
4. Create Business Unit
Untuk membuat Business Unit, admin/user bisa mengakses sub menu [Business Unit]. Kegunaan BU ini adalah untuk mengalokasikan data user, Internet Protokol, dst yang akan saling berhubungan nantinya. misalnya Cabang1 ingin mendownload/upload data dari/ke Cabang2 maka kita akan membuat sebuah BU dimana detail dari BU tersebut terdapat beberapa field yang dibutuhkan untuk menghubungkan data dari satu cabang ke cabang/HO tertentu seperti IP- Address, password, username, nama database dst. nahh di halaman ini kita akan membuat suatu penghubung antara cabang ke cabang, ke HO atau sebaliknya sehingga nantinya user tinggal memilih data dari cabang mana yang hendak ia download.Berikut adalah gambar page yang dimaksud :
Untuk menambahkan data, user bisa langsung menginput data melalui textbox kemudia klik tombol [save] untuk menyimpan. Sedangkan untuk edit dan delete data business unit user bisa langsung mengedit/delete melalui datagrid view yang ada di halaman business unit tersebut.
5. Users
Menu [Users] yang terdapat di submenu [Setup] berfungsi untuk menentukan user boleh memakai BU mana saja., tentunya setelah admin sudah meregister user dan register BU seperti yang sudah dijelaskan pada point sebelumnya.
Untuk memberi hak akses BU kepada user tertentu, maka admin bisa mencentang checklist BU mana saja yang akan diberi akses kemudian [save] untuk menyimpan. untuk menghapus hak akses admin bisa menchecklist data BU dan klik tombol [delete]. status akses itu bisa dilihat di gridview, jika status 0 maka dia tak memiliki hak akses dan jika status nya adalah 1 maka ia memiliki hak akses terhadap BU tersebut. berikut gambar dan code behind nya.
Code Delete :
protected void btndelete_Click(object sender, EventArgs e) { SqlConnection con = new SqlConnection(GetConnectionString()); foreach (GridViewRow row in GvConfig.Rows) { CheckBox chk = (CheckBox)row.FindControl("chkSelect"); if (chk.Checked) { try { SqlCommand SqlComm = new SqlCommand("[DeleteUserConfig]", con); SqlComm.CommandType = CommandType.StoredProcedure; SqlComm.Parameters.Add("@kd_bu", SqlDbType.VarChar).Value = row.Cells[1].Text; SqlComm.Parameters.Add("@user_id", SqlDbType.UniqueIdentifier).Value = new Guid(txtuserid.Text); con.Open(); SqlComm.ExecuteNonQuery(); GetData(); lblerror.Text = ""; } catch (Exception ex2) { lblerror.Text = ex2.Message; } finally { con.Close(); } } } }
6. Menu
Di Menu Setup terdapat submenu [Menu]. Halaman ini berfungsi untuk memberikan hak akses yang lebih spesifik. Misalnya seorang user hanya boleh mengakses menu [Set BU] saja., menu ini sendiri seperti Site Map di sebuah website, jika ingin memberi halaman yang lebih spesifik seperti itu maka admin bisa menyetting hak akses halaman web tertentu tersebut di halaman [Menu]. Checklist halaman web yang akan diberi hak akses kemudian klik tombol [Save]. Berikut adalah tampilan menu dan snapshot code loaded data di gridview.
Code LoadGridView :
private void LoadGridView() { SqlConnection con = new SqlConnection(GetConnectionString()); using (SqlCommand cmd = new SqlCommand("SELECT am.UserName2 [UserName],us.username [nik] from dts_menu dm inner JOIN aspnet_Membership am on am.UserId=dm.UserId INNER JOIN aspnet_Users us ON us.UserId=am.UserId", con)) { DataTable tablemenu1 = new DataTable(); tablemenu1.Columns.Add("NIK"); tablemenu1.Columns.Add("UserName"); using (SqlDataAdapter da = new SqlDataAdapter(cmd)) { try { con.Open(); da.Fill(tablemenu1); GridView1.DataSource = tablemenu1; GridView1.DataBind(); con.Close(); } catch (Exception ex1) { lblerror.Text = ex1.Message; } } } }
7. Admin Cabang
Menu [Admin Cabang] adalah akses yang diberikan kepada admin cabang seluruh indonesia. fungsinya, jika ada user/member baru ingin didaftarkan dan ia merupakan bagian dari anak cabang maka admin cabang bisa menambahkannya tanpa harus menghubungi user admin HO. tentunya admin cabang memiliki hak akses yang lebih sedikit dibanding admin HO. Berikut adalah 3 perbedaan antara admin HO dengan Admin Cabang. 1. Admin cabang hanya bisa mereview user yang telah ia buat “anak cabang” dan admin cabang hanya bisa mereview user yang memakai BU yang sama dengan admin cabang, contoh: jika cabang01 memiliki anak cabang dimana anak cabang ini bisa mengakses BU dengan kode BU001. kemudian cabang02 juga diberi akses kode BU001 oleh admin HO. maka cabang02 bisa mereview anak cabang01. 2. Admin Cabang tidak bisa memberi hak akses admin kepada user baru. user yang dibikin oleh admin cabang otomatis akan menjadi anak dari cabang tersebut. 3. Admin cabang tidak bisa membuat Business Unit.Berikut tampilan Menu Bar dari Admin Cabang :
7 point tersebut merupakan settingan awal dari aplikasi ini. sedangkan [Set BU] dan [Data Transfer](Download, Upload, Failed Download dan Failed Upload) adalah menu utama yang nantinya akan lebih sering digunakan dari Aplikasi Data Transformation Services ini.
8. Set BU
Menu [Set BU] diperlukan oleh user untuk menentukan BU mana yang akan dipakai lengkap dengan status sedang Offline atau Online. Sehingga user bisa mendownload atau mengupload data ke BU yang telah dipilih. Rincian tentang Business Unit sendiri bisa dibaca di point ke-4.
Berikut adalah tampilan halaman [Set BU] dan code selected row :
Berikut adalah tampilan halaman [Set BU] dan code selected row :
Code Selected Row :
protected void gvUser_SelectedIndexChanged(object sender, EventArgs e) { if (GridView1.SelectedIndex >= 0) { int index = GridView1.SelectedIndex; Session["kd_bu"] = GridView1.Rows[index].Cells[1].Text; Session["nm_bu"] = GridView1.Rows[index].Cells[2].Text; Session["db_pusat"] = GridView1.Rows[index].Cells[3].Text; Session["ip_local"] = GridView1.Rows[index].Cells[4].Text; Session["db_local"] = GridView1.Rows[index].Cells[5].Text; Session["usr_local"] = GridView1.Rows[index].Cells[6].Text; Session["pwd_local"] = GridView1.Rows[index].Cells[7].Text; } DataSet dsDTS = new DataSet(); SqlDataAdapter daDTS; SqlConnection con = new SqlConnection(GetConnectionString()); con.Open(); daDTS = new SqlDataAdapter("select ip_pusat, usr_pusat,pwd_pusat from dts_bu where kd_bu='" + Session["kd_bu"] + "'", con); daDTS.Fill(dsDTS, "dts"); DataTable table = new DataTable(); table.Columns.Add("ip_pusat"); table.Columns.Add("usr_pusat"); table.Columns.Add("pwd_pusat"); if (dsDTS.Tables["dts"].Rows.Count > 0) { DataRow dr = dsDTS.Tables["dts"].Rows[0]; Session["ip_pusat"] = dr["ip_pusat"].ToString(); Session["usr_pusat"] = dr["usr_pusat"].ToString(); Session["pwd_pusat"] = dr["pwd_pusat"].ToString(); } Response.Redirect(Request.RawUrl); }
9. Download
[Download] adalah menu user untuk mendownload data dari BU yang telah dipilih sebelumnya di halaman [Set BU]. User bisa memfilter data pada tanggal-tanggal tertentu seperti gambar berikut. setelah memilih tanggal user bisa langsung mengklik tombol download.
Dibawah sub menu [download] terdapat sub menu [failed download]. Apa perbedaan menu download dengan menu failded download? perbedaan nya adalah ketika user mendownload data dari server kemudian ada kendala download data semisal karena jaringan terputus dengan pusat, sebenarnya data dipusat tetap akan tetap diproses karena kemungkinan kegagalan proses data di server akan kecil kemungkinan terjadi karena jaringan di server/pusat pasti akan lebih baik dibanding di wilayah/daerah. nahh jika terjadi kegagalan seperti itu maka user bisa mendownload kembali data tersebut di halaman [failed download]. data log, error juga akan tersimpan di failed download sebelum di perbaiki data errornya semisal store procedure di cabang tidak up to date.
Code Download :
protected void Downloadbtn_Click(object sender, EventArgs e) { SqlConnection con = new SqlConnection(GetConnectionString()); if (Session["kd_bu"] != null) { Pkd_bu = Session["kd_bu"].ToString(); Pnm_bu = Session["nm_bu"].ToString(); Pip_pusat = Session["ip_pusat"].ToString(); Pdb_pusat = Session["db_pusat"].ToString(); Pusr_pusat = Session["usr_pusat"].ToString(); Ppwd_pusat = Session["pwd_pusat"].ToString(); Pip_local = Session["ip_local"].ToString(); Pdb_local = Session["db_local"].ToString(); Pusr_local = Session["usr_local"].ToString(); Ppwd_local = Session["pwd_local"].ToString(); ///get data pusat and fill into dataset/server DataSet ds = new DataSet(); SqlDataAdapter daserver = new SqlDataAdapter(); SqlConnection cn = new SqlConnection(); SqlDataAdapter da = new SqlDataAdapter(); cn.ConnectionString = "Data Source=" + Pip_pusat + ";Initial Catalog=" + Pdb_pusat + ";User Id=" + Pusr_pusat + ";Password=" + Ppwd_pusat + ""; try { cn.Open(); } catch (Exception eg) { Label1.Text = "please check business unit data source = "+Pip_pusat+", user id and password. "+eg.Message; } da.MissingSchemaAction = MissingSchemaAction.AddWithKey; string paramtgl = TextBox1.Text; da.SelectCommand = new SqlCommand("spKamar", cn); da.SelectCommand.CommandType = CommandType.StoredProcedure; da.SelectCommand.Parameters.Add("@tgl", SqlDbType.DateTime, 10).Value = paramtgl; try { da.Fill(ds, "dts_download"); } catch (Exception exconvert) { Label1.Text = exconvert.Message; } ///save to dts_download/temp server DataTable tabledownload = new DataTable(); tabledownload.Columns.Add("kd_bu"); tabledownload.Columns.Add("userid"); tabledownload.Columns.Add("username"); tabledownload.Columns.Add("data"); tabledownload.Columns.Add("status"); tabledownload.Columns.Add("current_date"); tabledownload.Columns.Add("tgl_proses"); if (ds.Tables["dts_download"] != null) { if (ds.Tables["dts_download"].Rows.Count > 0) { foreach (DataTable tab in ds.Tables) { foreach (DataRow row in tab.Rows) { daserver.MissingSchemaAction = MissingSchemaAction.AddWithKey; daserver.InsertCommand = new SqlCommand("[spDaServer]", con); daserver.InsertCommand.CommandType = CommandType.StoredProcedure; DataRow dr = tabledownload.NewRow(); dr["kd_bu"] = Pkd_bu; dr["userid"] = UserID; dr["username"] = PUsername; dr["data"] = row["data"].ToString();//insert is here dr["status"] = 0; dr["current_date"] = DateTime.Today; dr["tgl_proses"] = paramtgl; tabledownload.Rows.Add(dr); daserver.InsertCommand.Parameters.Add("@kd_bu", SqlDbType.VarChar, 20).Value = Pkd_bu; daserver.InsertCommand.Parameters.Add("@user_id", SqlDbType.UniqueIdentifier, 50).Value = new Guid(UserID); daserver.InsertCommand.Parameters.Add("@username", SqlDbType.VarChar, 20).Value = PUsername; daserver.InsertCommand.Parameters.Add("@data", SqlDbType.VarChar, 5000).Value = row["data"].ToString(); daserver.InsertCommand.Parameters.Add("@status", SqlDbType.Int, 10).Value = 0; daserver.InsertCommand.Parameters.Add("@currentdate", SqlDbType.DateTime).Value = DateTime.Today; daserver.InsertCommand.Parameters.Add("@tgl_proses", SqlDbType.DateTime).Value = paramtgl; try { con.Open(); daserver.InsertCommand.ExecuteNonQuery(); } catch (Exception exex) { Label1.Text = exex.Message; } finally { con.Close(); } } } } } ///exec into local SqlDataAdapter daexac = new SqlDataAdapter(); DataSet dsexac = new DataSet(); daexac.MissingSchemaAction = MissingSchemaAction.AddWithKey; daexac.SelectCommand = new SqlCommand("[uspDownload]", con); daexac.SelectCommand.CommandType = CommandType.StoredProcedure; daexac.SelectCommand.Parameters.Add("@kd_bu", SqlDbType.VarChar, 20).Value = Pkd_bu; daexac.SelectCommand.Parameters.Add("@tgl", SqlDbType.DateTime, 10).Value = DateTime.Today; daexac.SelectCommand.Parameters.Add("@puserid", SqlDbType.UniqueIdentifier).Value = new Guid(UserID); try { daexac.Fill(dsexac, "dts_exacdownloaded"); } catch (Exception exconvert) { Label1.Text = exconvert.Message; } DataTable tabledownload2 = new DataTable(); tabledownload2.Columns.Add("sysid"); tabledownload2.Columns.Add("data"); if (dsexac.Tables["dts_exacdownloaded"] != null) { if (dsexac.Tables["dts_exacdownloaded"].Rows.Count > 0) { foreach (DataTable table in dsexac.Tables) { SqlConnection cn2 = new SqlConnection(); cn2.ConnectionString = "Data Source=" + Pip_local + ";Initial Catalog=" + Pdb_local + ";User Id=" + Pusr_local + ";Password=" + Ppwd_local + " "; try { foreach (DataRow row in table.Rows) { var sysid = row["sysid"].ToString(); var execquery = row["data"].ToString(); da.InsertCommand = new SqlCommand("" + execquery + "", cn2); try { cn2.Open(); da.InsertCommand.ExecuteNonQuery(); DataRow dr = tabledownload2.NewRow(); dr["sysid"] = row["sysid"].ToString(); dr["data"] = row["data"].ToString(); tabledownload2.Rows.Add(dr); //update flag con.Open(); SqlCommand cmdupdatef = new SqlCommand("UPDATE dts_download SET status=1 WHERE sysId=" + sysid + "", con); cmdupdatef.ExecuteNonQuery(); //delete server that has exec SqlCommand cmddelf = new SqlCommand("DELETE FROM dts_download WHERE status=1", con); cmddelf.ExecuteNonQuery(); con.Close(); } catch (Exception exn) { Label2.Text = "Message: some query error to exec, " + exn.Message; } finally { cn2.Close(); } } } catch (Exception opc) { Label1.Text = opc.Message; } } DataSet ds2 = new DataSet("dts_download2"); ds2.Tables.Add(tabledownload2); int n1 = ds.Tables["dts_download"].Rows.Count; int n2 = ds2.Tables[0].Rows.Count; Label1.Text = (n2.ToString() + " Data succesfully transfer of " + n1 + " data(s)"); GridView1.DataSource = ds2; GridView1.DataBind(); } else { Label1.Text = "No Data update"; GridView1.DataSource = null; GridView1.DataBind(); } } //update log con.Open(); SqlCommand cmdlog = new SqlCommand("INSERT INTO dts_log VALUES ('" + Pkd_bu + "','" + UserID + "','" + "Error Download" + "',getdate())", con); cmdlog.ExecuteNonQuery(); con.Close(); } else { Label1.Text = "Please set kode business unit"; } }
10. Upload
Menu [Upload] diperlukan untuk user yang ingin mengUpload data dari local db dia ke database pusat/target. akan ada informasi data yang berhasil diupload. jika ada data yang tak berhasil diupload maka user bisa melihat kembali data tersebut di halaman [failed upload], setelah memperbaiki maka user dapat mengupload kembali data tersebut. juga akan ada informasi berapa data yang berhasil di eksekusi dan data yang gagal dieksekusi seperti gambar berikut :
Code Failed Upload :
Code Failed Upload :
protected void btnfailedupload_Click(object sender, EventArgs e) { SqlConnection con = new SqlConnection(GetConnectionString()); if (Session["kd_bu"] != null) { Pkd_bu = Session["kd_bu"].ToString(); Pnm_bu = Session["nm_bu"].ToString(); Pip_pusat = Session["ip_pusat"].ToString(); Pdb_pusat = Session["db_pusat"].ToString(); Pusr_pusat = Session["usr_pusat"].ToString(); Ppwd_pusat = Session["pwd_pusat"].ToString(); Pip_local = Session["ip_local"].ToString(); Pdb_local = Session["db_local"].ToString(); Pusr_local = Session["usr_local"].ToString(); Ppwd_local = Session["pwd_local"].ToString(); //Plast_update = Session["last_update"].ToString(); //get local data and fill into dataset DataSet ds = new DataSet(); SqlConnection cn = new SqlConnection(); SqlDataAdapter daupload = new SqlDataAdapter(); SqlDataAdapter da = new SqlDataAdapter(); ///cn.ConnectionString = "Data Source=" + Pip_local + ";Initial Catalog=" + Pdb_local + ";User Id=" + Pusr_local + ";Password=" + Ppwd_local + " "; try { con.Open(); } catch (Exception eg) { Label1.Text = "please check business unit data source = " + Pip_local + ", user id and password. " + eg.Message; } da.MissingSchemaAction = MissingSchemaAction.AddWithKey; string paramtgl = txtuploadfail.Text; da.SelectCommand = new SqlCommand("[uspUpload]", con); da.SelectCommand.CommandType = CommandType.StoredProcedure; da.SelectCommand.Parameters.Add("@kd_bu", SqlDbType.VarChar, 20).Value = Pkd_bu; da.SelectCommand.Parameters.Add("@tgl", SqlDbType.VarChar, 10).Value = paramtgl; da.SelectCommand.Parameters.Add("@puserid", SqlDbType.UniqueIdentifier).Value = new Guid(UserID); try { da.Fill(ds, "dts_uploadfail"); } catch (Exception exconvert) { Label1.Text = exconvert.Message; } finally { con.Close(); } DataTable tableuploadfail = new DataTable(); tableuploadfail.Columns.Add("sysid"); tableuploadfail.Columns.Add("data"); ///exec into pusat if (ds.Tables["dts_uploadfail"] != null) { if (ds.Tables["dts_uploadfail"].Rows.Count > 0) { foreach (DataTable table in ds.Tables) { SqlConnection cn2 = new SqlConnection(); cn2.ConnectionString = "Data Source=" + Pip_pusat + ";Initial Catalog=" + Pdb_pusat + ";User Id=" + Pusr_pusat + ";Password=" + Ppwd_pusat + " "; try { foreach (DataRow row in table.Rows) { var sysid = row["sysid"].ToString(); var execquery = row["data"].ToString(); da.InsertCommand = new SqlCommand("" + execquery + "", cn2); try { cn2.Open(); da.InsertCommand.ExecuteNonQuery(); DataRow dr = tableuploadfail.NewRow(); dr["sysid"] = row["sysid"].ToString(); dr["data"] = row["data"].ToString(); tableuploadfail.Rows.Add(dr); //update flag con.Open(); SqlCommand cmdupdatef = new SqlCommand("UPDATE dts_upload SET status=1 WHERE sysId=" + sysid + "", con); cmdupdatef.ExecuteNonQuery(); SqlCommand cmddelf = new SqlCommand("DELETE FROM dts_upload WHERE status=1", con); cmddelf.ExecuteNonQuery(); con.Close(); } catch (Exception exn) { Label2.Text = "Message : some query error to exec, " + exn.Message; } finally { cn2.Close(); } } } catch (Exception opc) { Label1.Text = opc.Message; } } DataSet ds2 = new DataSet(); ds2.Tables.Add(tableuploadfail); int n2 = ds2.Tables[0].Rows.Count; int n1 = ds.Tables["dts_uploadfail"].Rows.Count; Label1.Text = (n2.ToString() + " Data succesfully transfer of " + n1 + " data(s)"); GridView1.DataSource = ds2; GridView1.DataBind(); } else { Label1.Text = "No Data update"; GridView1.DataSource = null; GridView1.DataBind(); } } //update log con.Open(); SqlCommand cmdlog = new SqlCommand("INSERT INTO dts_log VALUES ('" + Pkd_bu + "','" + UserID + "','" + "Error Failed Upload" + "',getdate())", con); cmdlog.ExecuteNonQuery(); con.Close(); } else { Label1.Text = "Please set kode business unit"; } }
11. Change Password
Menu [Change Password] bisa diakses semua user setelah login, disini user harus melakukan verifikasi old password kemudian memasukkan password baru.
Secara keseluruhan pengerjaan project ini tidak memakan waktu terlalu lama, kurang dari sebulan akan tetapi kedepan tentu akan ada perubahan atau penambahan2 fitur yang dibutuhkan untuk lebih mempermudah user dalam mengelola data semisal pengelolaan data log dsb. Semoga Aplikasi dan dokumentasi ini bermanfaat buat perusahaan sosro :) dan teman2 juga bisa mereview project ini beserta code behind yang ada. Hubungi Contact jika membutuhkan informasi lebih lanjut. Wassalam..
0 comments:
Post a Comment