2

プロファイルが他のプロファイルと同様のオブジェクトにアクセスする権限を取得するように、slaesforce で ObjectPermissions オブジェクトを更新しようとしています。私はコードを書く

私のコードセグメントは

 PermissionSet set1 = [SELECT Id From PermissionSet 
                         WHERE profileId = : SourceProfileId LIMIT 1] ;
 PermissionSet set2 = [SELECT Id FROM PermissionSet 
                         WHERE profileId = : TargetProfileId LIMIT 1];
 List<ObjectPermissions> oo = [SELECT Id,
                                      SObjectType,
                                      ParentId,
                                      PermissionsCreate,
                                      PermissionsDelete,
                                      PermissionsEdit,
                                      PermissionsModifyAllRecords,
                                      PermissionsRead,
                                      PermissionsViewAllRecords 
                                 FROM ObjectPermissions 
                                     WHERE ParentId = : set1.id];


 List<ObjectPermissions> oo1 = [SELECT ParentId,
                                      Id,
                                      SObjectType,
                                      PermissionsCreate,
                                      PermissionsDelete,
                                      PermissionsEdit,
                                      PermissionsModifyAllRecords,
                                      PermissionsRead,
                                      PermissionsViewAllRecords 
                                 FROM ObjectPermissions 
                                     WHERE ParentId = : set2.Id];
 Map<String , ObjectPermissions> source_obj = new Map<String, ObjectPermissions>();
 Map<String , ObjectPermissions> target_obj = new Map<String, ObjectPermissions>();
 for (ObjectPermissions o : oo) {
     source_obj.put(o.SObjectType, o);
 }
 for (ObjectPermissions o : oo1) {
     target_obj.put(o.SObjectType, o);
 }
 ObjectPermissions target, source;
 for (String s : source_obj.keySet() ) {
     if (target_obj.containsKey(s)) {
         target = target_obj.get(s);
         source = source_obj.get(s);
         System.debug('Source is:' + source);
         System.debug('Target is : ' + target);
         target.PermissionsCreate = source.PermissionsCreate;
         target.PermissionsDelete = source.PermissionsDelete;
         target.PermissionsEdit = source.PermissionsEdit;
         target.PermissionsModifyAllRecords = source.PermissionsModifyAllRecords;
         target.PermissionsRead = source.PermissionsRead;
         target.PermissionsViewAllRecords = source.PermissionsViewAllRecords;
         update target;
     } else {
         target = new ObjectPermissions(SObjectType = s );
         source = source_obj.get(s);
         target.PermissionsCreate = source.PermissionsCreate;
         target.PermissionsDelete = source.PermissionsDelete;
         target.PermissionsEdit = source.PermissionsEdit;
         target.PermissionsModifyAllRecords = source.PermissionsModifyAllRecords;
         target.PermissionsRead = source.PermissionsRead;
         target.PermissionsViewAllRecords = source.PermissionsViewAllRecords;
         insert target;
     }
 }

コントロールがこの行に来るとき

ターゲットを更新します。それはエラーを与えています

アップデートに失敗しました。ID 110i0000007KNEvAAO の行 0 の最初の例外。最初のエラー: INVALID_CROSS_REFERENCE_KEY。プロファイルに関連付けられているため、この権限セットの親のレコードを作成、編集、または削除することはできません。親ID: 0PSi00000009BE9: []

このエラーに直面している理由がわかりません。このエラーを解決するために誰か助けてください

4

1 に答える 1

2

更新しようとしているアクセス許可セットは、id=0PSi00000009BE9 ​​のプロファイルの一部に既に関連付けられています。

https://ap1.salesforce.com/0PSi00000009BE9​​で確認してください。

于 2013-07-24T18:01:28.377 に答える