Minggu, 27 Maret 2016

Membuat User Function Library Pada Crystal Report .NET

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 :

view raw Terbilang.cs hosted with ❤ by GitHub
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
contoh :



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 :)
[ComVisible(true), ClassInterface(ClassInterfaceType.None), Guid("BA626A6E-0AA9-45C9-AA47-2E9674406A75")]
public class Terbilang : ITerbilang
{
public string TerbilangIndonesia(int nominal)
{
string strTot = string.Empty;
string urai = string.Empty;
string strJmlHuruf = string.Empty;
string bil1 = string.Empty;
string bil2 = string.Empty;
int y = 0;
int x = 0;
int z = 0;
strJmlHuruf = Convert.ToString(nominal);
urai = string.Empty;
while (x < strJmlHuruf.Length)
{
x++;
strTot = strJmlHuruf.Substring(x - 1, 1);
y = y + Convert.ToInt32(strTot);
z = strJmlHuruf.Length - x + 1;
switch (Convert.ToInt32(strTot))
{
case 1:
if ((z == 1 | z == 7 | z == 10 | z == 13))
{
bil1 = "SATU ";
}
else if ((z == 4))
{
if ((x == 1))
{
bil1 = "SE";
}
else
{
bil1 = "SATU ";
}
}
else if ((z == 2 | z == 5 | z == 8 | z == 11 | z == 14))
{
x = x + 1;
strTot = strJmlHuruf.Substring(x - 1, 1);
z = strJmlHuruf.Length - x + 1;
bil2 = string.Empty;
switch (Convert.ToInt32(strTot))
{
case 0:
bil1 = "SEPULUH ";
break;
case 1:
bil1 = "SEBELAS ";
break;
case 2:
bil1 = "DUA BELAS ";
break;
case 3:
bil1 = "TIGA BELAS ";
break;
case 4:
bil1 = "EMPAT BELAS ";
break;
case 5:
bil1 = "LIMA BELAS ";
break;
case 6:
bil1 = "ENAM BELAS ";
break;
case 7:
bil1 = "TUJUH BELAS ";
break;
case 8:
bil1 = "DELAPAN BELAS ";
break;
case 9:
bil1 = "SEMBILAN BELAS ";
break;
}
}
else
{
bil1 = "SE";
}
break;
case 2:
bil1 = "DUA ";
break;
case 3:
bil1 = "TIGA ";
break;
case 4:
bil1 = "EMPAT ";
break;
case 5:
bil1 = "LIMA ";
break;
case 6:
bil1 = "ENAM ";
break;
case 7:
bil1 = "TUJUH ";
break;
case 8:
bil1 = "DELAPAN ";
break;
case 9:
bil1 = "SEMBILAN ";
break;
default:
bil1 = string.Empty;
break;
}
if ((Convert.ToInt32(strTot) > 0))
{
if ((z == 2 | z == 5 | z == 8 | z == 11 | z == 14))
{
bil2 = "PULUH ";
}
else if ((z == 3 | z == 6 | z == 9 | z == 12 | z == 15))
{
bil2 = "RATUS ";
}
else
{
bil2 = string.Empty;
}
}
else
{
bil2 = string.Empty;
}
if ((y > 0))
{
switch (z)
{
case 4:
bil2 = bil2 + "RIBU ";
y = 0;
break;
case 7:
bil2 = bil2 + "JUTA ";
y = 0;
break;
case 10:
bil2 = bil2 + "MILYAR ";
y = 0;
break;
case 13:
bil2 = bil2 + "TRILYUN ";
y = 0;
break;
}
}
urai = urai + bil1 + bil2;
}
return urai.ToLower() + "rupiah";
}
}
1
gacutil -if <Assembly Name>
1
gacutil -if CRUFLCrystalReportHelper.dll


Sumber: http://coding4ever.net




Share

Twitter Delicious Facebook Digg Stumbleupon Favorites More