sObject对象的定义

Salesforce中的标准对象或自定义对象在Apex中使用时被称作“sObject”。sObject对象的一个实例相当于Salesforce中的一条记录。

比如:Account代表了“客户”对象,Contact代表了“联系人”对象。

在Apex中使用sObject对象

用new关键字可以建立sObject对象,并初始化某些字段。

Account acc = new Account(Name='test name', NumberOfEmployees=200);

在代码中可以用“.”来连接对象和字段。

Account acc = new Account();

acc.Phone = '12345678';
acc.Name = 'test name';

API名字

每个对象和字段都有一个唯一的名字,这个名字被称为API名字(API Name)。

比如“客户”的API名字是“Account”,“名字”字段的API名字是“Name”,“创建人”字段的API名字是“CreatedBy”。

后缀

对于自定义对象和字段,它们的API名字必须以“__c”结尾。

比如:有一个“地址”自定义对象,其API名字是“Address__c”而不能是“Address”

当一个字段的类型是自定义关系类型,那么该字段的后缀不用“__c”,而用“__r”。

对于外部对象,其API名字以“__x”结尾。

sObject泛型

所有的对象都是sObject类型,所以当创建任何一个对象时,可以声明为sObject类型。

sObject obj1 = new Account();
sObject obj2 = new Student__c();

上面的代码建立了一个“Account”(标准对象)和“Student__c”(自定义对象)实例。

sObject类型可以转换为某一对象类型,反之则不行。

另外,新建sObject类型的实例只能通过函数newSObject(),而不能通过new关键字。

sObject sObj = Schema.getGlobalDescribe().get('Account').newSObject();
// 这里还是需要声明创建的sObject类型,比如这里的“Account” // sObject obj = new sObject(); // 错误的用法

sObject的权限

一般情况下,Apex代码在运行时是不考虑当前用户对对象和字段的权限的,匿名代码段除外。

如果想让Apex代码在执行的时候考虑当前用户的权限,可以调用Schema.DescribeSObjectResult和Schema.DescribeFieldResult类中的功能。

代码示例

// 使用Schema.DescribeSObjectResult类的方法来检查
Schema.DescribeSObjectResult objectDescribe = Example_Object__c.SObjectType.getDescribe(); // 检查该对象是否可以被创建
Boolean isCreateable = objectDescribe.isCreateable(); // 检查该对象是否可以被更新
Boolean isUpdateable = objectDescribe.isUpdateable(); // 检查当前用户对该对象是否有权限
Boolean isAccessible = objectDescribe.isAccessible(); // 检查该对象是否可以被删除
Boolean isDeletable = objectDescribe.isDeletable(); // 直接用Schema.SObjectType来检查
Boolean isCreateable = Schema.SObjectType.Example_Object__c.isCreateable();
Boolean isUpdateable = Schema.SObjectType.Example_Object__c.isUpdateable();
Boolean isAccessible = Schema.SObjectType.Example_Object__c.isAccessible();
Boolean isDeletable = Schema.SObjectType.Example_Object__c.isDeletable();
// 使用Schema.DescribeFieldResult类的方法来检查
Schema.DescribeFieldResult fieldDescribe = Example_Object__c.SObjectType.fields.Example_Field__c.getDescribe(); Boolean isCreateable = fieldDescribe.isCreateable();
Boolean isUpdateable = fieldDescribe.isUpdateable();
Boolean isAccessible = fieldDescribe.isAccessible(); // 直接使用Schema.sObjectType来检查
Boolean isCreateable = Schema.sObjectType.Example_Object__c.fields.Example_Field__c.isCreateable();
Boolean isUpdateable = Schema.sObjectType.Example_Object__c.fields.Example_Field__c.isUpdateable();
Boolean isAccessible = Schema.sObjectType.Example_Object__c.fields.Example_Field__c.isAccessible();

在Apex中使用sObject的更多相关文章

  1. 在 Apex 中得到 sObject 的信息

    Salesforce 的数据模型是基于 sObject 的.在 Apex 中,所有的标准对象.自定义对象都是继承自 sObject 的. 关于在 Apex 中得到 sObject 的信息,我们要基于两 ...

  2. salesforce零基础学习(八十七)Apex 中Picklist类型通过Control 字段值获取Dependent List 值

    注:本篇解决方案内容实现转自:http://mysalesforceescapade.blogspot.com/2015/03/getting-dependent-picklist-values-fr ...

  3. 在 Apex 中使用合并统计查询

    SOQL 中的合并统计查询 在 SOQL 中,我们可以使用一系列函数来进行合并统计查询.它们的功能和标准 SQL 中的 SUM(),COUNT() 等函数类似. 官方文档 Apex 中使用合并统计查询 ...

  4. Apex 中 PageReference 的使用

    PageReference类的作用 PageReference类位于Apex的System命名空间下.它可以用来在Apex代码中将页面跳转到指定的位置.在开发的时候,我们也可以向其中添加任意的参数. ...

  5. Approval Process 在 Apex 中的使用

    Approval Process(批准过程)简介 批准过程是一个复杂的业务过程.详细的内容可以参考官方文档. 英文版 中文版 官方trailhead模块 在Apex中调用Approval Proces ...

  6. Apex 中文件夹相关的单元测试

    Salesforce 中的文件夹 在 Salesforce 中,我们可以建立各种文档.报表.仪表板.电子邮件模板等.它们都被保存在相应的文件夹中. Salesforce 的后端将这些文件夹保存为 Fo ...

  7. Apex 中操作用户和组

    用户和组概述 Salesforce中对于用户的定义主要体现于两个对象:用户(User)和组(Group).组的成员可以是用户也可以是另一个组. Salesforce中的组可以有多种表示方法,比如队列( ...

  8. Apex 中的自定义迭代器

    迭代器 迭代器(iterator)可以遍历一个集合变量中的每个元素.Apex提供了Iterator接口来让开发者实现自定义的迭代器. Iterator接口 Iterator接口定义了两个函数: has ...

  9. Apex 中 DML 进阶知识小结

    DML 选项 在 DML 语句执行的时候可以设置选项.这些选项用 DML.Options 类来表示. 完整的介绍在官方文档中. 在建立一个 DML.Options 实例之后,可以使用 setOptio ...

随机推荐

  1. video设置autoplay 不起作用

    video 标签上添加 muted https://blog.csdn.net/taiyangmiaomiao/article/details/80266625

  2. springboot知识点补充(一)

    测试配置 @RunWith(SpringRunner.class) @SpringBootTest @Configuration @ActiveProfiles("test") p ...

  3. javaweb目录结构简介

    以上图说明: bbs目录代表一个web应用 bbs目录下的html,jsp文件可以直接被浏览器访问 WEB-INF目录下的资源是不能直接被浏览器访问的 web.xml文件是web程序的主要配置文件 所 ...

  4. 【LeetCode】1. 两数之和

    题目 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标.你可以假设每种输入只会对应一个答案.但是,你不能重复利用这个数组中同样 ...

  5. 可能比文档还详细--VueRouter完全指北

    可能比文档还详细--VueRouter完全指北 前言 关于标题,应该算不上是标题党,因为内容真的很多很长很全面.主要是在官网的基础上又详细总结,举例了很多东西.确保所有新人都能理解!所以实际上很多东西 ...

  6. 纯JavaScript实现俄罗斯方块(详细注释,ES6)

    借鉴了慕课网的课程<基于websocket的火拼俄罗斯(单机版)>虽然改动比较多,但是还是核心部分没有改,加了一些不怎么好听的声音,和看起来并不好看的界面. CSS部分基本是瞎写的,因为对 ...

  7. 用eclipse导入打war包的maven项目

    最近遇到Maven管理下的Spring MVC项目,组内某位将项目代码扔过来,一脸懵逼(囧),查阅了一些资料后终于将此项目运行通了(>_<),特此记录下来与各位分享. 通俗的来说,Mave ...

  8. 课程四(Convolutional Neural Networks),第二 周(Deep convolutional models: case studies) —— 0.Learning Goals

    Learning Goals Understand multiple foundational papers of convolutional neural networks Analyze the ...

  9. Hadoop社区版搭建

    1.环境准备 1.1 硬件配置 设备名 参数 数量 6台 系统 centos6.5 内存 64G 硬盘 32T/台 CPU 16核/台 1.2 软件版本 Hadoop-2.x 下载地址 JDK1.7  ...

  10. Spring Session - 使用Redis存储HttpSession例子

    目的 使用Redis存储管理HttpSession: 添加pom.xml 该工程基于Spring Boot,同时我们将使用Spring IO Platform来维护依赖版本号: 引入的依赖有sprin ...