Skip to main content

Mengatasi Jumlah Tab di Salesforce

Secara default, Salesforce hanya menyediakan 25 tab. Jika kita ingin membuat tab melebihi itu, kita harus membayar lagi. Konsep tab di salesforce mirip dengan menu, bisa dibilang menggantikan menu, karena tidak banyak pilihan navigasi lain selain lewat tab. Pada dasarnya, untuk tab dibutuhkan jika kita ingin mengakses data (termasuk membuat record baru, menghapus record yang ada ataupun mengeditnya) dalam sebuah object tertentu. Sedikit merepotkan saat kita membuat object baru, kita harus membuat tab baru untuk melakukan testing atau agar object itu bisa aktif, karena membuat object baru tidak secara otomatis menghasilkan tab untuk mengakses menu itu.

Untuk proyek yang sekelas ERP misalnya, tentu tidak cukup hanya memiliki 25 tab, dan kami pernah dapat complaint dari customer karena hal itu. Makanya dulu kepikiran, pasti ada cara untuk mengatasi hal ini. Mungkin bisa dengan membuat visualforce page yang bermanfaat untuk mengakses object tertentu, tanpa harus membuat tab baru. Akhirnya kemarin aku baru dapat kesempatan untuk melakukan sedikit ekplorasi tentang hal itu.

Idenya sederhana. Buat visualforce page yang menampilkan semua object, khususnya custom object, Ternyata, untuk mengakses record dalam sebuah object, kita cukup mengetikkan 3 karakter awal dari ID object tersebut dalam URL, dan Apex menyediakan fungsi untuk bisa tahu. Jadi kita cukup memanfaatkan metode-metode yang terkait dengan Schema.

Cukup memanfaatkan fungsi-fungsi berikut

  • Map mapGD = Schema.getGlobalDescribe(); // untuk mengambil daftar object
  • SObjectType f = mapGD.get(strName); // untuk mengambil SObject tertentu berdasar nama API
  • strPref = f.getDescribe().getKeyPrefix(); // mengambil prefix, 3 karakter awal dari sebuah object
  • String url = '/' + strPref; // url yang bisa digunakan untuk mengakses record object tersebut



Contoh kode yang aku buat adalah seperti ini

// CONTROLLER TO DISPLAY ALL OBJECT, AS REPLACEMENT OF STANDARD TABS
//  by Yudi K.
public class CustomMenuController
{
  public List listMenu {get;set;}
  
  public CustomMenuController (Apexpages.StandardController stdController)
  {
    listMenu = new List();
    Map mapGD = Schema.getGlobalDescribe();
    List gd = mapGD.Values(); 
    Set setName = mapGD.keyset();
    List lsName = new List();
    for(String S: setName)
    {
      lsName.add(S);
    }
    lsName.sort();
    String strPref;
    
    for(String strName : lsName)
    {
      SObjectType f = mapGD.get(strName);
      strPref = f.getDescribe().getKeyPrefix();
      if (strPref != null && strPref != '' && strName.endsWith('__c') && !(strName.contains('SFGA')))
      {
        MyMenu mM = new MyMenu(f.getDescribe().getName(), f.getDescribe().getLabel(), strPref);
        listMenu.add(mM);
      }
    }
  }
  
  public class MyMenu
  {
    public String objName {get;set;} // name of object API
    public String objLabel {get;set;} // label of the object
    public String objPref {get;set;} // 3 chars prefix of this object
    
    public MyMenu(String sName, String sLabel, String sPref)
    {
      objName = (sName == null) ? '' : sName;
      objLabel = (sLabel == null) ? '' : sLabel;
      objPref = (sPref == null) ? '' : sPref;
    }
  }
}


Yah, banyak hal yang masih perlu dirapikan dari kode di atas, misalnya agar hak akses bisa disesuaikan dengan user dan sebagainya. Tapi setidaknya, bisa sedikit menghemat biaya untuk menambah tab baru. Tinggal mengatur tampilan di visualforce page agar bisa lebih menarik.

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!!