Salesforce自主学习(一)
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,自己也就开始慢慢摸索,刚刚接触,时间紧,跟着官方的英文文档边翻译边看,可能存在很多翻译和技术上的问题,也欢迎同行的指正和交流学习,谢谢!
Salesforce自主学习(一)的更多相关文章
- Salesforce开发者学习笔记之一:基本知识
本文介绍了Salesforce开发平台的基本知识, 包括如下内容: Salesforce平台介绍 Salesforce基本术语 定制和扩展Salesforce平台 创建一个简单的应用程序 Salesf ...
- salesforce 零基础学习(六十一)apex:component简单使用以及图片轮转播放的实现
有的时候,我们项目有可能有类似需求:做一个简单的图像轮转播放功能,不同的VF页面调用可以显示不同的图片以及不同的图片描述.这种情况,如果在每个页面单独处理相关的图像轮转播放则显得代码特别冗余,此种情况 ...
- salesforce 零基础学习(五十五)java通过SOAP方式定时访问某个文件然后插入到sObject中
项目源码:https://github.com/zhangyueqidlmu/SOAP-Access-SFDC.git 项目背景:salesforce端相关数据需要其他系统提供,其他系统可以提供相关数 ...
- salesforce 零基础学习(五十四)常见异常友好消息提示
异常或者error code汇总:https://developer.salesforce.com/docs/atlas.en-us.api.meta/api/sforce_api_calls_con ...
- salesforce 零基础学习(五十三)多个文件生成一个zip文件(使用git上封装的代码)
此篇参考git代码:https://github.com/pdalcol/Zippex 学习salesforce可以访问一个朋友的网站:https://www.xgeek.net 首先感谢git上提供 ...
- Salesforce的sharing Rule 不支持Lookup型字段解决方案
Salesforce 中 sharing rule 并不支持Look up 字段 和 formula 字段.但在实际项目中,有时会需要在sharing rule中直接取Look up型字段的值,解决方 ...
- 微软要如何击败Salesforce?Office365、Azure、Dynamics365 全面布局AI | 双语
微软在上月宣布组建自己的 AI 研究小组.该小组汇集了超过 5000 名计算机科学家和工程师,加上微软内部研究部门,将共同挖掘 AI 技术. 与此同时,亚马逊,Facebook,Google,IBM ...
- SalesForce 记录级别安全性
对象级安全性 简档 对象级安全性提供了控制 Salesforce.com 中数据的最简单方式.使用对象级安全性 您可以防止用户查看.创 建.编辑或删除特殊类型对象的任何实例 如潜在客户或业务机会.对象 ...
- Salesforce Apex 使用JSON数据的示例程序
本文介绍了一个在Salesforce Apex中使用JSON数据的示例程序, 该示例程序由以下几部分组成: 1) Album.cls, 定了了封装相关字段的数据Model类 2) RestClient ...
随机推荐
- POJ 1002 UVA 755 487--3279 电话排序 简单但不容易的水题
题意:给你许多串字符串,从中提取电话号码,输出出现复数次的电话号码及次数. 以下是我艰难的AC历程:(这题估计是我刷的题目题解次数排前的了...) 题目不是很难理解,刚开始想到用map,但stl的ma ...
- 【转】Objc的底层并发API
本文由webfrogs译自objc.io,原文作者Daniel Eggert.转载请注明出处! 小引 本篇英文原文所发布的站点objc.io是一个专门为iOS和OS X开发者提供的深入讨论技术的平台, ...
- 从uibutton的点击谈谈ios的响应事件
最近在做一个项目,接连遇到两个关于点击事件的问题. 1.点击button不能响应事件的. 2.子view的frame超出了父view的容器大小,也不能响应点击事件. 效果图如右: 1.第一张图中的弹出 ...
- sendrose【SPFA】
之前看到一题需要并查集+SPFA,然后就特别囧的发现自己SPFA这个历史遗留问题已经不知道怎么打了╮(╯▽╰)╭ 就果断挑了一题特别裸的SPFA赶紧搞搞掉,顺便自己乱YY下学SPFA的笔记,免得自己下 ...
- 在 go/golang语言中使用 google Protocol Buffer
怎么在go语言中实用google protocol Buffer呢? 现在的潮流趋势就是一键搞定,跟ubuntu安装软件一样 go get code.google.com/p/goprotobuf/{ ...
- 基于ffmpeg的C++播放器1
基于ffmpeg的C++播放器 (1) 2011年12月份的时候发了这篇博客 http://blog.csdn.net/qq316293804/article/details/7107049 ,博文最 ...
- ArcGIS多面体(multipatch)解析(一)
从几何学的角度来说,再复杂的三维形状都可以通过足够多,足够小的三角形组合起来表达.比如矩形可以表达成两个三角形,如下图: 圆柱形可以由多个三角形排列而成: 但ArcGIS中的多面体构成并没有采用这种“ ...
- 序列化和反序列化的几种方式(DataContractSerializer)
序列化和反序列化的几种方式(DataContractSerializer) DataContractSerializer 类 使用提供的数据协定,将类型实例序列化和反序列化为 XML 流或文档. 无法 ...
- ubuntu 学习笔记2--安装tomcat
参考维基百科http://wiki.ubuntu.org.cn/Tomcat 安装Tomcat sudo apt-get install tomcat6 设置Tomcat运行的JAVA环境 如果已经设 ...
- ubunt 命令行下链接VPN
Ubuntu命令行下VPN连接与使用 route add default dev ppp0 route add -net 192.168.2.0 netmask 255.255.255.0 ppp0 ...