Skip to main content

Pengalaman Ngoprek Zurmo

Zurmo adalah aplikasi pengelolaan relasi pelanggan (customer relationship management - CRM) berbasis web dan bersifat open source. Dikembangkan selama dua tahun lebih, dan baru saja rilis versi 1.0. Entah mengapa masih ada yang bikin aplikasi CRM baru di tengah banyaknya aplikasi sejenis yang sudah ada, baik yang gratisan maupun berbayar. Belum lagi layanan berbasis cloud. Pasar CRM sepertinya masih menjanjikan.

Ada beberapa hal yang membuatku tertarik mencoba Zurmo.
* Open source dan gratis
* Berbasis web, Dikembangkan dengan PHP.
* Database bisa Mysql, PostgreSql atau Oracle
* Memakai Yii sebagai framework, yang kebetulan lebih kukenal dibanding framework lain
* Modular, tiap fitur ataupun menu dijadikan modul, dalam satu folder. Jadi nambahin atau ngilangin modul bisa sesederhana menambah dan menghapus folder. Ya kurang lebihnya gitu, meski gak gampang2 amat sih
* Aku suka User Interface nya. Bersih dan rapi.
* Fiturnya menjanjikan, seperti Gamification, activity tracking,  workflow dan reporting tools. Dua terakhir itu paling mantap, meskipun belum selesai dikembangkan
* Ada fitur module designer, tempat kita bisa menambah field2 baru langsung dari aplikasi tanpa mengubah source ataupun database secara langsung.  Juga ada layout designer, yang memungkinkan kita mengatur field apa saja yang ingin ditampilkan. Belum secanggih salesforce.com atau SugarCRM, tapi sudah sangat cukup memudahkan.

Bukan berarti tanpa cacat. Keluhanku yang pertama adalah spec terlalu tinggi. Versi PHP minimal 3.3. Okelah, beberapa hosting sudah support ini. Tapi untuk menginstal aplikasi ini dengan Mysql, ada beberapa variable Mysql yang harus diganti. Nah inilah yang tidak disediakan oleh web hosting konvensional. Kecuali kita punya paket co location atau daftar di Amazon EC2. Alhasil, aku hanya bisa install di komputer sendiri, gak bisa upload ke web hosting.

Kelemahan kedua, saat ini, adalah minimnya dokumentasi teknis. User guide sih gak terlalu perlu, wong fitur masih sederhana. Dibandingkan dengan Yii, dokumentasi yang ada bisa dibilang sangat minim. Dimaklumi lah, tim masih berjuang merampungkan program, ga sempat ngurus dokumentasi. Bahkan di dalam source code kurasa komentar kode juga minim, khususnya penjelasan per class atau method yang ada. Untunglah tim mereka cukup aktif di forum, selalu tanggap dengan pertanyaan yang diajukan.

Ok, sekarang soal daleman. Maksudnya source code. Akhir pekan kemarin aku habiskan untuk sedikit ngoprek source code, ceritanya mau di - custom sesuai kebutuhan.

Pertama, ganti logo. Ga bisa lewat konfigurasi di aplikasi. Cara kasar, file logo diganti. Cara agak kasar, bongkar css dan template.  Lancar.

Kedua, bikin modul baru. Copy folder modul yang ada, replace teks-teks terkait. Kerja otot sebentar karena ternyata dalam satu modul banyak file yang perlu di edit, khususnya di dalam view. Sedikit paham cara kerja modul, termasuk MVC nya. Pas coba deploy, ternyata masih banyak langkah yang harus dilakukan. Cari-cari info di forum mereka, sukses juga. Meskipun berjam-jam :-)

Ketiga, nyoba ngubah tampilan. Rupanya, view tidak harus ditulis lengkap dalam source code. Cukup yang dasar saja, kemudian kita bisa mengatur lagi dari aplikasinya.  Adanya field dan layout designer di dalam aplikasi sudah sangat memudahkan.

Cuma ada satu ganjalan yang kutemukan terkait tampilan. Waktu aku coba mengubah sebuah view agar menambah portlet baru dan menghapus portlet lama, susah payah. Portlet itu semacam objek berisi informasi tambahan untuk melengkapi informasi dari data tertentu. Misalnya, secara default saat kita membuka record salah satu Account,  akan tampil informasi kalender, aktivitas, contact dan opportunities yang terkait dengan record tersebut. Nah aku ingin menghapus info opportunities dan menambah modul baru yang kubuat, misal Modul X.

Aku sudah ubah di file view yang terkait, pancet ga berubah. Kuvoba clear cache dan refresh metadata, gagal. Hapus file di folder assets,  hapus cache browser,  hapus temp php, restart apache hingga restart komputer, masih gagal. Akhirnya aku posting masalah ini di forum, ada respon tapi tidak menyelesaikan masalah. Hampir seharian cuma ngoprek masalahbini. Bikin jengkel, tapi juga penasaran.

Akhirnya aku coba lebih telaten baca source code, melacak fungsi demi fungsi. Gak mudah buatku, karena progranya sangat OOP, padahal OOPku jeblok. Akhirnya aku dapati, bahwa setting view yang terkait portlet itu disimpan di database. Penyimpanan informasi dibuat saat modul itu pertama kali dibaca. Selanjutnya, yang dipakai adalah informasi yang ada di database, bukan di file view. Setelah aku hapus modifikasi record di database langsung,  barulah berhasil. Tampilan berubah sesuai keinginanku. Woalahh.... gini aja bikin puyeng.

Ok, ngoprek stop dulu. Kesimpulan : gak semudah yang kubayangkan.

Comments

Popular posts from this blog

PostGreSQL :: Hitung Umur

Ternyata untuk menghitung umur dari data yang disimpan di PostGreSQL sangat gampang. PostGreSQL sendiri sudah menyediakan fungsi yang mendukung. Beberapa fungsi yang bisa dipakai adalah AGE dan EXTRACT. AGE dipakai untuk menghitung umur dari sebuah data, dibandingkan dengan hari ini, atau dengan data lain (tipenya timestamp). Misal: age(timestamp '1980-09-27'), akan menghasilkan nilai (bertipe interval) "24 years 1 mon 25 days". Nah, kalau mau mengambil nilai tahunnya saja, tinggal menggunakan EXTRACT Contoh: EXTRACT(year FROM AGE(timestamp '2001-09-27')), hasilnya akan jadi 24.

PHP :: Selisih Jam

Setelah kemarin kesulitan untuk melakukan increment ataupun decrement terhadap variabel waktu (date/time) di PHP, kali ini nemuin masalah untuk mencari selisih waktu (dari satu jam ke jam tertentu), yang perlu untuk ngitung lembur karyawan. Tadinya kepikiran untuk buat fungsi sendiri, yang flow -nya kira-kira begini: - masing-masing dipisah menjadi jam, menit, detik - bandingkan antara keduanya. - lakukan pengurangan terhadap masing-masing komponen (jam, menit dan detik) - gabungkan hasil perhitungan ... (selisih jam + selisih menit + selisih detik) Tapi waktu aku ingat kasus Next Date, ... muncul ide untuk menggunakan cara yang sama, yaitu memanfaatkan format UNIX timestamp, terus nyoba mencari selisihnya. TERNYATA BERHASIL !!! Flownya seperti ini: - masing-masing dipisah menjadi jam, menit,detik - ubah masing-masing ke format timestamp, gunakan fungsi mktime() - kurangkan kedua jam - hasilnya dibagi 60 (karena satuannya pakai menit), sementara selisih timestamp itu dalam detik Algori

Delphi :: Split String

Akhirnya ketemu juga cara untuk melakukan split string. (Terbiasa pakai PHP sih, yang sangat memanjakan dalam pengelolaan string.) Di sini memanfaatkan TStringList, unit Classes. // procedure untuk split string procedure Split (const Delimiter: Char; // delimiter charachter Input: string; // input string const Strings: TStrings) ; // list of string result begin Assert(Assigned(Strings)) ; Strings.Clear; Strings.Delimiter := Delimiter; Strings.DelimitedText := Input; end; // contoh pemakaian procedure TForm1.Button1Click(Sender: TObject) ; var A: TStringList; begin A := TStringList.Create; try Split(' ', 'your delphi guide', A) ; ShowMessage(a[0]) ; //your ShowMessage(a[1]) ; //delphi ShowMessage(a[2]) ; //guide finally A.Free; end; end; Source : http://delphi.about.com/cs/adptips2002/a/bltip1102_5.htm Wheew .. akhirnya. One step ahead!!