开始使用Apex之Apex简介

对于那些对新一代业务应用程序感兴趣的开发者而言,Apex代码是第一个多租户(multitenant)、按需(on-demand)编程的语言。开发者在用户界面可以使用很多订制选项,如定义新的字段,对象,工作流程,批准流程;除此之外,从客户端程序还可以通过SOAP API来发起诸如delete(),upsert()之类的数据操作请求。

什么是Apex?

Apex是一种强类型(strongly typed)的面向对象编程语言(object-oriented programming language),开发者可以通过调用Froce.com 中的API接口在服务器上操作流程,管理事务控制等。Apex的语法规则与Java类似,但是其行为表现的与数据库的存储过程类似;Apex允许开发者在系统事件中添加业务逻辑,包括按钮点击、相关记录更新,VisualForce页面;Apex代码可以由Web服务请求和对象触发器发起。

作为一种开发语言,Apex具有以下特点:

Apex是整合的(Integrated)

Apex为通用的Force.com平台的编程提供了内在支持,包括:

1.数据操作语言(Data Manipulation Language,DML)的使用,如INSERT、UPDATE、DELETE,并且提供了处理异常的接口DmlException;

2.内联的salesforce对象查询语言(Salesforce Object Query Language,SOQL)和salesforce对象搜索语言(Salesforce Object Serach Language,SOSL),这两种语言用于返回sObjects对象集合;

3.循环,用于一次批量处理多条数据

4.锁定语法(Locking syntax),阻止记录更新冲突

5.Custom public Force.com API calls that can be built from stored Apex methods

6.当用户对正在被Apex引用的数据实行操作、删除时进行警告和报错提示;

使用方便

Apex是类Java语言,在变量、表达式、代码块、条件语句、循环语句、类、数组等的用法上有很多相似之处;所以使用过类似的语言,Apex是很容易上手的。

Data focused

Apex is designed to thread together multiple query and DML statements into a single unit of work on the Force.com platform server. Developers use database stored procedures to thread together multiple transaction statements on a database server in a similar way. Like other database stored procedures, Apex does not attempt to provide general support for rendering elements in the user interface.

语法严格

Apex是一种强类型的编程语言,通过直接引用的方式操作对象和字段;如果有任何一个引用不可用,编译器在编译阶段就会报错;Apex将所有的字段、对象、类的依赖关系存储在元数据(Metadata)中,以防他们在被Apex代码引用时被删除。

服务器委托(Hosted)

Apex是解释执行(interpreted, executed)的,并且完全由Force.com平台控制。

多租户(Multitenant)

与Force.com平台的其他部分一样,Apex是运行在多租户环境中的。Apex的运行引擎可以防止错误代码独占共享资源(the Apex runtime engine is designed to guard closely against runaway code, preventing it from monopolizing shared resources),任何违反限制的代码都会抛出错误提示

自动升级更新(Automatically upgradeable)

当Force.com平台的其他部分升级时,你无须重写以更新Apex代码,因为编译代码是作为平台的元数据存储的,所以Apex会随着Salesforce的发行自动升级。

测试便捷

Apex为单元测试的创建执行提供了内在支持,测试结果返回代码覆盖率,还可以指出哪一部分的代码利用更加高效;在Salesforce正式发布之前,要先使用单元测试保证所有的代码都按照预期的效果执行。

版本

你可以用不同版本的Force.com API保存Apex代码,Apex有Performance Edition, Unlimited Edition, Developer Edition, Enterprise Edition, and Database.com几种不同的版本

Apex核心概念

Apex版本设定

可以在Salesforce用户界面设定不同版本的API,以保存不同版本的class和trigger,通过该设定,不仅仅修改了API的版本,同时也会修改Apex的版本。不同版本之间的class或者trigger的名字必须保证唯一性。

Salesforce每年会有三次更新,每次更新都会有一个新版本的API,可以在version settings选项中选择自己需要的API版本

变量、方法、类的命名

不能使用Apex的关键字和保留关键字命名

变量和表达式的使用

Apex是强类型的编程语言,与Java一样,当你第一次引用一个变量时必须要指定其数据类型,Apex的变量包括基本类型,如Integer、String、Date、Boolean;也包括复杂数据类型,如list、map、object、sObject

变量的命名规则如下

datatype variable_name [ = value];

可以在声明时给变量初始化,也可以在使用时为其初始化

Apex的基本数据类型(primitive data type)作为方法参数时值传递的方式,意味着形参数值的改变只在方法体内有效,当方法返回,参数也将随之失效,且形参的改变不能作用到实参上;

Apex的复杂数据类型(Non-primitive data type)作为方法参数时仍然采用值传递的方式,如sObject,但与基本数据类型不同的是,当方法返回时,形参仍然引用与方法调用之前相同的对象,并且不能更改为指向另一个对象;也就是说,方法结束后形参并不消失,而是与实参指向同一个对象,所以在方法体中对形参的修改也会作用到实参身上。(Non-primitive data type arguments, such as sObjects, are also passed into methods by value. This fact means that when the method returns, the passed-in argument still references the same object as before the method call and can't be changed to point to another object. However, the values of the object's fields can be changed in the method)

Apex语句

Apex的语句必须以分号(semicolon)做结尾,Apex语句包括以下类型:

1.赋值语句(Assignment)

2.条件语句(Conditional)

3.循环语句(Loops,do-while、for、while)

4.锁定语句(Locking)

5.数据操作语言(DML)

6.事务控制语句(Transaction Control)

7.方法调用(Method Invoking)

8.异常处理(Exception Handling)

什么时候使用Apex?

Salesforce预构建的应用模块提供了很多强大的CRM功能,当然Salesforce也可以定制特定的应用模块,如果与构建的应用模块满足不了你的需求,Force.com平台为高级管理人员提供了多种方法来实现自定义功能。当Apex的应用领域很广泛,包括:

Apex

1.创建web服务

2.创建邮件通知

3.对多个对象执行复杂的验证

4.创建不受工作流支持的复杂业务流程

5.创建自定义事务逻辑(指发生在整个事务上的逻辑,而不是单个记录或对象)

6.将自定义逻辑附加到另一个操作,例如保存一个记录,以便在执行操作时发生,不管它源自于用户界面、Visualforce页面,还是来自SOAP API。

Lighting Component

 Lighting Component使用基于标签(tag-based)的标记语言,使您能够构建组件来定制Lightning Experience, Salesforce1,或者构建自己的独立应用程序。组件在客户端使用由 JavaScript 事件驱动架构 (event-driven architecture)支持,在服务器端使用Apex技术。

Visualforce

Visualforce是种基于标签的标记语言,它为开发人员提供了一种更强大的构建应用程序和自定义Salesforce用户界面的方法,使用Visualforce可以:

1.构建向导和其他多步骤流程(Build wizards and other multistep processes)

2.通过应用程序创建自己的自定义流程控制

3.定义导航模式(navigation patterns)和特殊数据规则(data-specific rules),以实现最佳、高效的应用程序交互。

SOAP API

如果您想要将功能添加到一个只处理一种记录类型而且不需要任何事务控制(例如设置保存点或回滚更改)的复合应用程序,请使用标准的SOAP API调用。

Apex的执行原理

Apex在Force.com平台上完全按需运行。开发人员将Apex代码写入并保存到平台,最终用户通过用户界面触发Apex代码的执行。

当开发人员将Apex代码写入并保存到平台时,平台应用服务器(platform application server)首先将代码编译成Apex运行解释器(Apex runtime interpreter)可以理解的一组抽象指令集(an abstract set of instructions),然后将这些指令保存为元数据(metadata.)。当最终用户触发Apex时(可能通过单击按钮或访问Visualforce页面),平台应用程序服务器从元数据中检索已编译的指令,并通过解释器发送它们,最后返回结果。最终用户在执行时间上与标准平台请求没有差异。

Apex的局限性

Apex是在云端保存和运行的语言,虽然它提供了许多 在平台上自动化业务流程的好处,它不是一种通用编程语言。

1.不能改变标准功能——只能阻止功能的发生,或者添加额外的功能。

2.不能生成临时文件(Create temporary files)

3.不能衍生线程(Spawn threads)

Apex的限制

Apex代码都运行在Force.com平台上,Force.com平台是所有其他组织使用的共享资源。为了保证平台稳定的性能和可伸缩性,Apex的执行总受到约束限制,确保不会仅因Apex的执行影响Salesforce的整体服务。这意味着Apex代码在一次执行过程中会受到操作数量的限制(比如DML或SOQL)。

所有Apex请求都返回一个包含1到50,000个记录的集合。即使每次只操作一条记录,也需要使用集合。因此,必须学会批处理的编程模式。因为如果不这样做,可能会受到操作数量上的限制(governor limits)

Apex开发环境

Apex有几种常用的开发环境,Force.com 开发者控制台(Developer Console),Force.com IDE可以编写、测试、调试代码;用户界面上的代码编辑器(code editor)只能编写而不能调试。

Developer Console

Developer Console是一个集成开发环境,使用Developer Console可以编写、自动编译、调试、测试代码,检查代码性能(checking performance),执行SOQL查询

Force.com IDE

Force.com IDE是eclipse的一个插件(plug-in),Force.com IDE为构建和部署Force.com应用程序提供了一个统一的(unified)接口 ,包括源代码编辑器、测试执行工具、向导和集成帮助。这个工具包括基本的颜色编码,大纲视图, 集成单元测试,以及自动编译保存错误消息显示。

Force.com IDE中,SOAP API包括了编译的方法、触发器和类,以及测试方法,而MetaData API包括部署代码到生产环境的方法

Code Editor

Salesforce的用户界面,当触发器或者class被保存的时候就会被编译,除非编译通过,负责不予许保存。单元测试

单元测试

为了保证代码的健壮性和零失误(error-free),需要使用单元测试

单元测试是用于检验代码是否正常运行的一种类方法,该方法不接受任何参数,不会向数据库提交任何数据,不会发送邮件,并且在声明时需要被关键字testMethod或者@IsTest注解标记(are flagged with),需要注意的是,测试方法必须定义在测试类中,所以测试类也需要被@IsTest注解标记。

在将新版本的代码部署到应用程序时,执行单元测试需要注意代码的覆盖率,单元测试须至少覆盖75%的Apex代码,并且所有这些测试都必须测试成功,System.debug、测试方法和测试类不被计入代码覆盖统计

原文地址:https://www.cnblogs.com/qingyaxuan/p/7509198.html