Salesforce学习--接触Apex;
学习目标:
1、描述出Apex程序语言的关键特点;
2、保存一个Apex类并用另一个Apex类来调用它的方法;
3、使用Developer Console检查debug日志;
开始学习Apex:
Apex是一个使用类Java语法并且使用上类似于数据库的存储过程的编程语言,Apex允许开发者向系统事件中添加业务逻辑,比如点击按钮,更新相关记录,以及Visualforce页面;
作为一个语言,Apex:
1、服务器托管--保存、编译和运行都在Force.com平台上;
2、自动升级--因为编译过后的代码是作为元数据存储在Salesforce平台上;
3、面向对象--Apex支持类、接口和继承;
4、强类型--在编译时会进行强类型的验证;
5、Apex运行在一个组织多用户共享的平台上,它强制监控代码防止独占共享资源;
6、与数据库结合--存储和操作记录很简单,Apex提供记录和字段的直接存取,也提供报表和查询语言去操作这些记录;
7、数据集中--Apex提供数据库的事物操作,允许回滚操作;
8、使用简单--Apex基于类Java术语;
9、测试简单--Apex提供内置的单元测试,创建、执行和代码覆盖率,Salesforce确保所有的自定义Apex代码在推向平台之前通过执行测试而按照预期来运行;
10、版本控制--Apex可以保存不同版本的API;
Apex语言的亮点:
就像其他面向对象的编程语言,Apex支持以下语言结构:
1、支持类、接口、配置文件和集合(包括数组);
2、对象和数组符号;
3、表达式、变量和常量;
4、条件语句(if-then-else)和控制循环语句(for循环和while循环);
不同于其他面向对象语言,Apex支持:
1、云开发,即Apex是在云上存储、编译和执行的;
2、触发器,类似于数据库中的触发器;
3、数据库语句允许进行直接的调用,支持查询数据;
4、事务和回滚;
5、global访问修饰符,比public修饰符更加宽松,允许在命名空间和应用程序之间访问;
6、自定义代码的版本控制;
此外,Apex是不分大小写的;
开发工具:
可以直接在浏览器中用Salesforce的Development Console开发;也可以用Eclipse配合Force.com提供的插件来开发;
数据类型概览:
Apex支持各种各样的数据类型,包括一种Salesforce特殊的数据类型--sObject数据类型;
Apex支持以下数据类型:
1、最基础的,例如Integer、Double、Long、Date、Datetime、String、ID、Boolean等;
2、sObject,有一般的sObject和特殊的sObject,比如一个账户,一个联系,或者一个自定义的sObject;
3、一个集合,包括:
①一个存放基础类型数据、sObject、用户自定义的sObject、Apex创建的sObject的list集合(或数组);
②一组基础类型数据;
③一个基础类型-基础类型、基础类型-sObject的map集合;
4、一个固定类型值得list集合,也被称为枚举;
5、用户自定义的Apex类;
6、系统提供的Apex类;
Apex集合:list;
list保存的是有序的对象,Apex中的list和数组是同义的,这两个可以交换使用;
通常,创建一个list比数组容易因为list不要求提前决定分配多少元素;
你可以在创建list时或创建完成之后,调用add()方法来向list中添加元素;
list中的元素可以通过在一对方括号中指定下标来读取,就像数组的元素一样;同样,你也可以通过get()方法来获取list元素;
Apex同样支持另外两种集合类型:set和map;
Apex类:
Apex类的方便之一就是代码的复用性,类中的方法能被触发器或其他类调用;
练习:
创建并保存一个EmailManager的Apex类;Salesforce会自动编译你的类在你保存的时候;
public class EmailManager {
// Public method
public void sendMail(String address, String subject, String body) {
// Create an email message object
Messaging.SingleEmailMessage mail = new Messaging.SingleEmailMessage();
String[] toAddresses = new String[] {address};
mail.setToAddresses(toAddresses);
mail.setSubject(subject);
mail.setPlainTextBody(body);
// Pass this email message to the built-in sendEmail method
// of the Messaging class
Messaging.SendEmailResult[] results = Messaging.sendEmail(
new Messaging.SingleEmailMessage[] { mail });
// Call a helper method to inspect the returned results
inspectResults(results);
}
// Helper method
private static Boolean inspectResults(Messaging.SendEmailResult[] results) {
Boolean sendResult = true;
// sendEmail returns an array of result objects.
// Iterate through the list to inspect results.
// In this class, the methods send only one email,
// so we should have only one result.
for (Messaging.SendEmailResult res : results) {
if (res.isSuccess()) {
System.debug(‘Email sent successfully‘);
}
else {
sendResult = false;
System.debug(‘The following errors occurred: ‘ + res.getErrors());
}
}
return sendResult;
}
}
下一步,用debug调用上述类中的方法来进行测试;
在Developer Console左上角,点击Debug下的Open Execute Anonymous Window,在打开的新窗口中,输入一下代码:
EmailManager em = new EmailManager();
em.sendMail(‘Your email address‘, ‘Trailhead Tutorial‘, ‘123 body‘);
当然,要将Your email address 的位置写成一个有效的邮箱地址;
点击窗口右下角的execute执行,现在上述类中的方法以及被执行了,debug中您所填写的邮箱应该会收到一封邮件,内容是“123 body”,主题为“Trailhead Tutorial”;检查你的邮箱吧;
查看Debug日志:
Debug日志对调试你的代码非常有用,当Apex方法被调用时,过程都会被记录在Debug过程中,当然你也可以自己往日志中写debug信息,来帮你调试你的代码看具体哪里有问题;
在Developer Console页面的下方,点击Logs,选择最近的日志双击查看具体信息;点击选择Debug Only筛选日志,即可只显示System.debug()的行;
当然,您也可以通过自己输入关键字来搜索想要的日志信息;
在上述Debug测试中,我们能看到的日志信息是 16:22:01:433 USER_DEBUG [23]|DEBUG|Email send Successfully;
静态方法的调用:
因为在上述类中,sendMail()方法没有使用类中的成员变量,因此它不需要是一个实例方法;现在我们将这个方法改成静态方法,即在方法的声明中加上static关键字;
静态方法的调用比实例方法更加容易,因为不需要先去实例化这个类,而可以直接通过类名来调用;
将sendMail()方法改为静态方法之后,在Execute Anonymous窗口中就不需要通过先实例化类再来调用方法了,直接调用:
EmailManager.sendMail(‘Your email address‘, ‘Trailhead Tutorial‘, ‘123 body‘);
点击execute执行,效果将会一样;
附:因为新公司需要我去研究Salesforce,自己也就开始慢慢摸索,刚刚接触,时间紧,跟着官方的英文文档边翻译边看,可能存在很多翻译和技术上的问题,也欢迎同行的指正和交流学习,谢谢!