UninstallHandler インターフェース
管理パッケージをアンインストールした後に、カスタムコードを実行できます。
名前空間
使用方法
アプリケーション開発者は、このインターフェースを実装して、登録者が管理パッケージをアンインストールした後に自動的に実行される Apex コードを指定できます。これにより、登録者の組織の詳細に基づいてクリーンアップおよび通知タスクを実行できます。
アンインストールスクリプトには、デフォルトのガバナ制限が適用されます。パッケージを表す特別なシステムユーザとして実行するため、スクリプトによって実行されるすべての操作は、パッケージによって行われているように見えます。このユーザには、UserInfo を使用してアクセスできます。このユーザは実行時にのみ確認でき、テストの実行中には確認できません。
スクリプトが失敗すると、アンインストールは続行しますが、スクリプトによる変更はコミットされません。スクリプト内のエラーは、パッケージの [Apex エラーを通知] 項目に指定されたユーザにメールされます。ユーザが指定されていない場合、アンインストールの詳細は利用できません。
アンインストールスクリプトには、次の制限があります。一括処理ジョブ、スケジュールされたジョブ、および今後のジョブを開始するために使用することはできません。つまり、セッション ID にアクセスしたり、コールアウトを実行したりすることはできません。
UninstallHandler インターフェースには、onUninstall という、アンインストール時に実行されるアクションを指定する単一のメソッドがあります。
1global interface UninstallHandler {
2 void onUninstall(UninstallContext context)};
onUninstall メソッドは、次の情報を提供するコンテキストオブジェクトを引数として取ります。
- アンインストールが実施される組織の組織 ID。
- アンインストールを開始したユーザのユーザ ID。
コンテキスト引数は、データ型が UninstallContext インターフェースであるオブジェクトです。このインターフェースは、システムによって自動的に実装されます。UninstallContext インターフェースの次の定義では、コンテキスト引数にコールできるメソッドを示しています。
1global interface UninstallContext {
2 ID organizationId();
3 ID uninstallerId();
4}UninstallHandler の実装例
アンインストールスクリプトの例
以下のアンインストールスクリプトのサンプルは、パッケージのアンインストール時に次のアクションを実行します。
- アンインストールを行ったユーザと組織を示すエントリをフィードに挿入する
- そのユーザにアンインストールを確認するメール通知を作成して送信する
1global class UninstallClass implements UninstallHandler {
2 global void onUninstall(UninstallContext ctx) {
3 FeedItem feedPost = new FeedItem();
4 feedPost.parentId = ctx.uninstallerID();
5 feedPost.body = 'Thank you for using our application!';
6 insert feedPost;
7
8 User u = [Select Id, Email from User where Id =:ctx.uninstallerID()];
9 String toAddress= u.Email;
10 String[] toAddresses = new String[] {toAddress};
11 Messaging.SingleEmailMessage mail = new Messaging.SingleEmailMessage();
12 mail.setToAddresses(toAddresses);
13 mail.setReplyTo('support@package.dev');
14 mail.setSenderDisplayName('My Package Support');
15 mail.setSubject('Package uninstall successful');
16 mail.setPlainTextBody('Thanks for uninstalling the package.');
17 Messaging.sendEmail(new Messaging.Email[] { mail });
18 }
19}Test クラスの testUninstall メソッドを使って、アンインストールスクリプトをテストできます。このメソッドは、UninstallHandler インターフェースを実装するクラスを引数に取ります。
このサンプルでは、UninstallClass Apex クラスに実装されたアンインストールスクリプトのテスト方法を示します。
1@isTest
2static void testUninstallScript() {
3 Id UninstallerId = UserInfo.getUserId();
4 List<FeedItem> feedPostsBefore =
5 [SELECT Id FROM FeedItem WHERE parentId=:UninstallerId AND CreatedDate=TODAY];
6 Test.testUninstall(new UninstallClass());
7 List<FeedItem> feedPostsAfter =
8 [SELECT Id FROM FeedItem WHERE parentId=:UninstallerId AND CreatedDate=TODAY];
9 System.assertEquals(feedPostsBefore.size() + 1, feedPostsAfter.size(),
10 'Post to uninstaller failed.');
11}