Salesforce系列(0):Salesforce总结和感悟!
前言
今天博主将为大家分享:Salesforce系列(0):Salesforce培训总结!不喜勿喷,如有异议欢迎讨论!0系列将会是博主对于自己学习的一些总结和感悟
再看这篇文章前博主郑重推荐大家前往阅读我的VsCode安装汉化等系列文章,点这里跳转:VsCode系列(一):下载安装及汉化 以及 Salesforce系列(一):使用Visual Studio Code进行开发!
W3CSchool学习Apex简单使用地址(大家可以去跟着这个学学Apex简单明了清晰易懂!哈哈哈哈!):https://www.w3cschool.cn/apex/apex_interfaces.html
概述
对于今天所学知识做一些自我认知上的总结方便日后回顾学习。
小知识点(新手,不喜勿喷!有错误欢迎指出谢谢各位大佬!)
- 在Salesforce平台角色一般不可超过500(超过五百后需要提升。。。。)
- Blob 斑点
Blob是作为对象存储的二进制数据的集合。 当我们要将Salesforce中的附件存储到变量中时,将使用此选项。 (此处老师说是类似于Java的Base64,上传图片这一类的文件什么的。)此数据类型转换单个对象中的附件。 当我们需要将blob转换为字符串时,我们可以使用toString和valueOf方法在需要时将其转换为字符串。 - SOSL用于数据没有关联关系,SOQL则反之
SOQL与SOSL的差异与相似性
与SOQL一样,SOSL允许您搜索组织的记录以获取特定信息。与一次只能查询一个标准或自定义对象的SOQL不同,单个SOSL查询可以搜索所有对象。
另一个区别是SOSL匹配基于单词匹配的字段,而默认情况下SOQL执行完全匹配(当不使用通配符时)。例如,在SOSL中搜索“Digital”会返回字段值为“Digital”或“The Digital Company”的记录,但SOQL只返回字段值为“Digital”的记录。
SOQL和SOSL是两种不同语法的独立语言。每种语言都有一个独特的用例:
使用SOQL检索单个对象的记录。 使用SOSL跨多个对象搜索字段。 SOSL查询可以搜索对象上的大多数文本字段。
- SOSL针对字符串进行全文检索,[FIND ‘Acem’ FIELDS RETURNING APEX_Invoice__c (Id,APEX_Customer__r.Name)];
- 后续需要接触的Apex触发器将是很重要的一环,在日后学习后我会慢慢的加入到总结的文章里来。
- 在for循环内尽量不要放置新增(insert)和更新(update)操作,如若写入循环内部不可超过100(新增),更新(update)不可超过150,字符长度不可超过80否则则出现异常等,需要后续学习,举例如下:
List<对象> myList = [SELECT 字段 FROM 表 ];
for(对象 one : [SELECT 字段 FROM 表 ]){ // 这里的查询可能会超过100条当出现101时该代码会出错误
insert one ;
}
处理如下:(可以提高存储数据的量级)
for(Integer i=0;x<myList.size();i++ ){
for(对象 one : [SELECT 字段 FROM 表 ]){ // 这里说是处理都是这样处理,类比于java的分段
// 要执行的操作
}
insert one;
}
try(){// 至于异常捕获和Java类似
// 执行操作,有可能发生异常
} catch(DmlException e) {
// 捕捉 DML 相关的异常
} catch(SObjectException e) {
// 捕捉 SObject 相关的异常
} catch(Exception e) {
// 发生异常之后,在此进行后续处理
} finally {
// 其他的操作,必然会执行的代码段
}
创建测试类(今日总结:要求用private来修饰,测试类命名xxx_Test这是约定【可读性】,每一个内部的@isTest修饰的方法要求需要结合static关键字。覆盖了要求达到75%以上,‘{’之类的不算入范围。)
数据创建
我们需要在测试类本身创建测试类的数据。默认情况下,测试类不能访问组织数据,但是如果您设置@isTest(seeAllData = true),那么它将有权访问组织的数据。(今日总结:不可经常使用测试数据的迁移将会是一大问题。)
@isTest注释
通过使用此注释,您声明这是一个测试类,它不会被计入组织的总代码限制。
TestMethod关键字
单元测试方法是不带参数,不向数据库提交数据,不发送电子邮件,并在方法定义中使用testMethod关键字或isTest注释声明的方法。此外,测试方法必须在测试类中定义,即用isTest注释的类。
Test.startTest()和Test.stopTest()
这些是可用于测试类的标准测试方法。这些方法包含我们将模拟我们的测试的事件或动作。就像在这个例子中,我们将测试我们的触发器和帮助类来模拟火灾触发器,通过更新记录,我们已经做了开始和停止块。这也为在开始和停止块中的代码提供单独的调节器限制。
System.assert()
此方法用实际检查所需的输出。在这种情况下,我们期望插入一个发票记录,所以我们添加了assert来检查。
1 private 不可用在Top 类中,仅可在内部类中使用,外部不可访问.
当new Test 调用my()时,可正确执行,当通过 new Test.InnerClazz时报InnerClazz不 存在。
public class Test{
private class InnerClazz{
}
public void my(){
InnerClazz iclass = new InnerClazz();
System.debug(iclass);
}
}
2 public 可在当前应用或者在当前命名空间使用.
3 global 任意访问,webService必须是global的,如果一个方法或者内部类为global,则Top类必须为global。
|
4 with sharing/without sharing 当前类权限模式.
with sharing和without sharing 采用without
sharing时,可以创建对象,能查询到结果,但是无法在VF页面中显示,当有对象查看权限时,是可以看到标准字段,当字段可见性没有勾选时,仍然是不可见的。
修改和删除能正常工作。(还需要测试的情况有:内部类的权限,当with sharing调用without sharing类的方法时权限,当with sharing extends without sharing 权限,当without sharing extends with sharing)
一般都是with sharing,without sharing解决特殊情况下。如最近遇到在市场活动下,创建报名,报名上的费用通过trigger汇总更新到市场活动上,销售没有市场活动编辑权限,但汇总又需要编辑权限的情况。
举一个简单的例子:(简单易懂)
当一个对象有200条数据,我们使用with sharing情况下如果该用户权限只有查看50条那么就只能查看50条,而without sharing呢该用户权限可以查看所有200条信息(我理解为权限之外。)
- 接下来先上三张图:(今日总结:可能不全活需要继续请教大佬。从老师口中所说这一块哪怕开发多年盲点依旧会很多!)
-
下图当我们在执行DML保存数据时,首先我们会看是什么操作,再进行规则验证,验证通过,执行before前置触发器,执行触发器后,再次进行规则验证(原因是执行触发器时我们可能对数据进行了再次修改,验证以确保无误!),在执行重复的规则进入Save保存操作。
-
在执行Save后将执行所有after触发器,同样的下一步执行工作流(现在还没接触Salesforce的工作流),然后执行更新触发器之前的所有操作,再向后执行大多数系统验证(没有自定义),再将更新后的记录保存到数据库中,再向后执行更新触发器之后的所有操作,才可以继续向下走。
- 进入下一步如果流程更新了字段,则执行流程流规则,执行更新触发器之前的所有操作,执行大多数系统和自定义验证,将更新后的记录保存到数据库中,执行更新触发器之后的所有操作。(至于最后的三步到最后的提交操作持久化数据,这一块有点遗忘需要请教大佬!!!)
- 控制器Controller,MVC,接口这些就不写了后面实战中用到再总结,后面的调试以及更加琐碎的知识点还需进一步理解后面会继续跟进更新相关文章!
到这里:Salesforce系列(0):Salesforce总结和感悟!分享完毕了,快去试试吧!
最后
-
更多参考精彩博文请看这里:《陈永佳的博客》
-
喜欢博主的小伙伴可以加个关注、点个赞哦,持续更新嘿嘿!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/97779.html