転送アップグレード用のインストール後スクリプトのサンプル
このセクションでは、パッケージ内の既存のユーザへの新規コンポーネントの割り当てを自動化するインストール後スクリプトのサンプルを紹介します。インストール後 Apex スクリプトの作成についての詳細は、「パッケージのインストール/アップグレード時の Apex の実行」を参照してください。
このサンプルスクリプトには、新しい Visualforce ページと、これらのページへのアクセス権を付与する新規権限セットが含まれている新規パッケージバージョンに ISV が登録者をアップグレードするシナリオが含まれています。デフォルトでは、アップグレード後に、パッケージ内の既存のユーザには新規ページへのアクセス権がありません。インストール後スクリプトは、パッケージの古いバージョンで Visualforce ページへのアクセス権を持つユーザを特定し、それらのユーザに新規ページへのアクセス権を付与することで、この問題を解決します。スクリプトは、次のアクションを実行します。
- パッケージの古いバージョンの Visualforce ページの ID を取得する
- それらのページへのアクセス権を持つ権限セットを取得する
- それらの権限セットに関連付けられたプロファイルのリストを取得する
- それらのプロファイルに割り当てられたユーザのリストを取得する
- 新規パッケージ内の権限セットをそれらのユーザに割り当てる
1global class PostInstallClass implements InstallHandler {
2 global void onInstall(InstallContext context) {
3
4 //Get the Id of the Visualforce pages
5 List<ApexPage> pagesList =[SELECT Id FROM ApexPage WHERE NamespacePrefix =
6 'TestPackage' AND Name = 'vfpage1'];
7
8 //Get the permission sets that have access to those pages
9 List<SetupEntityAccess> setupEntityAccessList = [SELECT Id,
10 ParentId, SetupEntityId, SetupEntityType FROM SetupEntityAccess
11 where SetupEntityId IN:pagesList];
12 Set<ID > PermissionSetList = new Set<ID> ();
13
14 for(SetupEntityAccess sea : setupEntityAccessList){
15 PermissionSetList.add(sea.ParentId)};
16 List<PermissionSet> PermissionSetWithProfileIdList =
17 [SELECT id,Name,IsOwnedByProfile,Profile.Name,
18 ProfileId FROM PermissionSet where IsOwnedByProfile = true
19 AND Id IN :PermissionSetList ];
20
21 //Get the list of profiles associated with those permission sets
22 Set<ID> ProfileList = new Set<ID> ();
23 for(PermissionSet per : PermissionSetWithProfileIdList){
24 ProfileList.add(per.ProfileId);
25 }
26 //Get the list of users who have those profiles assigned
27 List<User> UserList =[SELECT id FROM User where ProfileId IN :ProfileList ];
28
29 //Assign the permission set in the new package to those users
30 List<PermissionSet> PermissionSetToAssignList = [SELECT id,Name
31 FROM PermissionSet where Name='TestPermSet' AND
32 NamespacePrefix = 'TestPackage'];
33 PermissionSet PermissionSetToAssign = PermissionSetToAssignList[0];
34 Set<ID> UsersSet = new Set<ID> ();
35 for(User us : UserList){
36 PermissionSetAssignment psa= new PermissionSetAssignment();
37 psa.PermissionSetId = PermissionSetToAssign.id;
38 psa.AssigneeId = us.id;
39 UsersSet.add(us.id);
40 }
41 }
42}1// Test for the post install class
2@isTest
3private class PostInstallClassTest {
4 @isTest
5 public static void test() {
6 PostInstallClass myClass = new PostInstallClass();
7 Test.testInstall(myClass, null);
8 }
9}