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

転送アップグレード用のインストール後スクリプトのサンプル

このセクションでは、パッケージ内の既存のユーザへの新規コンポーネントの割り当てを自動化するインストール後スクリプトのサンプルを紹介します。インストール後 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        }
17        List<PermissionSet> PermissionSetWithProfileIdList = 
18            [SELECT id, Name, IsOwnedByProfile, Profile.Name,
19            ProfileId FROM PermissionSet WHERE IsOwnedByProfile = true 
20            AND Id IN :PermissionSetList];   
21
22        //Get the list of profiles associated with those permission sets
23        Set<ID> ProfileList = new Set<ID> ();
24        for (PermissionSet per : PermissionSetWithProfileIdList) {
25            ProfileList.add(per.ProfileId);
26        }
27
28        //Get the list of users who have those profiles assigned
29        List<User> UserList = [SELECT id FROM User where ProfileId IN :ProfileList];                
30
31        //Assign the permission set in the new package to those users
32        List<PermissionSet> PermissionSetToAssignList = [SELECT id, Name 
33            FROM PermissionSet WHERE Name='TestPermSet' AND 
34            NamespacePrefix = 'TestPackage'];
35        PermissionSet PermissionSetToAssign = PermissionSetToAssignList[0];
36        List<PermissionSetAssignment> PermissionSetAssignmentList = new List<PermissionSetAssignment>();
37        for (User us : UserList) {
38            PermissionSetAssignment psa = new PermissionSetAssignment();
39            psa.PermissionSetId = PermissionSetToAssign.id;
40            psa.AssigneeId = us.id;
41            PermissionSetAssignmentList.add(psa);
42        }
43        insert PermissionSetAssignmentList;
44    }
45}
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}