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 :
- Nama project harus di beri prefix
CRUFL
. Misal kita ingin membuat project dengan nama CrystalReportHelper, nama project ini harus kita tambahkan prefixCRUFL
, sehingga nama projectnya menjadi CRUFLCrystalReportHelper. - Project harus terdiri dari interface dan class konkret
- Setiap interface harus mempunyai attribut COM yang mempunya tiga nilai yaitu
ComVisible
,InterfaceType
danGuid
- Begitu juga class konkret harus mempunyai attribut COM yang mempunya tiga nilai yaitu
ComVisible
,ClassInterface
danGuid
- Mengaktifkan pilihan
Register for COM interop
(Project -> Properties -> Build) - Menginstall hasil build ke GAC(Global Assembly Cache)
Membuat UFL Class Library
- Klik menu File ->New -> Project …
- Pada dialog New Project aktifkan pilihan Visual C# kemudian pada pilihan Templates pilih Class Library
Nama project harus diberi prefixCRUFL
- Setelah project berhasil dibuat, klik kanan nama project -> properties
- Klik tab Build, kemudian aktifkan pilihan
Register for COM interop
Mengaktifkan pilihanRegister 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.
Kita akan mulai dengan interface terlebih dulu.
Membuat Interface dengan Attribut COM
- Hapus class default (Class1)
- Tambahkan sebuah interface dengan nama ITerbilang, kemudian tambahkan juga method abstractnya dengan nama TerbilangIndonesia
- Kemudian tambahkan attribut COM
Attribut COM untuk interface terdiri dari tiga nilai yaituComVisible
,InterfaceType
danGuid
. 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 menuTools -> Create GUID
.
Membuat Class dengan Attribut COM
- 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. - Kemudian tambahkan Attribut COM
Attribut COM untuk class terdiri dari tiga nilai yaituComVisible
,ClassInterface
danGuid
. Setelah itu lengkapi kode method TerbilangIndonesia seperti berikut :
Mengeset Strong-Name key
- Klik kanan project -> Properties
- Aktifkan tab signing, kemudian aktifkan pilihan
Sign the assembly
- Pada pilihan combo
Choose a string name key file
, pilih <New…> setelah itu akan tampil dialogCreate Strong Name Key
kemudian isikan nilai input key file name, misal dengan namaCRUFLCrystalReportHelperKey
.
- Terakhir lakukan proses Build/Compile, melalui menu Build -> Build Solution
Mendaftarkan Assembly ke GAC(Global Assembly Cache)
Hasil build/compile dari projectCRUFLCrystalReportHelper
,
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) :
- Aktifkan Visual Studio Command Prompt sesuai dengan versi Visual Studio .NET Anda
- Gunakan tool
gacutil
, dengan format perintah seperti berikut
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
|
|
1
|
|
Sumber: http://coding4ever.net