标签:无法 pex 存在 get 共享数据 tail 关系 schema source
在Apex中,每个对象都有一个“共享”对象,其中存储了该对象的共享设定。
这种共享对象以“share”结尾。比如Account的共享对象是AccountShare,Contact的共享对象是ContactShare。对于自定义对象,其对应的共享对象是以“__share”结尾,比如“Example_Object__c”对应的共享对象是“Example_Object__share”。
注意,在“主-详细”(Master-Detail)关系中“详细”方面的对象没有对应的共享对象,因为它的共享设定是由“主”方面的对象决定的。
注意,只有当对象的“组织范围内默认”(Organizational-wide-default)设置为“专用”(Private)时,共享对象才会启用。如果没有启用,在Apex代码中调用“XXX__share”时会出现该类型不存在的错误。
这种设定的原因是:共享对象对应的是Salesforce内部数据库中的共享数据表。当对象的“组织范围内默认”设定为“公共”的时候,该对象不存在单独的共享设定,所以对应的共享对象也无法使用。
共享对象包括以下属性:
共享原因可以在设置界面中创建。每个对象都可以有自己的共享原因,在每个对象的详细信息页面中有“Apex 共享原因”相关列表。在那里可以创建和编辑共享原因。
在Apex中使用时,共享原因的名字后面要加“__c”。
首先在设置界面中创建一个自定义对象“Example_Object__c”,然后创建一个“Apex 共享原因”,名为“Example_SR”。
以下代码可以对该自定义对象创建一个共享对象:
// 创建示例自定义对象
Example_Object__c exObj = new Example_Object__c(Name = ‘test object‘);
insert exObj;
// 创建共享对象
Example_Object__share exSha = new Example_Object__share();
// 设定共享对象的各个属性值
exSha.AccessLevel = ‘Edit‘;
exSha.ParentId = exObj.Id;
exSha.UserOrGroupId = System.UserInfo.getUserId();
exSha.RowCause = Schema.Example_Object__share.RowCause.Example_SR__c; // 在这里,使用了Schema来调用共享原因
// 插入共享对象到数据库
insert exSha;
标签:无法 pex 存在 get 共享数据 tail 关系 schema source
原文地址:http://www.cnblogs.com/chengcheng0148/p/apex_object_share_basic.html