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

Apex コードの動作のバージョニング

パッケージ開発者は条件付きロジックを Apex クラスとトリガで使用し、異なるバージョンに異なる動作をさせることができます。こうすることで、パッケージ開発者は、コード開発を続けながら以前のパッケージバージョンのクラスとトリガでの既存の動作をサポートし続けることができます。

登録者が、複数のバージョンのパッケージをインストールし、パッケージ内の Apex クラスまたはトリガを参照するコードを記述する場合、参照しているバージョンを選択する必要があります。パッケージ内で参照している Apex コード内で、参照を作成する Apex コードのコールのバージョン設定に基づき、異なるコードパスを条件付きで実行できます。コール元のコードのパッケージバージョン設定は、パッケージコード内で System.requestVersion メソッドをコールすることによって判断できます。こうすることで、パッケージ開発者は、要求コンテキストを決定し、さまざまなバージョンのパッケージに異なる動作を指定することができます。

次のサンプルでは、System.requestVersion メソッドを使用して System.Version クラスをインスタンス化し、異なるバージョンのパッケージに対して、Apex トリガにさまざまな動作を定義します。

1swfobject.registerObject("clippy.package_version_request", "9");trigger oppValidation on Opportunity (before insert, before update) {
2
3    for (Opportunity o : Trigger.new){
4    
5        // Add a new validation to the package
6        // Applies to versions of the managed package greater than 1.0
7        if (System.requestVersion().compareTo(new Version(1,0)) > 0) {
8            if (o.Probability >= 50 && o.Description == null) {
9                o.addError('All deals over 50% require a description');
10            }
11        }
12
13        // Validation applies to all versions of the managed package.
14        if (o.IsWon == true && o.LeadSource == null) {
15            o.addError('A lead source must be provided for all Closed Won deals');
16        }
17    }
18}

パッケージバージョンを処理するメソッドの完全な一覧は、System クラスVersion クラスおよび「System.requestVersion メソッド」を参照してください。

インストール済みパッケージ内のあるクラスによってパッケージの別のクラスのメソッドが呼び出される場合、要求コンテキストは維持されます。たとえば、登録者が CountryUtil クラスおよび ContinentUtil Apex クラスを含む GeoReports パッケージをインストールしたとします。登録者は GeoReportsEx クラスを新規作成し、バージョン設定を使用して、GeoReports パッケージのバージョン 2.3 にバインドします。GeoReportsEx が、CountryUtil のメソッドを内部的に呼び出す ContinentUtil のメソッドを呼び出すと、要求コンテキストは ContinentUtil から CountryUtil に反映され、CountryUtil 内の System.requestVersion メソッドは、GeoReports パッケージのバージョン 2.3 を返します。