Pada artikel ini saya ingin membahas tentang bagaimana BIRT (Business Intelligence Reporting Tools) sebuah platform open source untuk reporting dari Eclipse dapat memanfaatkan JSON dari REST API sebagai sumber data. Untuk lebih mengenal BIRT dapat mengunjungi halaman ini dan ini.

Sebenarnya kenapa memilih BIRT adalah suatu pertimbangan yang relatif dan berikut adalah beberapa dari alasan tersebut:

  1. BIRT merupakan platform yang dapat berdiri sendiri alias stand-alone.
  2. Memiliki viewer yang web-native dengan teknologi Java dan dapat membuka file report tanpa perlu compile seperti Jasper.
  3. Web viewer ini dapat menjadi solusi untuk memiliki feature atau komponen yang loose coupling sehingga setidaknya memiliki rasa “Microservice”
  4. Secara koding tidak terlalu banyak menulis kode di sisi backend dan tidak dari nol karena dapat menggunakan berbagai macam data source yang sudah tersedia secara out of the box.
  5. The most thing that I love about the report design is XML based.

Karena saat ini banyak aplikasi yang sedang hype untuk penggunaan REST API, muncul rasa penasaran

Apakah BIRT dapat menggunakan JSON dari REST API sebagai data source seperti yang saya sampaikan di awal artikel?

Secara eksplisit pada website Eclipse BIRT mungkin tidak dijelaskan mendetail tentang kapabilitas ini, namun ternyata BIRT memiliki kemampuan untuk mengakomodirnya yaitu dengan komponen Scripted Data Source.

Development

Untuk studi kasusnya akan menghasilkan report yang menampilkan data dari sebuah REST API dengan URL (akses menggunakan metode POST dengan security token tentunya) :

[POST] http://localhost:1081/api/sample/v1/get-revenue

Data yang diperoleh dari REST URL tersebut berbentuk JSON seperti di bawah ini:

{
 data : [
  {id : 1, customer: 'PT Brantas', revenue : '18500000000.00'},
  {id : 2, customer: 'PT Ardhaya Bima', revenue : '22305000000.00'},
  {id : 3, customer: 'CV Satelit Inovasi', revenue : '1530000105.00'},
  {id : 4, customer: 'PT Indo Persada', revenue : '71200002400.00'},
  {id : 5, customer: 'PT Malika Sari', revenue : '25100300.00'},
  {id : 6, customer: 'CV Rempoa Kholis', revenue : '1400502.00'}
 ]
}

Report Parameter

Untuk memulainya kita dapat mengunduh designer Eclipse BIRT dengan versi terbaru, lalu silakan membuat project report dan sebuah blank report. Mari ikuti langkah dan penjelasannya sebagai berikut :

  • Buka Report Design Perspective.
  • Demi keamanan API yang akan diakses tentu membutuhkan token autentikasi.
  • Pada Bagian Report Parameters klik kanan pilih New Parameter dan set dengan tipe data String beri nama token.
  • Value parameter ini nanti akan diberikan melalui query string.

Report Data Query

  • Pada bagian Data Explorer pilih Data Sources klik kanan pilih New Data Source.
  • Pilih Scripted Data Source lalu silakan diberi nama serta tekan tombol Finish.

Sebelum masuk ke tahap selanjutnya, apa yang sebetulnya dimaksud dengan Data Sources? Dan apa bedanya dengan Data Sets? Data Sources adalah sumber data dari sebuah report, dapat berupa JDBC Data Source, MongoDB, POJO, Web Services, dan lain sebagainya.

Sedangkan Data Sets adalah tabel-tabel atau entitas object yang ada di setiap Data Sources. Kita pun dapat melakukan join antar Data Sets yang berbeda Data Sources.

  • Pada bagian Data Explorer pilih Data Sets klik kanan pilih New Data Set. Pastikan value dari field Data Set Type adalah Scripted Data Set.
  • Silakan diberi nama serta tekan tombol Finish.

  • Selanjutnya kita membutuhkan variable dari entitas JSON yang akan diterima sebagai kolom. Buka dialog dari Data Set yang baru saja dibuat pada bagian Output Columns tambahkan seperti berikut.

Sampai dengan tahap ini, kita sudah selesai untuk menyiapkan object yang akan digunakan untuk scripting. Selanjutnya silakan pilih Data Set yang baru saja dibuat.

  • Pada bagian editor pilih tab Script maka akan ada beberapa opsi tahapan siklus Data Set yang dapat kita manipulasi dengan scripting seperti open, describe, fetch, close, dan lain sebagainya.

Report RestAPI Call

Sekedar informasi bahasa scripting yang kita ketik adalah Rhino, sebuah engine Javascript yang dibangun menggunakan Java. Jadi bagi yang sudah terbiasa dengan Javascript seharusnya tidak terlalu asing.

  • Untuk mengeksekusi URL REST API maka silakan pilih opsi open dan silakan tambahkan baris kode sebagai berikut.
  • Selanjutnya adalah untuk mapping data dari JSON yang diterima dari opsi open ke bagian Output Columns, silakan pilih opsi fetch dan tambahkan baris kode sebagai berikut.
  • Semisal kita memiliki security token sebagai berikut, kita dapat menginputkan value dari access_token tersebut sebagai default value pada parameter token.

  • Selanjutnya kita dapat mencoba melihat hasil dari script kita atau Preview Results.
  • Jika benar maka akan menghasilkan result sebagai berikut dan muncul print log pada terminal Eclipse (harus eksekusi Eclipse melalui command prompt di Windows atau terminal di UNIX).

  • Jika sudah tampil, maka kita dapat melanjutkan ke bagian Report Designer untuk menghasilkan laporan dalam bentuk web yang nanti dapat dieksport ke dalam beberapa format sesuai fitur BIRT.

Report Design

Untuk design report kita dapat membuatnya dalam bentuk seperti di bawah ini cukup dengan drag and drop Data Sets yang telah dibuat jika ingin generate table, ringkas bukan?

Hasil Akhir

Setelah selesai dengan design tampilan, tahap terakhir adalah untuk preview hasilnya pada browser dengan menginputkan token security. Silakan tekan tombol “View Report in Web Viewer”.

By the way security token tersebut nantinya dapat dipassing input valuenya melalui query parameter URL seperti berikut:

[GET] http://birt-viewer/nama_report.rptdesign?token=[security_token_anda]

Untuk template report beserta source code secara keseluruhan ada pada Gist ini.

Jika seandainya menginginkan improvisasi seperti format money atau fungsi-fungsi lainnya, kita dapat memanfaatkan built-in function dari BIRT tanpa perlu merubah koding dari backend atau sisi API. Cukup lengkap, praktis, dan siap digunakan.

Oke sekian dari saya jika ada komentar atau diskusi mari kita berbagi ilmu. Terimakasih 😀