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. Yii2 三层设计模式:SQL Command、Query builder、Active Record(ORM)

    用Yii2也有一段时间了,发现Yii2 Framework对Database的操作有非常良好的结构和弹性. 接下来介绍三种数据库操作方式. SQL Command Level: // Get DB c ...

  2. Egg中使用egg-mongoose和常用的Mongoose 方法

    Mongoose Mongoose就是一套操作MongoDB数据库的接口,而Egg中有对应的插件egg-mongoose. 安装 $ npm install egg-mongoose --save 配 ...

  3. Java 中的伪共享详解及解决方案

    1. 什么是伪共享 CPU 缓存系统中是以缓存行(cache line)为单位存储的.目前主流的 CPU Cache 的 Cache Line 大小都是 64 Bytes.在多线程情况下,如果需要修改 ...

  4. C语言函数部分

    一.变量的作用域 1.概念:变量起作用的范围. 2.局部变量与全局变量: ①局部变量: 概念:在函数内部或某个控制块的内部定义的变量(理解“局部”) 作用域:函数内部 作用:增强了函数模块的独立性 ② ...

  5. jQuery事件委托

    jQuery事件委托 <ul id="ulBox"> <li data-id="1"></li> <li data-i ...

  6. Python内置类型(4)--数值

    Python有以下三种的数值类型: 整型(integers), 浮点型(floating point numbers), 以及 复数(complex numbers).此外,布尔是整数的子类型. 数值 ...

  7. 源码安装redis环境

    linux下安装redis 1.下载源码,解压包后编译源码: wget http://download.redis.io/releases/redis-2.8.3.tar.gz tar xzf red ...

  8. Nginx 的两种认证方式

    简介: 今天来研究一下 Nginx 的两种认证方式. 1.auth_basic 本机认证 2.ngx_http_auth_request_module 第三方认证 一.安装 Nginx shell & ...

  9. ida 调试 android fork

    在使用ida 调试android native代码时经常会碰见fork子进程的情况出现,而运行一个 android_server只能对一个进程进行调试或者attach,而ida 默认端口是23946, ...

  10. spring boot整合reids 然后实现缓存分页(方法之一) 以及RedisTemplate存到reids 里面get 就消失的坑

    业务需求 首页 实现缓存分页 spring boot 整合redis   (我的是2.0.3版本的) 在pom 文件写上依赖包即可 <dependency><!--依赖包--> ...