Skip to main content

Apex Salesforce Limitation

Geregetan juga saat coding di Salesforce.com dengan Apex, ternyata cukup banyak keterbatasan yang diterapkan di sana. Memang sih, tujuannya untuk optimalisasi proses dan mencegah server berantakan gara-gara terlalu banyak proses yang berjalan secara simultan. Bosku bilang ke client "ini adalah konsekuensi menggunakan sistem multi-tenant".

Awalnya aku penasaran, apa saja sih yang dibatasi oleh Salesforce.com ini. Eh, ternyata di debug log ada penjelasannya. Berikut daftar (mungkin belum semua) batasan yang diberikan oleh Salesforce, sekedar untuk pengingat:
  • Number of SOQL queries: 100
  • Number of query rows: 50000
  • Number of SOSL queries: 20
  • Number of DML statements: 150
  • Number of DML rows: 10000
  • Number of script statements: 200000
  • Maximum heap size: 3000000
  • Number of callouts: 10
  • Number of Email Invocations: 10
  • Number of fields describes: 100
  • Number of record type describes: 100
  • Number of child relationships describes: 100
  • Number of picklist describes: 100
  • Number of future calls: 10

Gak semuanya aku paham apa maksudnya (newbie total, gan!), tapi setidaknya aku sudah dipersulit akibat adalah batasan script statements dan DML statements. Kebetulan ada client yang datanya banyak, selain itu prosesnya juga ribet.

Masih ada batasan lain sih, seperti jumlah Apex Job yang boleh dijalankan, jumlah maksimum Batch Processing (untuk import data), dan sebagainya. Belum sempat menggali semuanya. Ada yang tahu dokumentasi lengkapnya? Lagi malas baca user manual nih.

Update::
Ternyata ada cara untuk bisa mengetahui limit dari batasan-batasan tersebut, termasuk cara mengukur penggunaannya. Cekidot di sini http://www.salesforce.com/us/developer/docs/apexcode/Content/apex_methods_system_limits.htm

Comments

Anonymous said…
Terima kasih untuk blog yang menarik

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