Apex的对象共享

Apex的对象共享

在Apex中,每个对象都有一个“共享”对象,其中存储了该对象的共享设定。

这种共享对象以“share”结尾。比如Account的共享对象是AccountShare,Contact的共享对象是ContactShare。对于自定义对象,其对应的共享对象是以“__share”结尾,比如“Example_Object__c”对应的共享对象是“Example_Object__share”。

注意,在“主-详细”(Master-Detail)关系中“详细”方面的对象没有对应的共享对象,因为它的共享设定是由“主”方面的对象决定的。

注意,只有当对象的“组织范围内默认”(Organizational-wide-default)设置为“专用”(Private)时,共享对象才会启用。如果没有启用,在Apex代码中调用“XXX__share”时会出现该类型不存在的错误。

这种设定的原因是:共享对象对应的是Salesforce内部数据库中的共享数据表。当对象的“组织范围内默认”设定为“公共”的时候,该对象不存在单独的共享设定,所以对应的共享对象也无法使用。

共享对象属性

共享对象包括以下属性:

  • objectNameAccessLevel:这个属性表明了该共享的共享级别,其名字是对象名后面加上“AccessLevel”,比如LeadShare中的属性就是LeadShareAccessLevel。该属性的值可以是Edit、Read、All
  • ParentID:该属性表明了该共享对象对应的数据记录的ID,无法被更改
  • UserOrGroupId:该属性表明了被共享的用户或组的ID,无法被更改
  • RowCause:该属性表明了共享的原因,无法被更改,默认值是“Manual”

共享原因

共享原因可以在设置界面中创建。每个对象都可以有自己的共享原因,在每个对象的详细信息页面中有“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;
posted @ 2017-11-24 23:10  程程哥  阅读(934)  评论(0编辑  收藏  举报