この文章は Salesforce 機械翻訳システムを使用して翻訳されました。詳細はこちらをご参照ください。
英語に切り替える

コントローラーおよびコントローラー拡張のためのベストプラクティス

コントローラーでの共有ルールの適用
他の Apex クラスと同様に、カスタムコントローラーおよびコントローラー拡張はシステムモードで実行されます。
通常、コントローラーまたはコントローラー拡張ではユーザーの組織の共有設定、ロール階層および共有ルールを遵守する必要があります。これは、クラス定義で with sharing キーワードを使用することにより実行できます。詳細は、『Apex 開発者ガイド』の「with sharingwithout sharinginherited sharing キーワードの使用」を参照してください。

コントローラー拡張が標準コントローラーを拡張する場合、標準コントローラーのロジックはシステムモードで実行されません。代わりに、ユーザーモードで実行されます。このモードでは現在のユーザーの権限、項目レベルのセキュリティ、共有ルールが適用されます。

メモ

コントローラーのコンストラクターを setter メソッドの前に評価
コンストラクターの前に評価される setter メソッドには依存しないでください。たとえば、次のコンポーネントでは、コンポーネントのコントローラーがコンストラクターメソッドの前にコールされる selectedValue の setter に依存しています。
1<apex:component controller="CustCmpCtrl">
2      <apex:attribute name="value" description="" 
3                      type="String" required="true" 
4                      assignTo="{!selectedValue}">
5      </apex:attribute>
6      //...
7      //...
8</apex:component>
1public class CustCmpCtrl {
2      
3      // Constructor method
4      public CustCmpCtrl() {
5            if (selectedValue != null) {
6                EditMode = true;
7            }
8      }
9      
10      private Boolean EditMode = false;
11
12      // Setter method
13      public String selectedValue { get;set; }
14}
コンストラクターが setter の前にコールされるため、コンストラクターがコールされると selectedValue は常に null になります。このため、EditMode が true に設定されることはありません。
メソッドは複数回評価される場合がある (副次的影響を使用しない)
controller、action 属性および式のメソッドを含むメソッドは複数回コールできます。コントローラーまたはコントローラー拡張でカスタムメソッドを作成するときの評価の順序または副次的影響には依存しないでください。