tyoshikawa1106のブログ

- Force.com Developer Blog -

SFDC:パッケージインストール時にカスタム設定に値を登録できるインストール後スクリプトの実装方法を調べてみました

カスタム設定に登録された値はパッケージに含めることができません。なのでインストール後に手動で登録することになるのですが、これをインストール後スクリプトの機能を利用することでパッケージインストール時にApex処理を実行して登録することができるみたいです。


パッケージを作成することはDeveloper環境以外ではなかったので、今までこの機能のことはあまり気にしていませんでしたが、どんな感じかぐらいは確認してみることにしました。


ヘルプを確認してみたところ次の情報が見つかりました。

パッケージのインストール/アップグレード時の Apex の実行

インストール後スクリプトはどのように機能しますか?

インストール後スクリプトの例

インストール後スクリプトの指定

上記の「インストール後スクリプトの例」を見ればClassとTestClassの実装方法の詳細を確認できると思います。


サンプルコードです。


implements InstallHandler」を持つClassがインストール後スクリプトで使用できるClassとなるみたいです。

また、「global void onInstall(InstallContext context) { 」 の宣言も必要になるみたいです。

サンプルでは省略してありますが、「if(context.previousVersion() == null) {」でパッケージのバージョン(Nullは初めてのインストール)を判定したり、「if(context.isUpgrade()) { 」でパッケージのアップグレードを判定したりといくつか便利な判定処理が用意されています。


テストクラスでは、「Test.testInstall(postinstall, null);」でパッケージを模擬インストールすることが可能です。


インストール後スクリプトによる処理で呼び出せるApexクラスは同じパッケージ内に含まれているクラスのみになるとのことです。


また、インストール後スクリプトはパッケージインストール時に実行されるテストクラスの処理が終わった後に実行されるようです。インストール後スクリプトが実行される際にはガバナ制限も通常どおりに適用されるとヘルプに記載がありました。


上記のサンプルコードのような書き方で対象のApexクラスは準備できると思います。そのApexクラスをインストール後スクリプトの実行対象に指定する方法ですが、ヘルプに次の記載がありました。

インストール後スクリプトを作成してテストしたら、[パッケージ詳細] ページの [インストール後スクリプト] 参照項目にそのスクリプトを指定できます。


パッケージ詳細ページを確認してみましたが、[インストール後スクリプト] 参照項目は見当たりませんでした。

f:id:tyoshikawa1106:20131211004955p:plain


もしかしてと管理パッケージの詳細ページを確認してみると[インストール後スクリプト] の項目が表示されていました。

f:id:tyoshikawa1106:20131211010354p:plain


・・ということで、この"インストール後スクリプト"は管理パッケージのみで使用できるようになっているみたいです。なので未管理パッケージの場合は、手動で登録するか自分でカスタム設定を登録するためのApexクラスを起動する必要があります。