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. 如何正确的使用Ubuntu以及安装常用的渗透工具集.

    文章来源i春秋 入坑Ubuntu半年多了  记得一开始学的时候基本一星期重装三四次=-= 尴尬了 觉得自己差不多可以的时候 就吧Windows10干掉了 c盘装Ubuntu 专心学习.   这里主要来 ...

  2. H264三种码率控制方法(CBR, VBR, CVBR)

    CBR(Constant Bit Rate)是以恒定比特率方式进行编码,有Motion发生时,由于码率恒定,只能通过增大QP来减少码字大小,图像质量变差,当场景静止时,图像质量又变好,因此图像质量不稳 ...

  3. Linux - 变量的查看与设置

    printenv - print all or part of environment 显示所有变量:print 显示某个变量:print <variable name> 或者 echo ...

  4. Docker 部署Django项目

    使用docker部署django项目也很简单,挺不错,分享下 环境 默认你已安装好docker环境 django项目大概结构 (p3s) [root@opsweb]# tree opsweb opsw ...

  5. python多线程获取子线程任务返回值

    今天想实现多线程更新资产信息,所以使用到了threading,但是我需要每个线程的返回值,这就需要我在threading.Thread的基础上进行封装 def auto_asset(node): re ...

  6. VS发布 错误 未能将文件 复制到

    在VS内部编译及试运行的时候并为出现错误一切正常 当将项目发布时提示XXX文件无法复制到对应的obj文件夹下 未能将文件 upfile\team\2013\0328\20130328112637296 ...

  7. 没有安装hiredis

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

  8. C#效率优化(1)-- 使用泛型时避免装箱

    本想接着上一篇详解泛型接着写一篇使用泛型时需要注意的一个性能问题,但是后来想着不如将之前的详解XX系列更正为现在的效率优化XX系列,记录在工作时遇到的一些性能优化的经验和技巧,如果有什么不足,还请大家 ...

  9. Spring Boot + Spring Cloud 实现权限管理系统 后端篇(十六):容器部署项目

    容器部署项目 这一章我们引入docker,采用docker容器的方式部署我们的项目. 首先需要有一个linux环境,并且安装 java 和 maven 以及 docker 环境,这个教程多如牛毛,不再 ...

  10. Mysql、MongoDB对比和使用场景

    MongoDB: 更高的写入负载 默认情况下,MongoDB更侧重高数据写入性能,而非事务安全,MongoDB很适合业务系统中有大量“低价值”数据的场景.但是应当避免在高事务安全性的系统中使用Mong ...