Home > .NET Remoting, Visual C# > Pembuatan Aplikasi Client Server dengan Arsitektur 3-tier Part 5

Pembuatan Aplikasi Client Server dengan Arsitektur 3-tier Part 5

May 30, 2012

Sebagai penutup postingan berseri ini kita akan bahas bagaimana membuat report menggunakan data-push reporting model (halah opo meneh iki :D) dengan model ini report yang dibuat tidak langsung mengakses database tetapi cukup dengan memanfaatkan objek DataSet.

Penggunaan model ini sangat pas dan nyambung dengan postingan berseri ini, dimana aplikasi klien akan memanggil sebuah method secara remote menggunakan objek proxy, method ini akan mengambalikan nilai dalam bentuk objek DataSet, dan untungnya DataSet merupakan turunan dari class MarshalByValueComponent sehingga bisa langsung diserialisasikan dari domain aplikasi yang berbeda dalam hal ini dari aplikasi server ke klien.

Untuk contoh report disini sy menggunakan Active Report .NET dan untuk postingan kali ini sy tidak akan membahas secara rinci bagaimana membuat report menggunakan Active Report .NET.

Oke langsung saja kita aktifkan kembali solution SmartLibrary yang di dalamnya sudah ada tiga proyek yaitu SmartLibraryKlien, SmartLibraryServer dan SmartLibraryLib.

Untuk Active Report .NETnya akan kita tambahkan pada proyek SmartLibraryKlien, tapi sebelumnya akan kita tambahkan terlebih dulu sebuah folder dengan nama Report dan sebuah form dengan nama FrmPreview.

Pada FrmPreview ini akan kita tambahkan komponen Active Report .NET Viewer yang berfungsi sebagai container untuk menampung objek dari report Active Report .NET

Kemudian masuk ke editor code FrmPreview dan tambahkan kode berikut

Nah sampai disini kita sudah bisa menambahkan report untuk SmartLibraryKlien, adapun langkah-langkahnya seperti berikut :

1. Aktifkan folder Report, kemudian klik kanan pilih menu Add -> New Item

2. Pilih item ActiveReport 3.0 File dan untuk isian Name diisi dengan ArLapBuku

Nah untuk desain reportnya cukup seperti berikut :

Setelah itu lengkapi kode untuk reportnya seperti berikut :

Yaph sampai disini untuk persiapan reportnya sudah selesai, report ini akan kita panggil dari FrmBuku jadi kita aktifkan terlebih dulu FrmBuku kemudian kita tambahkan satu buah tombol dengan nama btnPreview (Preview).

Adapun untuk kodenya seperti berikut :

pada gambar diatas terlihat objek bukuDao yang merupakan objek proxy memanggil method GetReportAll, ketika sebuah method dipanggil melalui objek proxy maka method tersebut akan dieksekusi di sisi server (SmartLibraryServer), mari kita intip kode methodnya :D.

Halah enggak ada kode yg aneh ternyata πŸ˜€

Method GetReportAll di atas mengembalikan nilai berupa objek DataSet, objek DataSet sendiri merupakan turunan dari objek MarshalByValueComponent sehingga bisa langsung diserialisasi dari satu domain ke domain lain.

Oke sy cukupkan sampai disini, sekarang mari kita lihat demonya πŸ™‚

Selamat MENCOBA πŸ™‚

  1. June 4, 2012 at 1:22 pm

    om, mau tanya lagi nih, kalau bikin report menggunakan teknik ado.net, coding entry-nya seperti ini

    //……………mulai

    MySqlConnection db = new MySqlConnection(connectionSQL);
    db.Open();
    MySqlCommand dbcmd = db.CreateCommand();
    string sql = “insert into tbdata(nama,pekerjaan) values (‘”+textBox1.Text+”‘, ‘”+textBox2.Text+”‘)”;
    dbcmd.CommandText = sql;
    MySqlDataAdapter sqlAdapter = new MySqlDataAdapter(sql, connectionSQL);
    DataSet myDataset = new DataSet();
    sqlAdapter.Fill(myDataset);
    db.Close();
    loadData();

    //……………akhir

    database yang saya gunakan Mysql. mohon pencerahanya. thq

    • June 4, 2012 at 3:56 pm

      Maksudnya gimana nih om ? Reportnya mau ditampilkan ke mana ?

      • June 6, 2012 at 3:22 pm

        di form om, sama seperti report yang ditulis om diatas, tapi saya masih awam tentang c# jadi mu bikin report-nya masih bingung lain halnya dgn VB 6,
        Jadi kalau saya klik tombol preview/dsb nanti akan keluar form report-nya, seperti gambar terakhir(Laporan Data Buku), untuk coding pada tombol previewnnya gimana yah + koneksi ke MySQL-nya. misalkan ingin menampilkan/mencetak semua data, mohon pencerahanya om
        mohon di maklum om, masih newbie c#.

        • June 7, 2012 at 12:47 pm

          Harusnya cukup seperti ini om :

          MySqlConnection db = new MySqlConnection(connectionSQL);
          db.Open();
          MySqlCommand dbcmd = db.CreateCommand();
          string sql = "insert into tbdata(nama,pekerjaan) values ('" + textBox1.Text + "', '" + textBox2.Text + "')";
          dbcmd.CommandText = sql;
          
          MySqlDataAdapter sqlAdapter = new MySqlDataAdapter(sql, connectionSQL);
          DataSet myDataset = new DataSet();
          sqlAdapter.Fill(myDataset, "data");
          
          ArLapData ar = new ArLapData();            
          ar.DataSource = myDataset;
          ar.DataMember = "data";
          ar.Run(false);            
          
          FrmPreview frmPrev = new FrmPreview("Laporan", ar.Document);
          frmPrev.ShowDialog();
          
  2. June 14, 2012 at 10:33 am

    Simple, jelas, padat dan sangat rapi tutorialnya mas… πŸ™‚

    Kalau diperkenankan, mohon segera di posting juga tutorial .NET Entitty Framework nya juga dong khususnya untuk web based application (ASP.NET), karena saya yg masih newbie ini sangat butuh banget pemahaman konsep secara jelas untuk 3-tier architecture, bukankah sekarang udah cloud computing era…

    Jadi saya secara pribadi, menyimak selalu dan memanfaatkan sharing ilmunya..

    Thanks n Good luck. Bravo programming.. πŸ˜€

    • June 14, 2012 at 4:00 pm

      Tq om atas komennya, utk pembahasan .NET Entitty Framewornya kayaxnya bakalan tertunda lama nih karna sy sendiri lebih tertarik mempelajari dan mendalami NHibernate.

  3. Jani Wisma
    June 23, 2012 at 6:37 am

    Bang KOm, mana link downloadtan tsb ?? thank a lot before do it

    • June 23, 2012 at 11:21 am

      Download dulu om samplenya.

  4. July 4, 2012 at 7:08 am

    askum om..maaf pertanyaaannya OOT, saya dibikin tugas bikin backup database dan restore database pake VB.NET.. databasenya SQL server…ada contohnya ga mas? matur suwun πŸ™‚

    • July 6, 2012 at 2:13 pm

      SQL server udah nyediain store procedure utk melakukan ini, untuk contohnya bisa dilihat disini.

  5. October 25, 2012 at 7:24 pm

    om, kalau pakenya vb.net coding untuk classnya gimana yah.. mohon penjelasnya. thk

  6. ahmad
    January 3, 2013 at 9:32 pm

    Om klo mau atur ukuran kertas dan margin gimana thaks

    • January 3, 2013 at 9:48 pm

      Klik menu File -> Page Setup
      Setelah itu tinggal atur posisi marginya.

  7. ahmad
    January 4, 2013 at 2:03 pm

    Om klo VS 2010 ga bisa di klik –> Page Setup nya..

    • January 4, 2013 at 2:32 pm

      Active Report .NET klo enggak salah udah enggak disupport di VS 2010.

      Nah pertanyaan si om, report disini AR .NET tau CR ?

  8. ahmad
    January 4, 2013 at 2:51 pm

    aku pake VS 2010 AR.Net 6

    • January 5, 2013 at 8:45 am

      Nah masalah sy belum punya AR .NET 6 om, kecuali klo om berbaik hati mengemailkan ke saya πŸ˜€

  9. ahmad
    January 4, 2013 at 6:27 pm

    Om sekalian dong klo GetReportByName gimana code nya ?

    • January 5, 2013 at 8:51 am

      Kan kodenya sama persis seperti method GetReportAll, bedanya hanya diquerynya saja :

      strSql = "SELECT isbn, judul, nama AS penerbit " +
               "FROM buku INNER JOIN penerbit ON buku.penerbit_id = penerbit.id " +
               "ORDER BY judul";
      

      Menjadi

      strSql = "SELECT isbn, judul, nama AS penerbit " +
               "FROM buku INNER JOIN penerbit ON buku.penerbit_id = penerbit.id " +
               "WHERE judul LIKE '%" + judul + "%' " +
               "ORDER BY judul";
      
  10. January 5, 2013 at 12:28 am

    om, saya mau buat report menggunakan VB.Net 08/10, tapi kenapa yah..setiap bikin report VS nya selalu crash, mohon pencerahanya. thk

    • January 5, 2013 at 8:43 am

      Emg om pake report yg mana AR, CR atau ReportViewer ?

      • January 6, 2013 at 8:17 am

        pake report viewr, tapi melibatkan CR dalam desainya,

        • January 6, 2013 at 10:55 am

          Klo report viewer dan CR sy belum pernah pake om jadi belum bisa bantu nih πŸ˜€

          • January 6, 2013 at 5:32 pm

            ok dh, g p2,, thk om yh..

            • January 6, 2013 at 5:40 pm

              om, ada referensi AR di vb.net ?? googling kebanyakan vb.6,

              • January 6, 2013 at 8:57 pm

                Ngapain om, pusing2x googling, tinggal install aja ARnya disitu udah disertakan file help dan sample projectnya.

  11. ahmad
    January 5, 2013 at 7:49 pm

    Ok om makasih .. dan buat AR.Net 6 bisa setting margin dll di menu Report > setting

  12. ahmad
    January 6, 2013 at 10:09 am

    Om klo mau email AR.Net 6 minta alamat emailnya .. oh sekalian om code di button preview untuk getrepotbyname nya gimana ? aku mau tampilin dr listview

    • January 6, 2013 at 11:05 am

      Di email kesini aja : k4m4r82@gmail.com

      Pertama lengkapi dulu kode untuk method GetReportByName yg ada di class BukuDao

      public DataSet GetReportByName(string judul)
      {
          Console.WriteLine("Method GetReportByName dieksekusi di sisi server");
      
          strSql = "SELECT isbn, judul, nama AS penerbit " +
                   "FROM buku INNER JOIN penerbit ON buku.penerbit_id = penerbit.id " +
                   "WHERE judul LIKE '%" + judul + "%' " +
                   "ORDER BY judul";
      
          OleDbDataAdapter da = new OleDbDataAdapter();
          da.SelectCommand = new OleDbCommand(strSql, conn);
      
          DataSet ds = new DataSet();
          da.Fill(ds, "buku");
      
          return ds;
      }
      

      Untuk tombol Previewnya seperti berikut :

      private void btnPreview_Click(object sender, EventArgs e)
      {
          Cursor.Current = Cursors.WaitCursor;
      
          ArLapBuku ar = new ArLapBuku();
          DataSet ds = bukuDao.GetReportByName(txtJudul.Text);
          ar.DataSource = ds;
          ar.DataMember = "buku";
          ar.Run(false);
      
          FrmPreview frmPrev = new FrmPreview("Laporan Data Buku", ar.Document);
          frmPrev.ShowDialog();
      
          Cursor.Current = Cursors.Default;        
      }
      
  13. ahmad
    January 6, 2013 at 12:38 pm

    Ok om makasih, dan klo boleh nanya lg cara untuk input / save data lngsung utk dua tabel sekaligus . misal utk tblsiswa ( id_siswa , nama_siswa) dan tblkelas ( id_siswa, nama_siswa)

    • January 6, 2013 at 9:00 pm

      Ya tinggal eksekusi 2x, tetapi ada database yg mendukung eksekusi multi query dg pemisah tanda ;
      Contoh :

      sql = "insert into tblsiswa ( id_siswa , nama_siswa) values (1, 'joko'); insert into tblkelas ( id_siswa, id_kelas) values (1, 10)"
      
  14. ahmad
    January 6, 2013 at 9:48 pm

    Maaf om ga bisa di kirim lewat email.
    http://www.4shared.com/zip/HdyZrx7d/ar6_623681.html coba mampir ke sini om

  15. ahmad
    January 6, 2013 at 11:01 pm

    Aku pake mysql bisa ga multi query om

    • January 7, 2013 at 4:30 am

      Kayaxnya sih bs om, di coba aja πŸ˜€

  16. ahmad
    January 7, 2013 at 9:51 pm

    Iya om dah di coba dan bisa . klo dari 2 table ato lebih gimana ?

    • January 8, 2013 at 9:19 am

      Klo 2 tabel yg dieksekusi 2x

  17. ahmad
    January 8, 2013 at 11:11 pm

    Maksudnya klo buat report dari 2 tabel om

    • January 9, 2013 at 4:55 am

      Emg pengen buar report seperti apa om?

  18. ahmad
    January 16, 2013 at 11:54 am

    om klo mau nampilin report yg kita ceklist di listview gimana ?

  19. ahmad
    January 16, 2013 at 12:00 pm

    ListView.CheckedListViewItemCollection itemcheked = lvTki.CheckedItems;

    foreach (ListViewItem itemRow in itemcheked)
    {

    string idTki = itemRow.SubItems[1].Text;

    ArRekom ar = new ArRekom();
    DataSet ds = permohonanDao.GetReportById(idTki);
    ar.DataSource = ds;
    ar.DataMember = “tbrekpaspor”;
    ar.Run(false);

    RekPaspor frm = new RekPaspor(“RekPaspor”, ar.Document);
    frm.ShowDialog();
    }

    aku pake kode seperti ini yg tampil satu-satu

    • January 16, 2013 at 1:43 pm

      Coba sy pengen tau dulu kode dari method GetReportById

  20. ahmad
    January 16, 2013 at 1:48 pm

    strSql = “SELECT id_tki, nama_tki, jenis_kelamin, tempat_lahir, tgl_lahir, alamat, tujuan, agency, skill, sektor ” +
    “FROM tbrekpaspor ” +
    “WHERE id_tki LIKE ‘%” + IdTki + “%’ ” +
    “ORDER BY id_tki “;
    MySqlDataAdapter da = new MySqlDataAdapter();
    da.SelectCommand = new MySqlCommand(strSql, Conn);

    DataSet ds = new DataSet();
    da.Fill(ds, “tbrekpaspor”);

    return ds;

    Begini om

    • January 16, 2013 at 2:03 pm

      Jadi intinya ingin menampilkan nama-nama tiki yg dipilih dalam satu report ? Klo memang iya kayaxnya ada yg salah dengan querynya.

  21. ahmad
    January 16, 2013 at 2:13 pm

    Iya om begitu , jadi kita mau nampilin yg di cheklist di listview aja

    • January 16, 2013 at 2:36 pm

      Pertama ganti dulu query yg ada di method GetReportById :

      strSql = "SELECT id_tki, nama_tki, jenis_kelamin, tempat_lahir, tgl_lahir, alamat, tujuan, agency, skill, sektor " +
               "FROM tbrekpaspor " +
               "WHERE id_tki IN (" + IdTki + ") " +
               "ORDER BY id_tki ";
      

      Setelah itu baru lakukan revisi pada saat pemanggilan reportnya :

      StringBuilder sb = new StringBuilder();
      
      ListView.CheckedListViewItemCollection itemcheked = lvTki.CheckedItems;
      
      foreach (ListViewItem itemRow in itemcheked)
      {
          string idTki = itemRow.SubItems[1].Text;
          sb.Append("'").Append(idTki).Append("',");
      }
      
      string daftarTiki = string.Empty;
      if (sb.Length > 0) daftarTiki = sb.ToString().Substring(0, sb.Length - 1);
                 
      ArRekom ar = new ArRekom();
      DataSet ds = permohonanDao.GetReportById(daftarTiki);
      ar.DataSource = ds;
      ar.DataMember = "tbrekpaspor";
      ar.Run(false);
      
      RekPaspor frm = new RekPaspor("RekPaspor", ar.Document);
      frm.ShowDialog();
      

      variabel sb dengan tipe StringBuilder digunakan untuk menampung idtiki yang dipilih.

  22. ahmad
    January 16, 2013 at 3:50 pm

    Ok om thanks

    • January 16, 2013 at 5:58 pm

      yuph sama2x

  23. Kamil
    January 19, 2013 at 5:28 pm

    Om klo ngambil value dari listview tuk disimpan di database gimana ?

    • January 19, 2013 at 8:12 pm

      Untuk ngambil valuenya cukup seperti ini om :

      Dim i           As Integer
      
      For i = 1 To ListView1.ListItems.Count
          Debug.Print ListView1.ListItems(i).Text ' kolom 0
          Debug.Print ListView1.ListItems(i).SubItems(1) ' kolom 1
          Debug.Print ListView1.ListItems(i).SubItems(2) ' kolom 2
      Next i
      
  24. Kamil
    January 19, 2013 at 10:01 pm

    itu sama buat C# ato VB6 om ?

    • January 20, 2013 at 2:50 pm

      Klo C# ya lebih kurang om

      for (int i = 0; i < listView1.Items.Count; i++)
      {
          ListViewItem itemRow = listView1.Items[i];
      
          System.Diagnostics.Debug.Print(itemRow.SubItems[0].Text); // kolom 1
          System.Diagnostics.Debug.Print(itemRow.SubItems[1].Text); // kolom 2
          System.Diagnostics.Debug.Print(itemRow.SubItems[2].Text); // kolom 3
      
      }
      
  25. Kamil
    January 21, 2013 at 11:44 pm

    Om masih bingung nih cara simpan data ke database yg di checklist di listview ?

    • January 22, 2013 at 8:37 am

      Klo cuma mau ngambil nilai yg pilih, gunakan kode berikut om :

      foreach (ListViewItem itemRow in listView1.CheckedItems)
      {
          string nilai1 = itemRow.SubItems[0].Text; // kolom 1
          string nilai2 = itemRow.SubItems[1].Text; // kolom 2
      
          // TODO : INSERT INTO tabel (kolom1, kolom2) VALUES (nilai1, nilai2)
      }
      
  26. Kamil
    January 23, 2013 at 11:50 pm

    Om klo mau nambahkan control seperti button di listview C# gimana ?

    • January 24, 2013 at 4:36 pm

      Gampang om, coba kesini.

  27. Faizi
    February 10, 2013 at 8:53 pm

    om ada active report Net 3 ga. aku download dari link punya om file currot

    • February 11, 2013 at 5:38 am

      Dicoba lagi aja om

  28. Faizi
    February 11, 2013 at 8:20 am

    udah di download ulang tp tetap hasil nya currop om .. mungkin ada link yg lain

    • February 11, 2013 at 9:42 am

      Sy enggak punya link lain om, linknya juga udah sy coba download dan hasil ekstraknya enggak ada masalah

  29. fajar
    March 20, 2013 at 9:19 am

    om…kalo saya pake http kok muncul ini ya ? ” Soap Serializer does not support serializing Generic Types : System.Collections.Generic.List……dst”. apa di net 2.0 ke atas dah g support lagi ya buat soapformaternya?

    terima kasih

    • March 20, 2013 at 10:13 am

      Emg di bagian kode yg mana om errornya, coba diganti menggunakan array.

      Klo pake tcp error enggak ?

  30. fajar
    March 20, 2013 at 11:54 am

    kalo pake tcp g error.
    saya pernah coba ambil data. interface nya saya buat dataset (g pake serializable sperti contoh si om). kemudian interface nya saya implement aja di class yang akan saya jadiin service. hasilnya pake tcp atau http bisa.

  31. fajar
    March 20, 2013 at 11:56 am

    kira kira sperti ini om…..


    Imports [Lib]
    Imports MySql.Data.MySqlClient

    Public Class cDao

    Inherits MarshalByRefObject
    Implements LibInterface

    Public Function TampilSemua() As System.Data.DataSet Implements [Lib].LibInterface.TampilSemua

    Dim SQL As String
    Dim Conn As New MySqlConnection("constring")
    Dim DtAdapter As New MySqlDataAdapte
    Dim oCOm As New MySqlCommand

    TampilSemua = New DataSet

    SQL = "SELECT * FROM DATAXX"

    Conn.Open()

    oCOm = New MySqlCommand(SQL, Conn)
    DtAdapter = New MySqlDataAdapter(oCOm)
    DtAdapter.Fill(TampilSemua, "XX")

    Conn.Close()

    Return TampilSemua
    End Function

    End Class...

    • March 20, 2013 at 12:44 pm

      trus kode yg error di baris yg mana om ?

  32. fajar
    March 20, 2013 at 1:48 pm

    kode itu (yg diatas) yang saya coba sendiri om.
    pake http apa tcp g masalah

    kalo yang error ini. saya coba buatan persis kayak punya si om

    Private CC As DTOCostCenter = Nothing

    Private Sub frmTestCostCenter_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

    InisialisasiListView()

    Dim server As String = “localhost”
    Dim port As String = “1234”
    Dim uri As String = “CostCenterService”

    Dim url As String = “http://” & server & “:” & port & “/” & uri

    CC = CType(Activator.GetObject(GetType(DTOCostCenter), url), DTOCostCenter)

    loaddata()

    End Sub

    di loaddata, itu sama persis dengan contohnya dari si om. jadi waktu formnya mau ditampilkan. muncul error ” Soap Serializer does not support serializing Generic Types : System.Collections.Generic.List`1[DataComponent.DataModel.mCostCenter]. dst”

    kalo g ganggu mungkin saya email aja om kalo boleh…
    biar lengkap kodenya
    hehehehe……..

    contoh yang om kasih (saya coba di vb.net) kalo saya ganti http. form klien malah g tampil om.

    Terima kasih

  33. March 20, 2013 at 1:52 pm

    Masalah emailnya entar aj om, sy ingin liat kode dari method loaddatanya.

  34. fajar
    March 20, 2013 at 2:51 pm
    • March 20, 2013 at 3:10 pm

      Oke klo memang enggak disupport ya pake cara lain, misal objek yg ditransfer berupa array

  35. April 3, 2013 at 7:12 am

    Om klo mau export report ke PDF gimana ?

    • April 10, 2013 at 4:16 pm

      Gimana om ? Udah bisa belum πŸ˜€

  36. August 30, 2013 at 5:14 am

    mas bro..sy tertarik dgn cara pembuatan aplikasi client servernya.
    klo sy belajar full total da penerimaan ga’
    sy tunggu di email sy: adrenalin_id@yahoo.com

    • September 3, 2013 at 8:52 am

      Ya udah tinggal pelajari aja semua postingan sy yg berhubungan dg “cara pembuatan aplikasi client server”

  37. pajatuw
    May 6, 2014 at 9:40 am

    Om, sekalian dibuatkan step build & deploy aplikasinya utk server dan client, so berlanjut ke “part 6” gitu…..

    • May 8, 2014 at 9:14 am

      Yah kapan-kapan, tapi kayaxnya lebih seru membahas teknologi penerus .NET Remoting.

      Insya Alloh klo ada waktu saya akan menulis ulang artikel “Pembuatan Aplikasi Client Server dengan Arsitektur 3-tier” menggunakan WCF.

  1. April 16, 2014 at 9:14 am
Comments are closed.