Thursday, February 25, 2016

Custome-papersize pada crystal report dengan VB.NET

Ketika saya sedang membuat sebuah system aplikasi untuk seorang client. Pada system ini terdapat print out yang menggunakan kertas custom. Ukuran kertasnya width=21.49 cm, height:14cm dan saya beri nama kertas ini “wo”.

Report yang digunakan adalah crystal report dan ketika ditest dikomputer saya semua ok, hasil print out sesuai dengan keinginan. Tetapi ketika aplikasi dipasang dikomputer client, hasil print out selalu menggunakan kertas default yaitu ukuran “letter”. Hal ini bisa berubah ke ukuran kertas “wo” jika saya compile ulang aplikasinya dikomputer yang terhubung dengan printer client.

Setelah melakukan study literatur selama kurang lebih satu minggu akhirnya ditemukan solusi yang sangat bagus.

Ternyata Crystal report  menyimpan informasi format kertas yang digunakan oleh report dengan cara yang tidak portable. Dia menyimpan ID dari format kertas tersebut bukan namanya. Jadi jika dilihat dari kasus saya maka crystal report menyimpan ID dari format “wo”, bukan namanya. Masalahnya ID ini di windows tergantung dari komputernya, jadi format kertas “wo” akan memiliki ID yang berbeda dikomputer yang berbeda.

Solusinya cukup sederhana:
11. Cari pada sistem printer yang ingin Anda gunakan. Dalam kasus ini, saya menggunakan default printer.
22.  Cari ID format yang dimaksud berdasarkan nama format. Dalam hal ini saya mencari ID untuk format “wo”
33.  Setelah mendapatkan ID, tentukan PaperSize property dari report. Diarahkan ke ID format tadi.

Berikut contoh script yang dapat saya gunakan.

Mencari printer default:
       Dim objSettings As New PrinterSettings
        Dim strPrinter As String
        Try
            For Each strPrinter In PrinterSettings.InstalledPrinters
                objSettings.PrinterName = strPrinter
                If objSettings.IsDefaultPrinter Then
                    Me.T_printer.Text = strPrinter
                End If
            Next
        Catch ex As Exception
            MsgBox(ex.Message)
        End Try

Mencari ID kertas dengan nama  “wo”
       Dim doctoprint As New System.Drawing.Printing.PrintDocument()
        doctoprint.PrinterSettings.PrinterName = Me.T_printer.Text
        For i = 0 To doctoprint.PrinterSettings.PaperSizes.Count - 1
            Dim rawKind As Integer
            If doctoprint.PrinterSettings.PaperSizes(i).PaperName = "WO" Then
                rawKind = CInt(doctoprint.PrinterSettings.PaperSizes(i).GetType().GetField("kind", Reflection.BindingFlags.Instance Or Reflection.BindingFlags.NonPublic).GetValue(doctoprint.PrinterSettings.PaperSizes(i)))
                Me.T_rawkind.Text = rawKind
                Exit For
            End If
        Next

Menentukan ukuran kertas yang akan digunakan oleh report (crystal report)
mReport = New ReportDocument()

mReport.PrintOptions.PaperSize = T_rawkind.Text

Tuesday, February 16, 2016

Textbox yang read only (vb.net serial)

Beberapa waktu lalu saya membuat aplikasi dengan menggunakan vb.net dan ketika aplikasi di test oleh user. User menginginkan agar warna angka pada textbox yang readonly diberi warna merah.
Dan saya sampaikan ok… tidak masalah.

Kemudian saya merubah properti textbox tersebut, yaitu merubah forecolor menjadi warna merah. Dan ketika ditest ternyata forecolor tidak berubah ketika textbox sedang dalam kondisi readonly.  Saya menambahkan script merubah forecolor ketika textbox diset readonly. Tetapi hasilnya warna angka tidak berubah.

Akhirnya saya searching dan menemukan kenyataan bahwa banyak programmer menghadapi masalah yang sama. Penjelasannya kenapa hal ini terjadi adalah secara default, jika kita tidak menentukan BackColor, dan mengatur kontrol untuk readonly, itu menggunakan "Enabled == false" untuk menggambar ulang kontrol. Secara pribadi, saya pikir ini adalah bug.

Jadi solusi untuk masalah ini adalah kita harus tentukan backcolor secara script kemudian tentukan forecolor secara script. Hal ini akan menyebabkan properti kontrol yang di-readonly-kan akan di gambar ulang.

Contoh scripnya:
Me.TextBox8.ForeColor = Color.Red
Me.TextBox8.BackColor = Color.White



Selamat Mencoba

Friday, February 12, 2016

Sorting Data On The Client

Katakanlah Anda menggunakan Dot Net untuk berinteraksi dengan database SQL Anda. Anda ingin mendapatkan data yang sudah diurutkan dari database Anda. Tapi, Anda ingin beban pekerjaannya terjadi tingkat menengah Anda, dengan maksud untuk mengurangi beban pada server database Anda. apa pilihan yang tersedia untuk Anda pada saat ini?

Ada banyak cara yang berbeda untuk berbicara dengan SQL Server di Dot Net. Mereka semua didasarkan pada protokol komunikasi Dot Net seperti ODBC, atau ADO.Net menggunakan System.Data.SqlClient. Terlepas dari protokol komunikasi, data dikembalikan ke kode Anda dalam bentuk System.DataTable, atau, jika lebih dari satu tabel, itu dikembalikan dalam System.DataSet (Catatan: Anda dapat memiliki dataset dengan hanya satu tabel) .

Kelas DataTable sudah memiliki cara melakukan filter dan sort (pengurutan). Lihat metode DataTable.Select (). Hal ini memungkinkan Anda untuk memberikan dua string sebagai parameter dalam memilih metode. Parameter pertama adalah filter, dan yang kedua adalah sort. Filter teks terlihat sangat banyak seperti klausa WHERE untuk sintaks SQL, Dalam metode ini tanpa kata WHERE. Dalam cara yang sama, seperti ORDER BY klausa untuk SQL dan tanpa kunci frase ORDER BY dalam kelas DataTable .

Sorting dengan cara ini mengembalikan array System.Data.DataRow, disaring, dan diurutkan sesuai dengan kebutuhan Anda. Tergantung pada ukuran set Anda, ini dapat bekerja untuk Anda.

Lebih menarik lagi, dan lebih modern, metode lain adalah dengan menggunakan Linq dalam bentuk Linq To SQL atau Entity Framework. Kerangka entitas ini lebih disukai karena bekerja dengan Kelas Dot Net. Semua ini untuk mengumpulkan data dari database dan dibangun ke Entity Framework. Kita hanya mendapatkan satu set. Kemudian, dengan set tersebut, kita bisa mengurutkan menggunakan Linq .OrderBy atau .OrderByDescending metode. Apa yang baik tentang menggunakan Linq adalah bahwa hal itu akan melakukan sort  melalui SQL Server jika itu adalah tempat yang lebih baik.

Jika kita menggunakan Transfer Data Objects (DTO) yang terdiri dari kelas sederhana yang hanya berisi properti, yang dapat dengan mudah diubah menjadi objek JSON untuk transportasi dalam layanan RESTful, kita bisa menggabungkan kode untuk menghasilkan DTO dan mengurutkan data ke dalam satu pernyataan LINQ.

Kedua pilihan ini mengambil beban dari database server Anda dan memindahkannya ke tingkat lain. Hal ini menguntungkan di lingkungan-lingkungan di mana aplikasi Anda mungkin perlu dikembangkan segera, atau untuk masa depan. Database Anda tidak dapat dikembangkan dengan mudah. Tapi, konsumen Anda lebih siap untuk dilakukan perubahan. Jadi, kita menempatkan beban di sana. Menggunakan alat bantu seperti Linq, itu adalah jauh lebih mudah untuk menyortir pada klien, terutama menggunakan kriteria berbeda.

Disadur dari http://www.sswug.org/bentaylor/editorials/sorting-data-on-the-client/ February 3, 2016 12:00 am, penulis Ben Taylor