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;

Apex的对象共享的更多相关文章

  1. redis 系列15 数据对象的(类型检查,内存回收,对象共享)和数据库切换

    一.  概述 对于前面的五章中,已清楚了数据对象的类型以及命令实现,其实还有一种数据对象为HyperLogLog,以后需要用到再了解.下面再了解类型检查,内存回收,对象共享,对象的空转时长. 1.1 ...

  2. [C++] 所有该类的对象共享静态类成员变量

    问:智能指针可以对指针的引用数量进行计数,一个智能指针释放时,别的智能指针怎么知道的? 同一类的对象共享同一变量最简单的方法是静态变量: 不像普通的变量,静态成员变量是被所有类对象共享的,不同的对象可 ...

  3. 【SpringMVC】域对象共享数据

    使用ModelAndView向request域对象共享数据 index.html <a th:href="@{/testModelAndView}">使用ModelAn ...

  4. Java并发-对象共享

    我们不仅希望防止某个线程正在使用对象状态而其他的线程正在修改该状态,而且希望当一个线程修改了对象状态后,其他的线程能够看到发生的状态变化. 可见性:当读操作和写操作在不同的线程中进行时,他们的动作是共 ...

  5. java多线程学习-多个线程访问对象共享数据的方式

    public class MulitThreadShareData { public static void main(String[] args) { final ShareData1 data1 ...

  6. 跨 Appdomain 对象共享

    using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.We ...

  7. SpringCloud微服务架构分布式组件如何共享session对象

    一.简单做一个背景说明1.为说明问题,本文简单微服务架构示例如下 2.组件说明分布式架构,每个组件都是集群或者主备.具体说明如下:zuul service:网关,API调用都走zuul service ...

  8. 面试官:Redis的共享对象池了解吗?

    我正在面试间里焦急地等待着,突然听到了门外的脚步声,随即门被打开,穿着干净满脸清秀的青年走了进来,一股男士香水的淡香扑面而来. 面试官:"平时在工作中用过Redis吗?" 我:&q ...

  9. Salesforce 开发整理(三)权限共享

    Salesforce提供对象的访问权限可以通过 安全性控制 → 共享设置,可以查看每个对象在系统内部默认的访问权限 共用读写:对象的记录任何用户都可以进行读写操作 公用只读:对象的记录任何用户都可以查 ...

随机推荐

  1. ios webview下footer部分fixed失效问题

    场景: 如下图所示,一个很正常的页面需求,footer固定在底部,中间为滚动内容区 然后footer的css一般是这样的 footer{ position:fixed; bottom:; left:; ...

  2. ElasticSearch权威指南学习(映射和分析)

    概念 映射(mapping)机制用于进行字段类型确认,将每个字段匹配为一种确定的数据类型(string, number, booleans, date等).+ 分析(analysis)机制用于进行全文 ...

  3. [git] 文件操作

    文件操作 1.  git  add 1.1 将未被git管理的文件添加到暂存区 一次可添加多个文件 文件夹,中间用空格隔开 git  add  文件/文件夹  文件/文件夹 再次执行 git  sta ...

  4. 手把手教你如何用eclipse搭建前端开发环境

    3.创建静态web工程 打开eclipse,选择file,new project 或者 new other...,选择web项中的static web project ,next. 输入你的项目名,如 ...

  5. postgresql-无序uuid tps测试

    # postgresql-无序uuid tps测试 ## 无序uuid对数据库的影响 由于最近在做超大表的性能测试,在该过程中发现了无序uuid做主键对表插入性能有一定影响.结合实际情况发现当表的数据 ...

  6. Go语言之Interface(一)

    Go语言之Interface(一) 什么是interface 在面向对象语言中接口是:接口定义了一个对象的行为,但在Go中接口就是方法签名的集合,当一个类型提供了这个接口中的所有的方法,就可以说这个类 ...

  7. IIS服务器多站点 的 https证书使用443端口 解决方案

    默认情况一个服务器的IIS只能绑定一个HTTPS也就是443端口 要实现多个站点对应HTTPS只能更改IIS配置 首先把每个站点分配个不同端口,如443.444.445…(证书一定要是多域的) 然后重 ...

  8. 没有安装hiredis

    在redis的发行包中的deps目录中就包含hiredis的源码,手动编译安装,或者自行下载一份.地址:hiredis的地址 cd /deps/hiredis make make install 然后 ...

  9. OkHttp3 简述

  10. rest规范是什么?

    请参考这篇文章,每一个回答者侧重点不同,但都十分精彩 https://www.zhihu.com/question/28557115