System.DmlException:更新失败。第一个错误:INVALID_CROSS_REFERENCE_KEY,

时间:2013-07-20 03:30:41

标签: salesforce apex-code visualforce soql salesforce-service-cloud

我正在尝试更新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;
     }
 }

当控件到达此行时

更新目标; 它给出了错误

更新失败。第0行的第一个例外,ID为110i0000007KNEvAAO;第一个错误:INVALID_CROSS_REFERENCE_KEY,您无法为此权限集父级创建,编辑或删除记录,因为它与配置文件相关联。父ID:0PSi00000009BE9:[]

我无法弄清楚为什么我面临这个错误,请帮助解决此错误

1 个答案:

答案 0 :(得分:1)

您尝试更新的权限集已与您的某些个人资料相关联,ID = 0PSi00000009BE9 转到

https://ap1.salesforce.com/0PSi00000009BE9并检查那里。