Apex简介
Apex特点
Salesforce为开发者提供了Apex语言。它是一种语法上类似于Java的编程语言,有以下特点:
- 面向对象
- 完全在云端处理,包括保存、编译、执行
- 强类型
- 大小写不敏感(这一点和其他大部分语言不一样)
Apex的数据类型
Apex中的数据类型分为以下几种:
- 基本类型。比如整形(Integer),双精度类型(Double),字符串类型(String),布尔值(Boolean),小数类型(Decimal),ID类型等
- sObject类型。这是Salesforce特有的一种类型,系统中的对象都是继承自sObject类型,比如Account(客户)、Opportunity(机会),还包括各种自定义对象,它们的API名字都以“__c”结尾,比如“Example_Object__c”
- 集合类型。包括了列表(List),集合(Set),地图(Map)等
- 枚举类型
基本类型中要注意的地方
Boolean类型的值可以是true、false或null
Date(日期)和Datetime(日期时间)是两种不同的类型。这两个类型的变量必须使用系统提供的静态方法来创建(比如:DateTime.newInstance())。Date类型的数学运算只限于增减Integer类型的值,Datetime类型的数学运算只限于增减Intger或Double类型的值。两个或更多这些类型的变量之间无法直接进行数学运算,必须使用系统提供的Date或Datetime类的静态方法
在Salesforce中可以定义Currency(货币)类型的字段,这些字段中包含的值默认是Decimal(小数)类型
ID类型是Salesforce特有的一个基本类型,由18个大小写不敏感的字符组成。ID类型也有包含15个字符的,这时其值是大小写敏感的
String类型的值在Apex中只能使用单引号(')表示,不能使用双引号("),比如:'Hello World!',而非:"Hello World!"
集合类型的初始化语法
// List类型
List<String> exampleList = new List<String>();
List<String> exampleList = new List<String> {'Hello', 'World'};
List<String> exampleList = new String[20];
String[] exampleList = new String[20];
// Set类型
Set<String> exampleSet = new Set<String>();
Set<String> exampleSet = new Set<String> {'Hello', 'World'};
// Map类型
Map<ID, Set<String>> exampleMap = new Map<ID, Set<String>>();
Map<String, String> MyStrings = new Map<String, String> {'a' => 'b', 'c' => 'd'.toUpperCase()};
列表类型List
List类型是最常用的一种集合类型,和数组等价,可以相互转换。
用add()函数可以向列表中添加元素:
List<String> shapes = new List<String> { 'circle', 'rectangle', 'triangle' };
shapes.add('square');
从列表中读取元素可以通过索引的方式,每个列表的索引都是从0开始。
读取元素可以直接用方括号加索引,或者用get()函数加索引:
String shape1 = shapes[0];
String shape2 = shapes.get(1);
for(Integer i=0; i<shapes.size(); i++) {
// 将内容输出到控制台
System.debug(shapes[i]);
}
集合类型要注意的部分
- Set类型中每个元素必须唯一,所以Set类型的变量可以使用contains()函数来检查是否包含某元素,比如:
Set<String> exampleSet = new Set<String> {'a', 'b'};
Boolean result1 = exampleSet.contains('a'); // result1为真
Boolean result2 = exampleSet.contains('c'); // result2为假
Map类型的键值(Key)可以是null值
当向Map类型变量中增加值时,如果对应的键值已经存在,则新的值会覆盖原有的值。比如:
Map<String, String> exampleMap = new Map<String, String> {'a' => 'b', 'c' => 'd'};
String result1 = exampleMap.get('a'); // result1的值为'b'
exampleMap.put('a', 'e');
String result2 = exampleMap.get('a'); // result2的值为'e'
- 当Map类型的键值为String类型时,所有键值都是大小写敏感的(这一点和Apex本身的特点不一样)
常量定义
Apex中使用final关键字定义常量,比如:
public class ExampleClass {
public static final Integer EXAMPLE_INT_CONST = 200;
}
类型转换
Apex中默认是要求显式类型转换的,比如Integer类型不能直接转换为String类型,而需要使用String类的format()函数。
但是有一些例外:
- 对于Integer,Long,Double,Decimal四种数值类型,它们形成了一组由低到高的类型层次,所以低层次类型的变量可以自动赋值给高层次类型的变量,比如:
Integer i = 10;
Long l = i;
Double d = l;
Decimal decm = d;
- ID类型可以使用String类型赋值。但是在运行时,系统会自动检测String类型的值是否是合法的ID值,如果不是,则会抛出异常。比如:
String exampleString = 'abcde';
ID exampleId = exampleString; // 运行时会提示异常,因为字符串的值不是合法的ID类型的值
- instanceOf()函数可以用来检查一个字符串是否符合某对象的ID类型,比如:
String str = 'abcde';
Boolean result = str instanceOf Account; // 检查字符串str的值是否代表了一个合法的Account对象的ID。这种情况下result的值为假
Apex的类(Class)
和大部分编程语言一样,Apex中可以定义类。类的内部可以定义函数和变量,也可以通过public等关键字控制访问权限。
public class Student {
public String name;
private String studentNumber;
public String showName() {
return name;
}
public String getNumber() {
return studentNumber;
}
private void setNumber(String num) {
studentNumber = num;
}
}
在Apex中,类和类中的方法默认都是private的。如果想让它们变为公有,必须添加public关键字。
类的扩展
使用extends关键字可以扩展类,比如:
public class BaseClass {
...
}
public class ExtendedClass extends BaseClass {
...
}
共享关键字
在Apex中,每一个类都可以添加共享关键字,即“with sharing”和“without sharing”。
当加入了“with sharing”关键字后,在用户执行该类的时候,系统会参照当前用户的共享权限来决定代码是否执行成功。如果用户对于代码中涉及到的对象、字段没有权限,则该代码会执行失败。
匿名代码段
一个例外的情况是当代码在匿名代码段(Anonymous Blocks)执行的时候,“with sharing”关键字不起作用。匿名代码段可以通过以下方式执行:
- Developer Console
- executeAnonymous() SOAP API 方法
- Force.com IDE
注意,执行匿名代码段的用户必须获得“Apex作者(Author Apex)”的权限。
与此相反,“without sharing”关键字则声明了当前用户的共享权限对于该段代码没有作用。
嵌套类
共享关键字只会影响到当前的类,不会影响到嵌套类。它们可以独立的声明共享规则。比如:
public with sharing OuterClass {
...
public without sharing InnerClass {
...
}
}
在上面的代码段中,外层类OuterClass和嵌套类InnerClass的共享设定是不同的,它们相互独立。
Apex的逻辑语句
在Apex中也有着各种逻辑语句,比如“if...else”、“for”、“while”和“do...while”。
有一点要注意的是,截至本文的时间(Apex版本v41.0),在Apex中没有“switch”语句。
Developer Console简介
Salesforce中的Developer Console是默认的集成开发环境,用来进行Apex和数据库的编程和操作。
在Salesforce中主界面点击右上角的用户名菜单,在下拉列表中点击“Developer Console”。

建立新的Apex类
在Developer Console主界面,点击“File”,指向“New”,在子菜单中选择“Apex Class”。在弹出的对话框中输入类名,即可建立新的Apex类。

在中间的编辑区域即可对类进行编辑。

控制台
界面下方的区域是控制台,可以查看日志(Log)、运行测试(Tests)、进行数据查询(Query Editor)等。

Apex简介的更多相关文章
- Apex 单元测试辅助函数简介
startTest和stopTest的使用 在Apex的Test类中,有startTest和stopTest两个函数.这两个函数经常配对使用. 每个单元测试函数都只能调用它们一次. startTest ...
- Apex 的 Trigger 类简介
Apex Triggers Apex 触发器(Apex Triggers)是一种特殊的 Apex 类.它的主要作用是在一条记录被插入.修改.删除之前或之后自动执行一系列的操作.每一个 Trigger ...
- Apex 的 API 简介
Salesforce 数据API分类 Salesforce中提供了四种数据API接口.数据API接口为开发者提供了操作Salesforce数据的能力.它们分别是: REST API:依据RESTful ...
- 云计算平台简介(App Engine)
云计算平台简介(App Engine) 1 简介 App Engine: 应用程序引擎,是托管网络应用程序的云计算平台. 1.1 什么是云 云计算通常简称为“云”,是一种通过 Inter ...
- Salesforce 简介
Salesforce是什么 Salesforce是一个功能全面的云平台.它是践行Saas(软件及服务)概念的先驱之一. Salesforce的核心功能是CRM(客户关系管理系统).系统默认提供大多数C ...
- Approval Process 在 Apex 中的使用
Approval Process(批准过程)简介 批准过程是一个复杂的业务过程.详细的内容可以参考官方文档. 英文版 中文版 官方trailhead模块 在Apex中调用Approval Proces ...
- ASP.NET Core 1.1 简介
ASP.NET Core 1.1 于2016年11月16日发布.这个版本包括许多伟大的新功能以及许多错误修复和一般的增强.这个版本包含了多个新的中间件组件.针对Windows的WebListener服 ...
- MVVM模式和在WPF中的实现(一)MVVM模式简介
MVVM模式解析和在WPF中的实现(一) MVVM模式简介 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二)数据绑定 MVVM模式解析和在 ...
- Cassandra简介
在前面的一篇文章<图形数据库Neo4J简介>中,我们介绍了一种非常流行的图形数据库Neo4J的使用方法.而在本文中,我们将对另外一种类型的NoSQL数据库——Cassandra进行简单地介 ...
随机推荐
- Linux pwn入门教程(1)——栈溢出基础
作者:Tangerine@SAINTSEC 原文来自:https://bbs.ichunqiu.com/thread-42241-1-1.html 0×00 函数的进入与返回 要想理解栈溢出,首先必须 ...
- Java 基础学习总结(一)抽象类和接口
接触java的时间不是很长,以前对抽象类和接口的定义和区别也是模糊不清,最近拿起学校的教程读了起来,也参阅了网上的博客大神理解和总结,于是决定自己按照自己的理解来总结一下. 抽象类(半成品) 一般 ...
- ubuntu18.04 出现 Command 'ifconfig' not found 问题的解决办法
我们在虚拟主机中查看ip地址需要输入ifconfig,但是报以下错误: 系统提示我们安装 net-tools,当我们输入以下命令,即可安装完成. sudo apt-get install net-to ...
- 服务器运维 -- windows系统更换System32下文件后 重启无法进入桌面
场景描述: windows系统更换System32下文件后 重启无法进入桌面 情况1,原替换文件有备份 解决建议: 准备好该文件 情况2,原备份文件没有备份 解决建议:从相同版本的服务器上边 ...
- Anaconda3下安装Anaconda2
一.下载软件 下载Anaconda Python3.6版本和Anaconda Python2.7版本.下载地址:https://www.anaconda.com/download/ 下载需要FQ,也可 ...
- Linux学习笔记之六————Linux常用命令之系统管理
<1>查看当前日历:cal cal命令用于查看当前日历,-y显示整年日历: <2>显示或设置时间:date 设置时间格式(需要管理员权限): date [MMDDhhmm[[C ...
- 2.WF 4.5 流程引擎设计思路
本文主要给大家分享下基于WF 4.5框架的流程引擎设计思路 1.流程启动时的数据写入EventMsgPP对象中,ObjectAssemblyType记录流程启动时需要的类型,ObjectContent ...
- 第八章:四大组件之Content Provider
前言 Content Provider——Android四大组件之一. 本文要点 1.Content Provider简介 2.URI简介 3.如何访问Content Provider中数据 一.Co ...
- 关于爬虫中常见的两个网页解析工具的分析 —— lxml / xpath 与 bs4 / BeautifulSoup
http://www.cnblogs.com/binye-typing/p/6656595.html 读者可能会奇怪我标题怎么理成这个鬼样子,主要是单单写 lxml 与 bs4 这两个 py 模块名可 ...
- 堆排序——HeapSort
基本思想: 图示: (88,85,83,73,72,60,57,48,42,6) 平均时间复杂度: O(NlogN)由于每次重新恢复堆的时间复杂度为O(logN),共N - 1次重新恢复堆操作 ...