sonny210183

See also: Other Geeks@INDC

Isu-Isu Winform App dan Tips Mengatasinya

Desktop based application adalah suatu aplikasi yang dapat berjalan sendiri atau independen tanpa menggunakan browser atau koneksi Internet di suatu komputer otonom, dengan operating system atau platfom tertentu. Contoh: Microsoft Office Word 2007 dan aplikasi office lainnya, Windows Media Player, dll.
Keunggulan desktop based application dibandingkan dengan web based application adalah:
Dapat berjalan dengan independen, tanpa perlu menggunakan browser.
Tidak perlu koneksi Internet, karena semua file yang diperlukan untuk menjalankan aplikasinya sudah terinstall sebelumnya.
Dapat dengan mudah memodifikasi settingannya.
Prosesnya lebih cepat.
Desktop Application adalah pilihan yang tepat untuk pengguna yang ingin bekerja dengan interaksi antar mesin dengan response time cepat yang dapat membuat pengguna nyaman dalam menggunakan system itu. Dalam mengembangkan Desktop Application, terutama yang berbasis Client-Server, ada sejumlah isu yang perlu diperhatikan. Yaitu:
Culture
Culture berhubungan dengan pengaturan Regional Settings pada suatu komputer. Aplikasi desktop berbeda dengan aplikasi web, Culture pada aplikasi web mengikuti Culture yang ada pada server apapun Culture dari client-nya. Misalkan ada server X menggunakan Culture English (US), kemudian ada client bernama A dengan Culture=Indonesia, client B = Arabic (Saudi Arabia), client C = French (Perancis). Pada aplikasi web, client A, B dan C akan tetap menggunakan Culture English (US), tetapi pada Desktop Application secara default akan menggunakan Culture dari client. Akibat perbedaan Culture ini, maka hasil komputasi/operasi dari aplikasi akan menjadi salah, kacau atau bahkan fatal.
Ada dua hal yang sering digunakan berhubungan dengan Culture, yaitu:
Penanggalan: sistem penanggalan pada tiap Cultur dapat saja sama, tetapi dapat juga berbeda. Sistem penanggalan US English menggunakan format mm/dd/yyyy, pada Indonesia=dd/mm/yyyy, pada Saudi Arabia menggunakan dd/mm/yyyy. Sistem penanggalan Saudi Arabia menggunakan kalender Qomariah dengan jumlah hari=354, berbeda dengan kalender Masehi yang secara umum digunakan orang di dunia. Nama bulan di kalender Qomariah bukan menggunakan Januari – Desember, tetapi Muharam – Dzulhijah, tahun 2009 di Masehi tidak sama dengan tahun 2009 di Qomariah. Tahun 2009 di Masehi sekarang ekivalen dengan tahun 1430 di Qomariah. Ada sebuah tanggal tertulis “01/02/2009”, pada Indonesia dikenal sebagai 1 Februari 2009, pada English US menjadi 2 Januari 2009, pada Arab Saudi dikenal sebagai 1 Shafar 2009 (di Masehi ekivalen dengan tanggal 1 November 2570).
Currency: sistem currency format pada tiap Cultur dapat saja sama, tetapi dapat juga berbeda.Untuk US English, karakter pemisah ribuan menggunakan koma dan karakter decimal menggunakan titik; sedangkan pada Indonesia adalah kebalikannya. Misalnya ada suatu angka tertulis “2.500”, pada US English dikenal sebagai dua setengah, sedangkan pada Indonesia dikenal sebagai dua ribu lima ratus.
Dengan perbedaan Culture tersebut, maka akan mempengaruhi hasil komputasi. Contohnya adalah program untuk menghitung jumlah sewa barang dengan memasukkan tanggal. Jika biaya sewa perhari adalah 5000 (limaribu) per hari untuk tiap item. Input “10/02/2009” sebagai awal sewa dan “12/02/2009” sebagai tanggal pengembalian sewa, untuk biaya sewa diformat dengan “5.000”. Antara Culture US English dengan Indonesia akan memiliki hasil yang berbeda, pada US English dianggap sebagai 2 bulan (31+30 hari=61 hari, angka dianggap sebagai lima. Biaya = 5x61 = 305), sedangkan pada Indonesia dianggap sebagai 2 hari=5000x2=10000. Dapat dibayangkan bahwa perusahaan yang menggunakan aplikasi tersebut akan merugi, seharusnya dibayarkan 10000 per item, tetapi hanya 305 yang dibayarkan.
Suatu aplikasi dapat men-trigger suatu action tergantung dari tanggal. Contoh aplikasinya adalah notifikasi/reminder dari suatu penagihan, kontrak habis, janji dengan client. Ada suatu eksekutif memiliki janji dengan client pada tanggal yang tertulis “12/05/2009”, pada Culture Indonesia dikenali sebagai 12 Mei 2009, sedangkan pada US English dikenali sebagai 5 Desember 2009.Jika penanggalan kacau, maka seorang eksekutif akan telat bertemu dengan client karena tidak ada notifikasi/reminder tersebut.
Aplikasi yang digunakan oleh client harus ditetapkan Culture dasar yang akan digunakan agar setiap client menjadi seragam. Ada control tertentu yang tidak terpengaruh oleh Culture global yang telah ditetapkan aplikasi, yaitu DateTimePicker. Culture asal pada client harus disimpan terlebih dahulu di suatu variable global, kemudian dapat mengubah Culture dari aplikasi tersebut. Kode-nya adalah sebagai berikut pada Program.cs, anggap lah Culture dasar yang digunakan adalah US English.

using System;
using System.Collections.Generic;
using System.Windows.Forms;

namespace XXXApp_UI
{
    static class Program
    {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main()
        {
            System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("en-US");

            System.Globalization.CultureInfo cultureInfo = new System.Globalization.CultureInfo("en-US");

            Global.kulturasal = System.Threading.Thread.CurrentThread.CurrentCulture; //Culture dari client disimpan di suatu variable global bernama Global.kulturasal
            
            cultureInfo.DateTimeFormat.ShortDatePattern = "dd-MMM-yyyy"; //penetapan format tanggal untuk shortdate
            Application.CurrentCulture = cultureInfo; //assignment Culture ke aplikasi yang sedang berjalan
            
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new frmMain());
        }
    }
}
Culture UI yang terdisplay pada DateTimePicker akan menggunakan Culture dari PC Client, untuk mengkonversi ke tanggal yang ekivalen maka caranya adalah:
DateTime tanggalku = Convert.toDateTime(dateTimePicker1.Text, Global.kulturasal)”;
Pewaktuan
Tanggal dan jam yang tertera pada komputer client dapat berbeda-beda, mungkin selisih beberapa menit atau beberapa detik. Suatu aplikasi dapat membutuhkan pewaktuan untuk men-trigger suatu aksi tertentu, tidak hanya baca dari tanggal saja, tetapi juga dari jam/menit/detik. Pengguna aplikasi dapat saja iseng mengubah tanggal di komputernya agar aplikasinya dapat mengeluarkan suatu aksi tertentu atau sistem penanggalan di komputer client dapat saja kacau karena komputer habis diformat atau batere BIOS/laptop diganti. Ketidakseragaman waktu dapat menyebabkan suatu aplikasi kacau. Untuk aplikasi web, biasanya sistem pewaktuan mengikuti tanggal server tetapi untuk aplikasi desktop secara default mengambil tanggal dari client.
Untuk mengatasi masalah pewaktuan agar seragam, maka tanggal yang dijadikan patokan adalah tanggal dari server. Statement yang mengembalikan hasil berupa waktu hari ini biasa digunakan “DateTime tanggal = DateTime.Now”. Statement tersebut seharusnya diganti dengan query basisdata yang mengembalikan tanggal dari server. Pada SQL Server yaitu dengan perintah “getDate()”. Hasil query ditampung di suatu variable bertipe DateTime.
private DateTime getTanggalServer() {
String sql="getDate()";
DateTime tanggal = eksekusiQueryScalar(sql); //fungsi eksekusiQueryScalar dapat disesuaikan sendiri oleh programmer
return tanggal;
}
Pernyataan
DateTime tanggal = DateTime.Now;
diubah menjadi
DateTime tanggal = getTanggalServer();

Sistem Variabel Global
Aplikasi web memiliki yang disebut Cookies atau Session untuk menyimpan suatu variable yang dapat dikenali umum di semua form. Untuk aplikasi desktop menggunakan yang disebut variable Global, caranya yaitu dengan membuat sebuah kelas yang terdapat variable yang bersifat public dan static. Selama program itu masih hidup, variable global akan tetap terjaga.

Contoh:
public static String username;
Dari kelas/form lain dapat memanggil variable itu atau memodifikasi nilai variable username
Form A
Global.username = “Sonny”;
//kemudian panggil form B

Form B
Label1.Text = Global.username; //yang terdisplay di label adalah “Sonny”
If (Global.username == “Sonny”) {
//boleh buka form C
}
else
{
//tidak boleh buka form C
}
Share this post: | | | |

Comments

No Comments