Coding4ever’s Blog

Just coding… coding… and coding… because coding should be fun :)

Membuat User Function Library Pada Crystal Report .NET

| Comments

Crystal Report .NET selain memudahkan kita dalam mendesain report/laporan juga menyediakan puluhan fungsi yang siap pakai (built-in function) yang bisa mempercepat dalam pembuatan report/laporan. Tetapi ada waktunya ketika kita membutuhkan fungsi khusus yang tidak disediakan oleh Crystal Report .NET, dan kabar baiknya Crystal Report .NET juga menyediakan fasilitas untuk membuat fungsi tambahan yang dikenal dengan istilah User Function Library (UFL).

User Function Library (UFL) adalah class library .NET yang dibuat dengan beberapa aturan sebagai berikut :

  1. Nama project harus di beri prefix CRUFL. Misal kita ingin membuat project dengan nama CrystalReportHelper, nama project ini harus kita tambahkan prefix CRUFL, sehingga nama projectnya menjadi CRUFLCrystalReportHelper.
  2. Project harus terdiri dari interface dan class konkret
  3. Setiap interface harus mempunyai attribut COM yang mempunya tiga nilai yaitu ComVisible, InterfaceType dan Guid
  4. Begitu juga class konkret harus mempunyai attribut COM yang mempunya tiga nilai yaitu ComVisible, ClassInterface dan Guid
  5. Mengaktifkan pilihan Register for COM interop (Project -> Properties -> Build)
  6. Menginstall hasil build ke GAC(Global Assembly Cache)

Oke kita langsung saja, kita awali dengan membuat User Function Library Class Library.

Membuat UFL Class Library
  1. Klik menu File ->New -> Project …

  2. Pada dialog New Project aktifkan pilihan Visual C# kemudian pada pilihan Templates pilih Class Library

    Nama project harus diberi prefix CRUFL

  3. Setelah project berhasil dibuat, klik kanan nama project -> properties

  4. Klik tab Build, kemudian aktifkan pilihan Register for COM interop

    Mengaktifkan pilihan Register for COM interop akan menyebabkan assembly secara otomatis diregister oleh utility regasm.exe, ketika project dibuild/compile. Jadi, kita tidak perlu menjalankan regasm.exe secara manual via command prompt.

Setelah project berhasil dibuat, kita akan menambahkan interface dan class konkretnya. Untuk contoh kali ini kita akan membuat fungsi terbilang yang biasanya digunakan dalam pembuatan aplikasi ritel.

Kita akan mulai dengan interface terlebih dulu.

Membuat Interface dengan Attribut COM
  1. Hapus class default (Class1)

  2. Tambahkan sebuah interface dengan nama ITerbilang, kemudian tambahkan juga method abstractnya dengan nama TerbilangIndonesia

  3. Kemudian tambahkan attribut COM

    Attribut COM untuk interface terdiri dari tiga nilai yaitu ComVisible, InterfaceType dan Guid. Attribut ini perlu kita tambahkan agar class library yang kita buat bisa dikenali oleh Crystal Report.

    Untuk mendapatkan nilai GUID, bisa menggunakan tool GUID yang sudah disediakan oleh Visual Studio .NET. Tool ini bisa diaktifkan melalui menu Tools -> Create GUID.

Setelah menyelesaikan pembuatan interface ITerbilang, kita lanjutkan dengan pembuatan class konkretnya.

Membuat Class dengan Attribut COM
  1. Tambahkan sebuah class dengan nama Terbilang. Class harus mengimplementasikan interface ITerbilang.

    Karena class Terbilang mengimplementasikan interface ITerbilang, maka class Terbilang wajib mendefinisikan ulang (override) method TerbilangIndonesia.

  2. Kemudian tambahkan Attribut COM

    Attribut COM untuk class terdiri dari tiga nilai yaitu ComVisible, ClassInterface dan Guid. Setelah itu lengkapi kode method TerbilangIndonesia seperti berikut :

Langkah berikutnya adalah mengeset Strong-Name key, ini adalah peraturan berikutnya yang harus kita ikuti agar class User Function Library (UFL) yang sudah kita buat bisa di daftarkan ke GAC(Global Assembly Cache).

Mengeset Strong-Name key
  1. Klik kanan project -> Properties

  2. Aktifkan tab signing, kemudian aktifkan pilihan Sign the assembly

  3. Pada pilihan combo Choose a string name key file, pilih <New…> setelah itu akan tampil dialog Create Strong Name Key kemudian isikan nilai input key file name, misal dengan nama CRUFLCrystalReportHelperKey.

  4. Terakhir lakukan proses Build/Compile, melalui menu Build -> Build Solution

Mendaftarkan Assembly ke GAC(Global Assembly Cache)

Hasil build/compile dari project CRUFLCrystalReportHelper, akan menghasilkan file dengan ekstensi .dll atau yang dikenal dengan istilah file Assembly. File ini harus kita daftarkan terlebih dulu ke GAC(Global Assembly Cache) agar bisa dikenali oleh Crystal Report.

Berikut langkah-langkah untuk mendaftarkan file Assembly ke GAC(Global Assembly Cache) :

  1. Aktifkan Visual Studio Command Prompt sesuai dengan versi Visual Studio .NET Anda

  2. Gunakan tool gacutil, dengan format perintah seperti berikut

    1
    
    gacutil -if <Assembly Name>

    contoh :

    1
    
    gacutil -if CRUFLCrystalReportHelper.dll

    Jika berhasil akan tampil pesan Assembly successfully added to the cache.

Testing User Function Library

Setelah menyelesaikan project CRUFLCrystalReportHelper dan mendaftarkannya ke GAC(Global Assembly Cache), kita akan menambahkan project baru dengan tipe WinForm Application.

Setelah itu tambahkan juga item Crystal Report.

Kemudian desain reportnya seperti berikut :

Selanjutnya kita akan menambahkan formula baru dengan nama terbilang, caranya dengan mengklik kanan Formula Fields -> New …

Setelah itu akan tampil dialog Formula Workshop

Fungsi terbilang TerbilangIndonesia yang sudah kita buat masuk ke dalam kelompok Additional Functions -> COM and .NET UFLs (u212com.dll). Fungsi ini membutuhkan parameter nominal yang nilainya kita isi dengan field total dari tabel Jual.

Kemudian tambahkan formula terbilang ke dalam report.

Terakhir kita running project, dan lihat hasil dari formula terbilangnya.

Selamat MENCOBA :)

crystal reports .net, visual c#

Tentang Penulis

Software developer yang fokus mengembangkan aplikasi di atas platform .NET (Desktop, ASP.NET MVC, Web Service) dan Android. Senang mempelajari teknologi baru terutama di bidang OOP, Design Pattern, ORM, Database dan Continuous Integration & Deployment.
Saat ini bekerja sebagai staf IT di salah satu PTS di Yogyakarta sebagai senior software developer. Di waktu luang insya Alloh akan terus berbagi pengalaman di blog ini :)

« Unit of Work Pattern Repository Pattern Bagian #2 »

Comments