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,自己也就开始慢慢摸索,刚刚接触,时间紧,跟着官方的英文文档边翻译边看,可能存在很多翻译和技术上的问题,也欢迎同行的指正和交流学习,谢谢!

时间: 2024-08-07 04:11:48

Salesforce自主学习(一)的相关文章

SF:salesforce中,文件上传的接收对象

使用Attachment,做文件的上传: 上传的内容,最终会存放到sf的Attachment对象里. 使用<apex:inputFile>组件上传文件: 上传的内容,会存放到sf的Document对象里. 使用sf中的,Content App中的Library来存放Content文件: 上传的文件,会在ContentWorkspace对象(Library),ContentVersion对象(Content)来存放具体的文件的内容(包括,二进制的文件等等,但是,它需要一个ContentDocum

Salesforce用Apex判断Role Hierarchy的简单代码示例

由于role不同于Profile,带有阶层性质,所以有一些自定义功能要依赖于这种阶层的设定.这样就涉及到role hierarchy的判断问题. 我是一个绝懒之人,所以去网上搜了一下,能找到的方案都或多或少有些缺陷 . 我所提供的方案也是如此,但是想比于浪费太多SOQL查询次数来讲,role的数量不超过50000条已经是足够好了.// 这里Update一下,其实根本不会有那么多的Role,因为默认500,向Salesforce技术支持提票才能达到10000. Talk is cheap, sho

互掐,Salesforce呼吁欧盟调查微软收购LinkedIn交易

据外媒报道,Salesforce周四呼吁欧盟监管部门对微软以260亿美元收购LinkedIn的交易展开全面调查.微软预计将在未来数周内就这笔交易寻求欧盟反垄断部门的批准.这是微软历史上规模最大的一笔并购交易. 曾在LinkedIn的竞购之争中失败的Salesforce公司呼吁,反垄断部门不应仅仅简单审核此交易,并称这笔交易将威胁到创新和市场竞争. Salesforce首席法务官伯克·诺顿(Burke Norton)在一份声明中称:"在获得LinkedIn来自200多个国家超过4.5亿职场用户的大

iOS Salesforce Hybrid SDK 小知识

关键点总结: SFSmartStore 中的 - (id) initWithName:(NSString*)name user:(SFUserAccount *)user isGlobal:(BOOL)isGlobal 函数,是关键入口点函数. SFSmartStore 中默认是 FMDB 和 SQLChiper都引入了,所以FMDB可以调用setKey函数对数据库进行加密操作,如果不指定默认的_encryptionKeyBlock(返回一个key),就会使用com.salesforce.sma

salesforce 零基础学习(三十三)通过REST方式访问外部数据以及JAVA通过rest方式访问salesforce

本篇参考Trail教程: https://developer.salesforce.com/trailhead/force_com_dev_intermediate/apex_integration_services/apex_integration_rest_callouts 有的时候我们需要在salesforce中引入外部的方法或者数据,这样就需要访问外部的Services,目前常用的访问方式有两种: 1.SOAP方式:Web Service通过XML方式调用SOAP Web服务器; 2.R

Salesforce 生成测试可用 Id

在写 Test Class 的时候,有时候需要一批有 Id 的数据或者把 Id 作为参数等情况,在数据关系比较复杂的情况下去造真实数据有些麻烦,于是找到这样一个可以生成 Id 的方法可以用来辅助测试! private static Integer fakeIdCount = 0; private static final String ID_PATTERN = '000000000000'; /** * Generate a fake Salesforce Id for the given sO

Salesforce Winter 18 更新

又到了salesforce更新时,看了Release Note之后,果不其然又对lightning进行了大幅度的更新.相信lightning现在已经有替换classic的能力了. 首先对列表视图进行了一个优化,样式有所改变,感觉更加紧凑,显示的列可以自己拖动列宽.增加了排序功能(这个应该得是基本能力了吧). 对lightning下的搜索功能进行了增强,如果单词拼写错误,一定情况下会给出正确单词的搜索建议.全局搜索时,如果能给出更多的搜索词会搜索的更快.不对这个增强只针对客户.联系人与业务机会,希

salesforce零基础学习(八十一)更改标准字段的label名称(Admin)

我们在开发中往往需要考虑国际化功能,salesforce 提供了国际化功能,在search部分搜索translate,便可以找到translate部分,从而对需要的进行translate.比如picklist values的中英文,字段标题的中英文翻译等等 翻译部分有一项可以设置需要翻译的类型,有时候我们需要对标准表的标准字段进行中英文翻译,但是发现里面并没有translate的地方.比如Account的Name字段是标准的字段,label的名字为Name,中文对应为客户名.但是用户希望将Nam

Salesforce使用truncate清空数据库

如果想快速的清空MySQL中的表,可以使用Truncate命令.Truncate能够快速的,对数据进行无差别的清空. 在Mysql中使用truncate的语法是TRUNCATE TABLE [Table Name]; 在Salesforce中同样提供了Truncate功能.不过只是提供一个按钮,并不提供任何代码及API调用Truncate的方式.所以正确的应用场景,应该只是用来快速的清空临时数据或者测试数据.毕竟,无论使用Batch还是dataloader来删除全部数据都要花费大量的时间. 在S