ここでクイズ。

Salesforceのリストビューは1オブジェクトにつき最大何件まで保持することができるでしょうか??

1. 1,000

2. 10,000

3. 100,000

4. 根性が続くまで

5. Salesforceに怒られるまで

 

ということで検証してみました。

ちなみにリストビューの件数制限に関してはSFDCのhelpには記載されておりません(多分)

 

検証方法1. Eclipseでメタデータ直接いじる

Eclipseで対象オブジェクトのメタデータを抽出

→適当なスクリプトでリストビューのXMLをガツっと入れて保存

と最も手軽に試せる方法。

 

Pythonだとこんな感じのスクリプトを書く

 

これを使って生成したテキストを***.objectの中にガツっと入れてSave to Serverする。

inf-listview-eclipse-flow

 

 

1万件くらいの保存だと5-10分程度で保存可能。

ただし10万件とかになるとEclipseのヒープサイズの方でエラーになってくるので

この方法ではリストビューの限界を調査するのが難しそう。ということで一旦別の方法を検討。

 

検証方法2. CRUDベースのMetadataAPIを使ってチマチマ入れる

CRUDベースのMetadataAPI使って最大10件ずつこまめに作成する方法です。

 

Pythonだとこんな感じのスクリプトを組めばOK。

SessionIDはログイン状態のCookieから奪うなり何なりして取得してください。

 

create_metadata_base.xml

 

listview_base.xml

 

本来は一回のcreateMetadataコールで10個までのメタデータを作成できるんですが、

なぜか以下のエラーが発生して6個くらいしか一気に作成できず…。※6個でもたまにエラる。

 

forumの方にはこんな記事が上がってますがAPIバージョン上げ下げしても結果変わらず…。

この方法だと1日あたり15,000回のAPIコール数(Dev)で一回あたり6リストビューなので

一日最大90,000件のリストビューを作成可能ということになります。

とはいえ何十万件までいけるか検証するには時間がかかる…。ということで別の方法を検討。

 

検証方法3. antで保存

1の方法でEclipseではなくantでデプロイする。

デプロイ対象はリストビューのみ。

 

スクリプトはこんな感じ

 

package.xml

 

build.xml

 

10万件ごとにメタデータファイル作成→antデプロイをひたすら繰り返します。

 

検証方法1のEclipseパターンでも結局FileベースのMetadataAPIをコールしていることから

package.xmlを書き換えちゃえば同様の事が手動で出来ます。

 

この方法だとEclipseと違って10万件を保存しようとしてもヒープサイズで落ちることなくリリースできます。

リリース状況こんな感じになります。10万コンポーネントのデプロイw

inf-listview-release-status

 

リリース時間は10万件当たり2〜3時間程度でAPIコール数の消費も少ないということで検証2より効率がよく

検証1より多くの件数を保存できそうだったので、今回はこの方法で何件までいけるかを試しました。

 

現時点での限界値

上記でリリース時間10万件あたり2~3時間程度と記載しましたが、実は”最初の10万件”の話で

リストビューが増えていくにつれてコンポーネントのロード(リリースが始まる前準備)の時間がどんどん増えていき

60→70万件までのリストビュー作成では10時間かかるハメに…。

ということで現状70万件まで作成できました。

inf-listview-result

 

コレ以上は

・時間がかかりすぎる

・そろそろどっかから怒られそう

という理由で作成を断念。

 

DeveloperEditionの最大レコード数は2500件(5MB÷2kb)とかそこらだったので

レコード件数の300倍リストビューを作成できることになりますw

 

冒頭クイズの正解は今のところは「4. 根性が続くまで」ですが

やり過ぎると怒られること必至なので「5. Salesforceに怒られるまで」が正解!

 

ちなみにリストビューを確認するときにmac mini(昨年購入のスペック)+Chromeだとなぜかフリーズしちゃうので

Windows + Chromeの組み合わせがオススメです。

70万件のリストビューだとオブジェクトのホーム画面でgzip圧縮で3.7MB、実サイズ40MBありました。

inf-listview-size

ちなみに件数多いとオブジェクトのホーム画面になかなかたどり着けません。

inf-listview-time-error

 

良い子は真似しないように!