在Apex中使用sObject
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的更多相关文章
- 在 Apex 中得到 sObject 的信息
Salesforce 的数据模型是基于 sObject 的.在 Apex 中,所有的标准对象.自定义对象都是继承自 sObject 的. 关于在 Apex 中得到 sObject 的信息,我们要基于两 ...
- salesforce零基础学习(八十七)Apex 中Picklist类型通过Control 字段值获取Dependent List 值
注:本篇解决方案内容实现转自:http://mysalesforceescapade.blogspot.com/2015/03/getting-dependent-picklist-values-fr ...
- 在 Apex 中使用合并统计查询
SOQL 中的合并统计查询 在 SOQL 中,我们可以使用一系列函数来进行合并统计查询.它们的功能和标准 SQL 中的 SUM(),COUNT() 等函数类似. 官方文档 Apex 中使用合并统计查询 ...
- Apex 中 PageReference 的使用
PageReference类的作用 PageReference类位于Apex的System命名空间下.它可以用来在Apex代码中将页面跳转到指定的位置.在开发的时候,我们也可以向其中添加任意的参数. ...
- Approval Process 在 Apex 中的使用
Approval Process(批准过程)简介 批准过程是一个复杂的业务过程.详细的内容可以参考官方文档. 英文版 中文版 官方trailhead模块 在Apex中调用Approval Proces ...
- Apex 中文件夹相关的单元测试
Salesforce 中的文件夹 在 Salesforce 中,我们可以建立各种文档.报表.仪表板.电子邮件模板等.它们都被保存在相应的文件夹中. Salesforce 的后端将这些文件夹保存为 Fo ...
- Apex 中操作用户和组
用户和组概述 Salesforce中对于用户的定义主要体现于两个对象:用户(User)和组(Group).组的成员可以是用户也可以是另一个组. Salesforce中的组可以有多种表示方法,比如队列( ...
- Apex 中的自定义迭代器
迭代器 迭代器(iterator)可以遍历一个集合变量中的每个元素.Apex提供了Iterator接口来让开发者实现自定义的迭代器. Iterator接口 Iterator接口定义了两个函数: has ...
- Apex 中 DML 进阶知识小结
DML 选项 在 DML 语句执行的时候可以设置选项.这些选项用 DML.Options 类来表示. 完整的介绍在官方文档中. 在建立一个 DML.Options 实例之后,可以使用 setOptio ...
随机推荐
- 使用 PLSQL 提示动态执行表不可访问,本会话的自动统计被禁止
使用PLSQL,第一次执行表的select操作的时候,提示"动态执行表不可访问,本会话的自动统计被禁止",如上图: 这种问题,一看就是当前连接用户没有对sys用户下的表v$sess ...
- Mybatis框架三:DAO层开发、Mapper动态代理开发
这里是最基本的搭建:http://www.cnblogs.com/xuyiqing/p/8600888.html 接下来做到了简单的增删改查:http://www.cnblogs.com/xuyiqi ...
- Java学习笔记41(Properties类)
Properties可以做到集合的数据持久存储 它是map接口的一个实现类,可以使用map类的方法, 不过存在区别:它没有泛型,规定键类型为字符串 这个集合在以后的开发中会经常用到,比如连接数据库等 ...
- 分布式任务调度系统xxl-job源码探究(一、客户端)
前面讲了xxl-job的搭建,现在来粗略的解析下该分布式调度系统的源码,先来客户点代码 客户端源码 客户端开启的时候会向服务中心进行注册,其实现用的是jetty连接,且每隔半分钟会发送一次心跳,来告诉 ...
- ASP.NET Core中自定义路由约束
路由约束 ASP.NET Core中,通过定义路由模板,可以在Url上传递变量,同时可以针对变量提供默认值.可选和约束. 约束的使用方法是在属性路由上添加指定的约束名,用法如下: // 单个使用 [R ...
- Swift 里 Dictionary
Dictionary uses two storage schemes: native storage and Cocoa storage. 只看 native storage 的,也就是和 OC 无 ...
- C语言中几个常用数学计算函数ceil(), floor(), round()的用法
最近在实现算法的过程中,遇到了使用几个数学计算函数,感觉挺有意思,就记下来 方便以后使用. ceil(x)返回不小于x的最小整数值(然后转换为double型). floor(x)返回不大于x的最大整数 ...
- vertical-align css属性
vertical-align 属性设置元素的垂直对齐方式. vertical-align 的属性值: baseline:默认.元素放置在父元素的基线上. sub:垂直对齐文本的下标. super:垂直 ...
- .NET手记-JS获取Url参数
最近为App做活动专区,其中很多活动都是采用html 5页面来制作的.一方面体量较小,制作快速,更新维护容易:另一方面,嵌入App后适配效果也不会很差. 这里我们采用混编形式来从native app传 ...
- Swing中的线程并发处理
理论解释见官方的文档: https://docs.oracle.com/javase/tutorial/uiswing/concurrency/index.html 一个Swing程序中一般有下面三种 ...