首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >System.TypeException:不允许在__Share上插入DML操作

System.TypeException:不允许在__Share上插入DML操作
EN

Stack Overflow用户
提问于 2019-07-25 12:15:03
回答 1查看 2.1K关注 0票数 0

我在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操作

触发器中的代码如下所示,其中我正在出错。

代码语言:javascript
复制
    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;
}
}
EN

回答 1

Stack Overflow用户

发布于 2019-07-25 15:02:07

你确定这不是任何主细节关系中的“细节”?然后,OWD会说“由家长控制”而不是“私有”。您能否切换到经典视图,转到页面布局,并验证[Sharing]按钮可以添加,显示OK,这个用户可以手动分享这个记录从UI?

把你的代码样本寄出去?我怀疑您需要首先定义顶点共享原因。如果你曾经扮演过帐户/联系人/机会/案例角色,那就有点像角色了。

设置好之后,您应该能够执行类似于以下代码示例的操作:apex.htm (他们使用“手动”作为共享原因,但您可能对自定义共享原因比较幸运。

我很快就创建了你的对象,这对我来说就像一种魅力:

代码语言:javascript
复制
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]按钮时,它看起来很好:

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57201752

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档