制限回避いろは

 

 

Salesforceには諸々の制限がある。ここまで縛らなくても稼働するやろ!って位。よそ様のプラットフォームを借りてる以上仕方ないといえばそれで終了ですが、このご時世こんな厳しい制限で実装することになるとは、、、とても節約術の勉強になりますが、ライセンス費用とか考えるともうちょっとサービスして欲しいと思いますね。。。。

ガバナ制限:

Salesforceが独自に設定している制限。1トランザクション中にSOQLクエリ発行数が100回を超えるとLimitExceptionが発生し、処理は中断される。

ガバナ制限の回避方法:

トランザクション内で何度も呼ぶ値はstaticなクラス変数で呼び出しておいて呼び出す。Mapをフル活用すること。SOQL発行やtrigger.new,trigger.old呼び出しの際に以下のような記載だけで型をListからMapにかえる事ができる。2つのデータの突き合わせ時は1ループ内でMap.get(id)みたいな形で呼び出すと、forの中でクエリ発行するなんてこともしない上、ループ回数も減らせる

クエリ発行時:

Map<Account> accountMap = [SELECT Id FROM Account ];

Triggerで受け取ったデータ取得時:

trigger.newMap

trigger.oldMap 

 

ビューステート制限:

ビューステートの最大表示サイズが135kbyteを超えるとvisualforceページ上にエラー画面が発生(昔は128kbyteだったみたいですね)

ビューステートとは:

自分なりの記載をすると、フォームとコントローラで行き来するデータをbase64に変換して内部保持すること。ロールバック出来るように保持しているんだとか。

 

ビューステート制限は1画面に情報を詰め込みすぎないというのが第一。SFが提供してるキャッシュ機能をうまく使えば回避できそう。定義的にコントローラを作らなければ減らせるんだと。(なにがMVCダ。jsでええやん精神で)

 

100回て、、、、135kbyteて、、、いくらなんでも制限し過ぎでは、、突然100倍位にならないかなー(遠い目)。