首页 > 其他分享 >如何避免Salesforce Apex代码中5个常见错误,提升开发技巧?

如何避免Salesforce Apex代码中5个常见错误,提升开发技巧?

时间:2023-05-26 13:12:41浏览次数:52  
标签:Account Salesforce 技巧 Apex 代码 List accounts acct public

编码是一门需要严谨和谨慎的技术,即使是有经验的开发人员也会犯错。一些最常见的编程错误,可能会导致严重的后果。因此,作为一名开发人员,了解并避免这些错误是非常重要的。

本篇文章将为学习者介绍在编写Apex代码时一定要规避的5个错误。

易错点1

缺乏学习编程语言的能力

学习编码时,通过使用可用资源并进行大量练习,确保了解其所有功能和局限性。在掌握了变量、运算符、if语句、循环、集合和函数之后,需要花费更多时间学习面向对象编程。

例如,最近一位客户问我为什么他们的Apex代码会遇到Apex CPU超时限制错误。检查代码后发现,罪魁祸首是在两个不同的SOQL查询中分别查询后,它将子记录与其父记录进行了匹配。开发人员应该使用带有子记录的单个SOQL查询来获取所有信息。

以下是它的示例:

List<Account> accounts =

[SELECT Id,

Name

FROM Account

// Criteria Here];

List<Contacts> contacts =

[SELECT Id,

Name,

AccountId

FROM Contact]

for (Account acct : accounts) {

for (Contact con : contacts) {

if (con.AccountId == acct.Id) {

// Do stuff

}

}

}

此代码位于Batchable Apex中,因此它已经具有更高的60秒Apex CPU限制。

但是,这段代码效率很低。对于每个客户,它会遍历所有联系人以找到特定于该客户的联系人,然后对其进行处理。假如有500个客户和1,000个联系人,那就是500,000次迭代,这是非常不必要的。

最开始编写的开发人员不知道SOQL查询中的子选择,它允许获取与每个父记录相关的子记录。

更高效的代码如下:

List<Account> accounts =

[SELECT Id,

Name,

(SELECT Id,

Name

FROM Contacts)

FROM Account

// Where Clause Here for Desired Accounts];

for (Account acct : accounts) {

for (Contact acctContact : acct.Contacts) {

// Do something with each account’s contact as needed

}

}

现在,这段代码效率更高,并且只遍历返回的每个客户的联系人。

易错点2

复制粘贴代码

由于需要长期维护,复制粘贴代码是不良的编码习惯。如果重复复制相同的代码进行更改,则必须在所有地方应用该更改。

一种解决方案是使用函数。开发人员可以在整个类或代码库中使用函数,具体取决于其访问级别。

易错点3

编写长函数

当一个函数很长时,比如超过50行代码,不仅会导致代码更难理解,而且容易出现错误。

一种解决方案是编写使用辅助函数的较短函数。主函数使用多个较短的函数,而不是一个长函数,尽量将函数保持在20-30行Apex代码。

易错点4

代码嵌套太深

嵌套太深的代码也更难推理,更容易出错。

public List<Account> getAccountsWithCountry(List<Account> accounts) {

List<Accounts> accountsWithCountry = new List<Account>();

if (accounts != null) {

for (Account acct : accounts) { // First Level Of Nesting

if (String.isNotBlank(acct.BillingCountry)) { // Second Level of Nesting

accountsWithCountry.add(acct); // Third-Level of Nesting

}

}

}

return accountsWithCountry;

}

此代码示例是一个公共函数,它有三层嵌套:

1. “for-each”循环遍历Account。

2. “if”语句。

3. 将Account添加到“accountsWithCountry”的代码。

这段代码并不是最佳的,代码的嵌套级别最好不超过两层。开发人员在编码时可以反向思考。不要只在Account为空时才继续,先检查它是否为空,如果为空就停止。例如:

public List<Account> getAccountsWithCountry(List<Account> accounts) {

List<Accounts> accountsWithCountry = new List<Account>();

if (accounts == null) {

return accountsWithCountry;

}

for (Account acct : accounts) {

if (String.isNotBlank(acct.BillingCountry)) {

accountsWithCountry.add(acct);

}

}

return accountsWithCountry;

}

这段代码可以实现同样的目标,但只有两层嵌套。此外,如果进入for-each循环,Account列表不为空,并且可以安全地遍历它。

易错点5

格式错误

开发人员应该编写格式良好的代码,使代码更容易阅读和理解。格式错误的代码通常没有空格和缩进。

public class MyBadFormatClass {

public String FirstName=''; public Integer Age=0; public String LastName='';

public String getName() { return FirstName + ' ' + LastName; }

}

这个类可以编译,但难以阅读和理解。第二行声明了三个变量,第三行是一个函数。以下是重新格式化后的编码,更易于理解。

public class MyBadFormatClass {

public String FirstName = '';

public Integer Age = 0;

public String LastName = '';

public String getName() {

return FirstName + ' ' + LastName;

}

}

作者:自由侠部落

博客地址:https://home.cnblogs.com/u/CDP1/

本文欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接 

如果文章的内容对你有帮助,欢迎点赞~

标签:Account,Salesforce,技巧,Apex,代码,List,accounts,acct,public
From: https://www.cnblogs.com/CDP1/p/17434444.html

相关文章

  • MT4电脑版交易软件使用技巧有哪些?
    MT4交易软件作为连接券商平台与投资者之间的纽带,不仅是外汇金融机构的首选交易平台,也因其显著的优势成为了外汇投资者进行网上交易的重要平台。而MT4交易软件又分为电脑版和手机版,因为大多数投资者进行外汇投资时使用的是MT4电脑版软件,所以本文就来主要讲讲:MT4电脑版交易软件使用技......
  • 记录--超长溢出头部省略打点,坑这么大,技巧这么多?
    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助在业务中,有这么一种场景,表格下的某一列ID值,文本超长了,正常而言会是这样: 通常,这种情况都需要超长省略溢出打点,那么,就会变成这样: 但是,这种展示有个缺点,3个ID看上去就完全一致了,因此,PM希望能够实现头部省略......
  • VS使用技巧
    添加项目引用和Nuget包依赖如果有原有的项目有相同的nuget引用,则最快的方式是:解决方案中,双击项目名,打开项目文件(xxx.csproj)。找到<ItemGroup>节点下的所有<PackageReference>子节点(或部分你想要的),选中复制后,直接粘贴到新项目的项目文件中的<ItemGroup>节点内,即可,Ctrl+S保存......
  • VM Workstation(virtual machine) 技巧
    分区默认三个部分boot占用:1G解释:启动分区,(格式为ext4)swap占用:2G解释:交换分区,内存多大他多大,内存不够用的时暂时存放的地方(格式为swap)/占用:自定义解释:根目录,(格式为ext4)网络连接的三种模式vmtools文件共享工具使用方法......
  • 深度学习进阶篇-预训练模型[2]:Transformer-XL、Longformer、GPT原理、模型结构、应用
    深度学习进阶篇-预训练模型[2]:Transformer-XL、Longformer、GPT原理、模型结构、应用场景、改进技巧等详细讲解1.Transformer-XL:AttentiveLanguageModelsBeyondsaFixed-LengthContext1.1.Transformer-XL简介在正式讨论Transformer-XL之前,我们先来看看经典的Transform......
  • 关于源代码管理工具的介绍与实际使用技巧
      当谈到主流的源代码管理工具时,GitHub和AzureDevOps(之前称为TFS,即TeamFoundationServer)是两个备受推崇的选择。我将重点介绍GitHub,并说明如何将其与团队项目结合起来。  GitHub是一个在线软件源代码托管服务平台,使用Git作为版本控制软件,由开发者ChrisWanstrath、P.J.H......
  • Final Cut Pro视频剪辑使用技巧
    当使用FinalCutPro时,以下技巧可以帮助您提高效率和质量:使用关键帧:使用关键帧可以让您创建动画效果、调整音频级别或修改颜色等。使用快捷键:FinalCutPro有很多快捷键,它们可以加速您的工作流程并减少鼠标点击。例如,“G”键用于将素材添加到时间轴,“E”键用于在时间轴上剪辑素材,“......
  • Salesforce认证|新鲜出炉销售代表认证!
    Salesforce一直致力于为专业人士提供测试知识与技能的方法,现在终于轮到销售人员了!前不久,Salesforce宣布推出销售代表认证,这不仅是首个面向销售人员的认证,也是为数不多的非技术类、非顾问类认证,这为Salesforce认证里程碑拉开了新篇章。销售代表认证的适用对象Salesforce销售代......
  • golang使用小技巧
    封装gorouting并捕捉panic从k8s源码中学到的,觉得小而精,感觉比定时器好用呢k8s源码中是这样使用的//每隔peroid后就执行传入的函数funcForever(ffunc(),periodtime.Duration){ for{ func(){ deferHandleCrash()//捕捉函数中的panic f() }() time.Sleep(per......
  • dtcloud报错时,排错小技巧
    一、Dtcloud控制台error日志一般为以下格式Traceback(mostrecentcalllast):出错的文件调用列表......error类型(XXERROR):error详细信息(原因)二、阅读错误日志首先要阅读的是error详细信息。然后根据error类型、信息采取相应的修复工作。三、常见修复技巧......