我在salesforce环境中创建了共享对象。从安装->安全控件->共享设置->,我使我的自定义对象访问“私有”。因此,假设我的对象名为EVT_Client__c &我试图从触发器(AfterInsert)将数据插入到EVT_Client__Share中,我无法做到这一点。我得到了错误,如下所示。
一旦数据被插入到EVT_Client__c对象中,我们的触发器就尝试将数据插入到EVT_Client__share对象中,但是我们得到了错误。通过UI向EVT_Client__c对象插入数据的Profile用户,该用户具有对对象的读取/创建/编辑/删除访问。
System.TypeException:不允许在EVT_Client__Share上插入DML操作
触发器中的代码如下所示,其中我正在出错。
public with sharing class EVT_Client_TriggerHandler {
private void ShareClientToThirdPartyJobGroup(List<EVT_Client__c> lstClients){
List<EVT_Client__Share> lstSharesForThirdPartyGroup = new List<EVT_Client__Share>();
List<Group> lstThirdPartyGroups = [Select Id, RelatedId from Group where Name = 'Third Party'];
for(EVT_Client__c client: lstClients){
for(Group roleGroup : lstThirdPartyGroups ){
EVT_Client___Share objShareForThirdPartyGroup = new EVT_Client__Share(ParentId = client.Id,
UserOrGroupId = roleGroup.Id,
AccessLevel = 'Edit',
RowCause = Schema.EVT_Client__Share.RowCause.User_Client__Access__c);
lstSharesForThirdPartyGroup.add(objShareForThirdPartyGroup);
}
}
insert lstSharesForThirdPartyGroup;
}
}发布于 2019-07-25 15:02:07
你确定这不是任何主细节关系中的“细节”?然后,OWD会说“由家长控制”而不是“私有”。您能否切换到经典视图,转到页面布局,并验证[Sharing]按钮可以添加,显示OK,这个用户可以手动分享这个记录从UI?
把你的代码样本寄出去?我怀疑您需要首先定义顶点共享原因。如果你曾经扮演过帐户/联系人/机会/案例角色,那就有点像角色了。
设置好之后,您应该能够执行类似于以下代码示例的操作:apex.htm (他们使用“手动”作为共享原因,但您可能对自定义共享原因比较幸运。
我很快就创建了你的对象,这对我来说就像一种魅力:
trigger Stack57201752 on EVT_Client__c (after insert) {
List<Group> groups = [SELECT Id FROM Group WHERE Name = 'Third Party'];
List<EVT_Client__Share> shares = new List<EVT_Client__Share>();
for(EVT_Client__c c : trigger.new){
for(Group g : groups){
shares.add(new EVT_Client__Share(
ParentId = c.Id,
UserOrGroupId = g.Id,
AccessLevel = 'Edit',
RowCause = 'Manual'
));
}
}
insert shares;
}当我单击记录上的[Sharing]按钮时,它看起来很好:

所以..。愚蠢的问题时间:你点击这个复选框了吗?

https://stackoverflow.com/questions/57201752
复制相似问题