使用 Salesforce 扩展进行 Apex 开发

内容

  • 概述
  • 其他资源

概述

Apex 是一种强类型、面向对象的编程语言,结合对 Salesforce API 的调用,允许 Salesforce 开发人员添加业务逻辑来操作其组织中的数据。 Salesforce 扩展包附带了大量工具,用于编写、测试、重构和调试 Apex 代码。应用内帮助使低代码开发人员和管理员能够轻松编写、测试和调试 Apex 代码,例如,从他们使用 Flow Builder 等工具创建的事件激活的触发器。

您可以使用 Salesforce Extensions 执行以下操作:

  • 快速创建 Apex 类、测试类和触发器。
  • 在各种类型的调试器之间进行选择,以满足调试要求。
  • 轻松执行 Anonymous Apex。

其他资源

  • Apex 开发人员指南
  • Salesforce DX 开发人员指南
  • 快速入门:使用 Salesforce 扩展进行 Apex 开发

登山口:

  • Apex 触发器
  • 使用 Apex Replay Debugger 查找并修复 Bug

快速入门 Apex 开发

概述

完成此快速入门,即可创建、测试和调试使用 Apex 类创建的工作流,并触发 Apex 触发器。

您将创建一个名为 的自定义对象,并向该自定义对象添加一个名为的自定义字段。您将使用 Apex 更新和测试更新的 Price 字段,并了解如何使用 Salesforce 扩展使用 Apex Code。BookPrice

在开始之前,请安装 Salesforce Extensions for Desktop 或 Set Up Code Builder

创建自定义对象

  1. 登录到您的沙盒或开发人员组织。
  2. 转到“设置”>“对象管理器”>创建>自定义对象
  3. 输入标签。Book
  4. 输入复数标签。Books
  5. 点击保存。
  6. 在“书籍详细信息”页面的“自定义字段和关系”部分中,单击“新建”。
  7. 选择数据类型,然后单击下一步Number
  8. 输入字段标签。Price
  9. 在长度文本框中输入。16
  10. 在小数位文本框中输入,然后单击下一步2
  11. 单击“下一步”接受字段级安全性的默认值。
  12. 点击保存

添加 Apex 类

  1. 在 VS Code 中,使用组织选取器或命令面板连接到将自定义对象添加到的组织。
  2. 从命令面板运行 SFDX: Refresh SObject Definitions 命令,以获取 SObjects 相关代码的代码完成建议。
  3. 单击活动栏中的云图标以打开组织浏览器。
  4. 向下滚动到“自定义对象”并找到该对象。单击检索图标以运行 SFDX:从组织检索源Book_c
  5. 从命令面板中,运行 SFDX:Create Apex Class 并创建一个名为 .MyBooks
  6. 添加对此类调用的方法。applyDiscount

使此方法既是公共的,又是静态的。因为它是一个静态方法,所以你不需要创建类的实例来访问该方法,你只需使用类的名称,后跟一个点 (.) 和方法的名称。

此方法采用一个参数,即分配给变量 books 的记录列表。该方法循环访问书籍列表,并对当前书籍价格应用 10% 的折扣:

public with sharing class MyBooks {
    public MyBooks() {

    }
    public static void applyDiscount(Book__c[] books) {
        for (Book__c b : books){
           b.Price__c *= 0.9;
        }
     }
}

接下来,添加调用此方法的触发器。applyDiscount

添加 Apex 触发器

Apex 触发器是在从数据库插入、更新或删除特定类型的记录之前或之后执行的一段代码。每个触发器都使用一组上下文变量运行,这些变量提供对导致触发器触发的记录的访问。

  1. 在命令面板中,运行 SFDX: Create Apex Trigger 并创建一个名为 的新类。MyBooksTrigger
  2. 将默认模板更新为以下触发器定义:
trigger MyBooksTrigger on Book__c (before insert) {

   Book__c[] books = Trigger.new;

   MyBooks.applyDiscount(books);
}

我们现在有了更新所有插入的书籍价格所需的代码。接下来,让我们添加一个测试类并添加一个单元测试。单元测试是编写代码的重要组成部分,并且是必需的。除了确保代码的质量外,单元测试还使您能够满足部署或打包 Apex 的代码覆盖率要求。要为 Salesforce AppExchange 部署 Apex 或打包 Apex,单元测试必须覆盖至少 75% 的 Apex 代码,并且这些测试必须通过。

编写单元测试

现在添加一个具有一个测试方法的测试类。然后运行测试并验证代码覆盖率。测试方法练习并验证触发器和类中的代码。此外,它还使您能够达到触发器和类的 100% 代码覆盖率。 在我们的示例中,创建一个测试类,该类插入一个新的 book 对象,该对象会触发我们之前编写的 Apex 触发器。 要创建测试类,请执行以下操作:

  1. 在命令面板中,运行 SFDX:Create Apex Class 并创建一个名为 .MyBooksTestClass
  2. 将以下代码粘贴到文件中:MyBooksTestClass.cls
@isTest 
private class MyBooksTestClass {
    static testMethod void validateMyBooks() {
       Book__c b = new Book__c(Name='Behind the Cloud', Price__c=100);
       // Insert book
       insert b;    
       // Retrieve the new book
       Book b2 = [SELECT Price__c FROM Book__c WHERE Id =:b.Id];
      //Confirm that the price has been updated correctly
       System.assertEquals(90, b2.Price__c);
      }
}

注意:此测试类是使用注释定义的。我们建议以这种方式定义的类仅包含测试方法以及支持这些测试方法所需的任何方法。创建用于测试的单独类的一个优点是,使用 定义的类不计入组织 6 MB 的 Apex 代码限制。还可以将批注添加到单个方法中。有关更多信息,请参见 isTest 注释和执行调控器和限制。@isTest@isTest@isTest

  1. 若要运行编写的测试,必须将代码部署到组织。在文件中单击鼠标右键,然后运行 SFDX: Deploy This Source to Org 以部署代码。
  2. 单击文件中的“运行所有测试”以测试代码。MyBooksTestClass

Apex 语言服务器

内容

  • 与 Apex 语言服务器集成
  • Apex 语言服务器状态
  • 重置 Apex 索引
  • 另见

Apex 语言服务器是一种与 IDE 无关的方法,用于工具访问代码编辑功能,例如代码完成、转到定义、查找所有用法和重构。Apex 语言服务器是 Salesforce 扩展包的一部分。它为 Salesforce Extensions for VS Code 提供了一种强大的方法来实现其他 IDE 也可以访问的 Apex 分析器。

Apex 语言服务器是语言服务器协议 3.0 规范的实现。语言服务器协议允许工具(在本例中为 VS Code)与语言智能提供程序(服务器)进行通信。我们使用此通用规范构建了 Apex 语言服务器,使我们的工具合作伙伴能够提高其工具的智能性。

有关更多信息,请观看我们的 Dreamforce ’17 演示视频,通过语言服务器为所有 IDE 构建强大的工具。

与 Apex 语言服务器集成

如果您是希望与 Apex 语言服务器集成的开发人员,请使用 apex-jorje-lsp.jar 文件。

有关初始化 Apex 语言服务器并与之通信的示例,请参阅 languageServer.ts 文件。

Apex 语言服务器状态

将鼠标悬停在状态栏中可查看 Apex 语言服务器的当前状态。若要始终查看状态,请固定状态消息。Apex 语言服务器状态现在在状态栏中始终可见,直到取消固定。{}

重置 Apex 索引

若要清除 Apex 语言服务器的索引,请删除该目录并重新启动 VS Code。PROJECT_DIR/.sfdx/tools/<Salesforce Release>

另见

  • 语言服务器协议规范
  • 语言服务器协议 – Eclipse Newsletter 2017 年 5 月
  • VS Code 的语言服务器协议实现
  • Langserver.org – 有关其他语言服务器和客户端的信息,例如 Atom、Sublime、Vim 等

编写 Apex 代码的工具

内容

  • 代码补全
  • 代码片段
  • 自定义元数据模板
  • SObjects 的 Intellisense
  • 转到定义
  • 查找所有参考资料
  • 大纲视图
  • 语法错误
  • 快速修复
  • 匿名顶点

使用适用于 VS Code 的 Apex 扩展访问代码编辑功能,例如代码完成、转到定义、查看 Apex 类和触发器的大纲、重构以及查找代码中的语法错误。

代码补全

当您在 Apex 类或触发器中工作时,Apex 扩展会提供上下文相关的建议。键入时,自动完成将列出方法或变量等成员。自动完成列表还显示建议的文档。使用以下密钥:

  • Ctrl+空格键查看代码完成建议
  • 用于在建议之间导航的箭头键
  • 输入键以从建议中进行选择

如果要更改建议的预选方式,请参阅 IntelliSense – 建议选择。

代码片段

代码片段可用于基架类和接口定义,以及各种语句(如循环和条件语句等)。在 Apex 类或触发器中工作时,请从命令面板运行以查看可用代码片段。您还可以将这些代码片段作为代码完成建议进行查看。Insert Snippet

以下存储库中提供了用于 Salesforce 开发的开箱即用代码段:

  • Apex 代码片段
  • 用于 LWC 开发的 HTML 代码片段
  • 用于 LWC 开发的 JavaScript 代码片段

示例自定义代码段

片段的真正力量在于能够自定义片段供自己使用。按照以下步骤创建自定义 Apex 代码段,以便快速编写简单的 SOQL 查询:

  1. 从命令面板运行“代码段:配置用户代码段”命令。
  2. 选择打开文件。apex.json
  3. 将以下代码片段代码添加到文件中:"SOQL" : { "prefix": "soql", "body": [ "[SELECT ${1:field1, field2} FROM ${2:SobjectName} WHERE ${3:clause}];" ], "description": "Apex SOQL query" }
  4. 保存文件。
  5. 在 Apex 类文件中使用此代码段,方法是键入“soql”并选择将此代码段添加到代码中。
  6. 代码片段将添加到您的 Apex 文件中。[SELECT field1, field2 FROM SobjectName WHERE clause];

有关代码段的详细信息,请参阅 Visual Studio Code 中的代码段。

自定义元数据模板

除了 VS Code 中提供的通用代码片段功能外,还可以使用自定义模板为 Apex 类或触发器创建新的元数据。有关如何设置自定义模板的信息,请参阅自定义代码模板。下面是将模板用于 Apex 类的示例:

  1. 使用自定义代码编辑文件:DefaultApexClass.cls
//Copyright (c) <year><copyright holder>

public with sharing class <%= apiName %> {
      public <%= apiName %>(String prop) {
   this.prop = prop;
      }
  @AuraEnabled
    public static List<SObject> getRecords(){
      try {
          return [Select Id from Sobject];
      } catch (Exception e){
          throw new AuraHandledException(e.getMessage());
      }
    }
}
  1. 从命令面板运行 SFDX: Create Apex Class 命令。
  2. 输入文件名。ApexClass
  3. 接受默认目录位置。

确认该文件包含您的自定义代码。ApexClass.cls

SObjects 的 Intellisense

若要确保 Intellisense 功能正确提示完成建议,必须刷新 SObject 定义。从命令面板运行 SFDX: Refresh SObject Definitions 命令。

您现在可以预览、查看或转到以下定义:

  • 用户定义的 Apex
    • 类(来自扩展类的定义)
    • 构造 函数
    • 接口(来自实现类的定义)
    • 方法
    • 性能
    • 变量(局部变量和类变量)
  • 标准对象
    • 字段(标准字段和自定义字段)
    • 对象定义
  • 自定义对象
    • 领域
    • 对象定义

刷新 SObject 定义时,扩展使用默认组织生成 Apex 类。这些类表示当前用户有权访问的标准对象和自定义对象。我们建议您不要编辑这些具有代表性的 Apex 类,因为这些类是只读的。如果修改了这些建议,可能会影响自动完成建议。此外,刷新 SObject 定义时,更改也会丢失。

每当刷新 SObject 定义时,都会删除并重新生成具有代表性的 Apex 类。您可以通过更新对象和文件来修改 SObjects;或者通过在默认组织中以声明方式进行更改。修改 SObjects 后,请确保同步本地项目和默认组织。.object-meta.xml.field-meta.xml

首次启动 Salesforce CLI 集成扩展(它是 Salesforce 扩展包的一部分)并启用该设置时,如果您的项目不包含任何 Apex 类,则会自动执行 SFDX: Refresh SObject Definitions 命令。添加或编辑标准对象或自定义对象或其字段后,请确保运行此命令。salesforcedx-vscode-apex.enable-sobject-refresh-on-startup

转到定义

Apex 扩展为用户定义的 Apex 提供转到定义支持,例如类和方法、标准对象和自定义对象。

  • 要预览定义,请按住 Ctrl(Windows 或 Linux)或 Cmd (macOS),然后将鼠标悬停在要查看其定义的项目上。
  • 要查看定义,请右键单击该项目并选择“速览定义”,或按 。Alt+F12
  • 若要跳转到定义的位置,请右键单击该项目,然后选择“转到定义”,或按 。F12

查找所有参考资料

您可以找到对用户定义的 Apex 的所有引用,例如类、类变量、枚举、接口、方法和属性。要查找参考文献,请右键单击该项目并选择“转到参考文献”或按 ;或者右键单击该项目,然后选择“查找所有引用”。参考结果将显示在编辑器窗口的左窗格中。Shift+F12

大纲视图

Apex 大纲视图显示在编辑器中打开的 Apex 类或触发器的结构。

  • 要查看文件中的符号列表,请按 (Windows 或 Linux) 或 Cmd+Shift+O (macOS)。Ctrl+Shift+O
  • 要转到其中一个符号,请从列表中选择它。

侧栏中的“资源管理器”还提供“大纲”视图,以帮助您处理项目。

语法错误

任何语法错误(如缺少分号或括号)都会在编辑器中用红色波浪线标记。“问题”面板还列出了语法错误。若要转到包含语法错误的源文件,请双击该错误。

快速修复

当您引用未在源代码中声明的方法时,请使用“快速修复”小组件自动声明该方法。

可以通过以下方式调用声明缺失的方法快速修复:

  • 单击未声明的方法的名称时,编辑器窗口的左侧会出现一个灯泡。单击灯泡,然后单击“yourClass”中的“创建方法”yourMethod“以进行快速修复。
  • 将鼠标悬停在方法名称上,然后在弹出窗口中单击“快速修复”。然后,单击“yourClass”中的“创建方法”yourMethod“以进行快速修复。

注意:“快速修复”小组件的键盘快捷键是 。在 macOS 以及 Windows 和 Linux 中。Cmd+Ctrl+

匿名顶点

在项目中保留 Apex 代码以执行某些任务是很常见的。默认情况下,新项目具有包含示例文件的文件夹顶点。我们建议您使用此文件夹创建使用文件扩展名的 Anonymous Apex 文件。scripts/hello.apex.apex

可以通过两种方式在 Visual Studio 代码中执行 Anonymous Apex:You can execute Anonymous Apex in Visual Studio code in two ways:

  1. 选择任何 Apex 代码并运行命令 SFDX: Execute Anonymous Apex with Currently Selected Text
  2. 运行命令 SFDX: Execute Anonymous Apex with Editor Contents 以执行文件的整个上下文。

在这两种情况下,执行的代码的结果都会打印到输出窗格中。

在项目中保留 Apex 代码以执行某些任务是很常见的。默认情况下,新项目具有一个包含示例文件的文件夹。建议使用此文件夹创建具有文件扩展名的 Anonymous Apex 文件。scripts/apexhello.apex.apex

Apex 测试

内容

  • 探索您的 Apex 测试
  • 从文件内运行 Apex 测试

Apex 扩展允许您运行 Apex 测试来验证代码的功能。

探索您的 Apex 测试

侧栏中的“测试”视图提供了多种功能,例如 LWC 测试和 Apex 测试。若要访问“测试”视图,请单击 VS Code 编辑器左侧“活动栏”中的烧杯图标 ()。如果未看到此图标,请确保项目的根目录中包含文件。如果“测试”视图为空,请检查 Java 设置是否配置正确。sfdx-project.json

使用 Apex 测试功能可以运行一个测试方法、一个类中的测试方法或所有 Apex 测试。

运行测试

  • 为单个方法运行测试:将鼠标悬停在测试方法的名称上,然后单击播放图标(将鼠标悬停文本:运行单个测试)。
  • 为类中的所有方法运行测试:将鼠标悬停在测试类的名称上,然后单击播放图标(悬停文本:运行测试)。
  • 运行所有测试:将鼠标悬停在 Apex 测试视图上,然后单击播放图标 ()。

运行 Apex 测试后,“命令面板”中提供了“SFDX:重新运行上次调用的 Apex 测试类”和“SFDX:重新运行上次调用的 Apex 测试方法”命令。

查看测试结果

  • 通过测试时,类和方法旁边的蓝色图标将变为绿色图标。
  • 对于失败的测试,图标将变为红色。

若要查看测试运行的详细信息,请将鼠标悬停在侧边栏中测试类的名称上。 测试结果将显示在“输出”面板中。

转到测试类定义

若要跳转到测试类、已通过的测试方法或尚未运行的方法的定义,请单击其名称。如果单击失败的测试方法的名称,则会跳转到发生失败的行。

清晰的测试结果

要清除测试结果,请单击 Apex Tests 视图顶部的刷新图标(悬停文本:刷新测试)。

刷新 Apex 测试视图

如果自上次填充“测试”视图以来添加了方法或类,请单击“Apex 测试”视图顶部的刷新图标以获取更新的列表。

从文件内运行 Apex 测试

您可以从编辑器窗口中打开的类文件运行 Apex 测试。单击 Apex 测试方法定义上方的运行测试”或 Apex 测试类定义上方的“运行所有测试”。您可以在“输出”面板中查看测试结果,输出的“失败”部分列出了失败测试的堆栈跟踪。若要导航到导致失败的代码行,请按 Ctrl(Windows 或 Linux)或 Cmd (macOS),然后单击该堆栈跟踪。

突出显示 Apex 测试代码覆盖率

每次运行一个或多个测试时,您都可以检索 Apex 类和 Apex 触发器的代码覆盖率结果。为此,请编辑工作区设置并检查并运行 Apex 测试。现在,您可以在“输出”面板中查看代码覆盖率,该面板显示了每个 Apex 类和 Apex 触发器的覆盖率百分比,以及测试运行结果未涵盖的行。retrieve-test-code-coverage

要查看测试的代码覆盖率,请单击侧栏底部组织别名旁边的三条形图标 (),然后打开正在测试的 Apex 类或 Apex 触发器。单击三条形图标可在启用和禁用代码覆盖率突出显示之间切换。

Apex 重构

内容

  • 重构:重命名
  • 重构:提取常量
  • 重构:提取局部变量

重构:重命名

您可以重命名源中定义的任何有效 Apex 符号:方法、局部变量、字段、属性、构造函数或类型(类、触发器或枚举)。要执行重命名,请右键单击要重命名的符号,然后选择重命名符号

在应用重命名之前,将执行新符号名称的验证。如果验证失败,则会显示一条错误消息,说明无法应用重命名重构的原因。如果新名称不是有效的 Apex 标识符,或者有时新名称与现有标识符名称冲突,则验证将失败。(如果允许这些情况,则可能会导致编译器错误或运行时行为更改。

GIF showing a renaming error

如果新名称与现有标识符名称冲突,我们会尝试在存在冲突的上下文中完全限定对现有名称的引用。

GIF showing a renaming conflict

重构:提取常量

您可以将文本提取到常量中。文本包括:String、Integer、Long、Double、Decimal 和 Boolean。

  1. 在编辑器中,选择要提取的表达式。
  2. 单击装订线中的灯泡,然后选择“提取常量”。
  3. 新常量将声明为从中调用重构的包含类中的字段。
  4. 现在,所选表达式应替换为新字段的名称。

重构:提取局部变量

您可以将表达式提取到局部变量中。

  1. 在编辑器中,选择要提取的表达式。
  2. 单击装订线中的灯泡,然后选择“提取变量”。
  3. 新的局部变量将在调用重构的声明上方的行中声明。
  4. 现在,所选表达式应替换为新局部变量的名称。

调试 Apex

Salesforce 扩展包为每个开发人员提供了丰富的调试选项,无论您处于低代码到专业代码连续体的哪个位置。使用此信息确定哪个 Apex 调试器适合您:

  • Replay Debugger:免费且易于使用。
  • 交互式调试器:传统的许可调试器,可用于实时查看和暂停事件。
  • ISV 调试器:用于直接从许可证管理组织 (LMO) 在客户组织中调试托管包代码。

其他资源

  • 调试日志
  • 使用 Apex Replay Debugger 查找并修复 Bug
  • Apex 类和 Apex 触发器的调试日志过滤

Apex 重播调试器

内容

  • 概述
  • 设置断点和检查点
  • 易于调试
  • 重播调试器设置
  • 重播调试日志
  • 考虑
  • 资源

概述

Apex Replay Debugger 可以与所有组织中的所有非托管代码一起使用。它适用于 Apex 类、触发器、匿名 Apex 和日志文件。这是一个易于使用的调试器,适合大多数调试用例。这是进入调试过程的良好门户 – 根据需要扩展到其他调试器。

设置断点和检查点

在生成用于重播调试的调试日志之前,请设置断点和检查点。断点可以动态设置,不需要部署。检查点是组织中所有对象在某个时间点的快照。每次设置检查点时都必须重新部署检查点。

  1. 要设置行断点,请打开一个 或 文件,然后单击行号左侧的列。.cls.trigger
  2. 有关行断点提供的详细信息,请添加检查点。您最多可以设置五个检查点,以便在代码行运行时获取堆转储。所有局部变量、静态变量和触发器上下文变量在检查点都有更好的信息。触发器上下文变量在日志中不存在,仅在检查点位置可用。
    在 Visual Studio Code 中,检查点是一种断点。检查点的功能类似于从日志重播调试时的断点。在启动 Apex Replay Debugger 会话之前设置并上传检查点。
    1. 在 Apex 类或触发器中最多五行上设置检查点。
    2. 单击要设置检查点的代码行。
    3. 打开命令面板(在 Windows 或 Linux 上按 Ctrl+Shift+P,在 macOS 上按 Cmd+Shift+P)。
    4. 运行 SFDX: Toggle Checkpoint
      • 或者,在行号左侧的装订线中单击鼠标右键,选择“添加条件断点”|”表达式,并将表达式设置为 。Checkpoint
      • 或者,若要将现有断点转换为检查点,请右键单击该断点,然后选择“编辑断点”|”表达式。将表达式设置为 。Checkpoint
    5. 要将检查点上传到组织以收集堆转储信息,请打开命令面板,然后运行 SFDX:在组织中更新检查点

易于调试

快速调试您的 Apex 开发工作,而无需显式设置跟踪标志:

  1. 打开设置了检查点或断点的 Apex 测试类或匿名 Apex 类。
  2. 运行 SFDX:从命令面板启动带有当前文件的 Apex Replay Debugger(或通过右键单击打开的文件来选择命令)。您可以在 Apex 测试文件、匿名 Apex 文件或 Apex 日志文件上调用此命令。

该命令更新组织中的检查点,设置(并在完成后删除)跟踪标志,并生成新的调试日志。对于匿名 Apex 文件,将在窗口中打开一个新的日志文件。

重播调试器设置

设置 Apex Replay Debugger 以调试组织中更复杂的问题,例如可排队的 Apex 或 Apex 触发器问题:

  1. 打开命令面板,然后运行 SFDX:更新组织中的检查点,将检查点上传到组织以收集堆转储信息。注意:如果您修改 Apex 代码或切换检查点,请再次运行此命令以保持同步。
  2. 运行 SFDX:打开 Replay Debugger 的 Apex 调试日志
  3. 在您的组织中,重现您正在调试的问题。
  4. 获取组织中的调试日志列表,运行 SFDX:获取 Apex 调试日志
  5. 单击要重播的日志。日志将下载并在 VS Code 中打开。
  6. 运行 SFDX:使用当前文件启动 Apex Replay Debugger

单步执行所有记录的事件后,调试会话将结束。如果要在日志开头重新开始,请运行 SFDX:使用最后一个日志文件启动 Apex 重播调试器。如果您设置了不同的检查点,请再次上传它们并重复这些步骤。

重播调试日志

重播调试日志并检查变量的值。

  1. 若要切换到 VS Code 的“调试”视图,请单击窗口左边缘的 bug 图标。
  2. 若要重播在调试日志中记录的代码执行,直到命中断点,请单击编辑器顶部的“调试操作”窗格中的绿色播放图标。
  3. 打开日志文件。
  4. 单步执行代码,并在“调试”视图的“变量”部分中检查变量的状态。有关详细信息,请参阅 Visual Studio Code 文档中的调试。
    当您在调试会话期间单步执行代码时,Apex Replay Debugger 会在您设置检查点的行上提供有关堆转储中变量的详细信息。 单步执行所有记录的事件后,调试会话将结束。如果要在日志开头重新开始,请运行 SFDX:使用最后一个日志文件启动 Apex 重播调试器

考虑

使用 Apex Replay Debugger 时,请牢记这些注意事项和已知问题。

  • 只能在组织中使用此调试器。ISV 客户调试在 Apex Replay Debugger 中不可用。若要调试客户的组织,请使用 ISV 客户调试器
  • 一次只能重播一个调试日志。此限制可能会使异步 Apex 难以调试,这会生成多个调试日志。
  • 请务必在上传检查点后立即启动调试会话,因为检查点将在 30 分钟后过期。
  • 请务必在启动会话后立即调试代码,因为堆转储在生成后大约一天过期。
  • 您无法重播由计划的 Apex 生成的调试日志。
  • 长字符串变量值在断点处被截断。在检查点,heap-dump-augmented 变量具有完整的字符串。
  • 在断点处查看标准对象或自定义对象时,只能向下钻取到对象的直接子变量(一级深度)。在检查点,堆转储增强变量可以完全向下钻取到子标准对象,而不仅仅是直接子对象。
  • 无法展开集合(列表、集或映射),因为其成员以字符串形式显示。
  • 修改集合不会更新“调试”视图的“VARIABLES”部分中的集合变量。
  • 不能设置方法或条件断点。
  • 不能在“调试”视图的“监视”部分中计算或监视变量或表达式。
  • 调试时,右键单击“调试”视图的“变量”部分中的变量,然后选择“复制值”即可正常工作。但是,“复制为表达式”和“添加到监视”无法按预期工作。
    • 复制为表达式函数,如复制值:它复制变量的值,而不是复制完整的变量名称。
    • “添加到监视”会将变量的值复制到 WATCH 部分,但由于我们不计算此部分中的变量,因此您只能看到 。<VariableValue>:<VariableValue>

资源

使用 Apex Replay 调试器简化调试工作流程

Apex 交互式调试器

内容

  • 设置 Apex 调试器
  • 调试代码
  • 设置异常断点
  • 将用户和请求类型列入允许名单
  • 考虑

Apex Interactive Debugger(也称为 Apex Debugger)是一种传统的调试器,允许客户使用 VS Code 作为客户端,在沙盒和临时组织中实时调试其 Apex 代码。您可以使用它来:

  • 在 Apex 类和触发器中设置断点。
  • 查看变量,包括 sObject 类型、集合和 Apex System 类型。
  • 查看调用堆栈,包括由 Apex 数据操作语言 (DML) 激活的触发器、方法到方法调用和变量。
  • 与已安装的托管包中的全局类、异常和触发器进行交互。(当您检查具有对您不可见的托管类型的对象时,变量检查窗格中仅显示全局变量。
  • 完成标准调试操作,包括单步执行、单步执行和单步执行,以及运行到断点。
  • 将结果输出到调试控制台。

要调试订阅者的沙盒组织,请使用 ISV Customer Debugger,它是 Apex Interactive Debugger 扩展的一部分。

设置 Apex 调试器

首次在 VS Code 中使用 Apex Debugger 时,请完成以下设置步骤。

注意:您只能将提供给许可证管理组织的默认许可证与 ISV 客户调试器一起使用,以调试订阅者组织。如果您没有 Apex Debugger 许可证,请使用 Replay Debugger。

  1. 将该功能添加到您计划调试的所有类型的临时组织定义文件中:DebugApex
    "features": "DebugApex"
  2. 在 VS Code 中,运行 SFDX:创建默认临时组织
  3. 选择包含该功能的临时组织定义文件。DebugApex
  4. 临时组织准备就绪后,将 Apex Debugger 的权限分配给组织的管理员用户。
    1. 在 VS Code 中,运行 SFDX: Open Default Org
    2. 在浏览器中,从“设置”中输入“快速查找”框,然后选择“权限集”。Permission Sets
    3. 单击“新建”。
    4. 为权限集指定一个您可以记住的名称,例如 .Debug Apex
    5. 在“选择将使用此权限集的用户类型”部分中,从“用户许可证”下拉列表中选择“无”。选择“无”允许您将权限集分配给多种类型的用户。
    6. 保存更改。
    7. 单击“系统权限”。
    8. 单击编辑
    9. 启用 Debug Apex。Debug Apex 所需的其他权限会自动添加。
    10. 保存更改。
    11. 单击“管理分配”。
    12. 单击“添加分配”。
    13. 选择要向其分配权限集的用户,然后单击“分配”。
    14. 单击完成
  5. 可选:在 VS Code 中,运行 SFDX:从默认临时组织拉取源。然后,将新权限集添加到源代码管理存储库。如果您的 Salesforce DX 项目中有权限集的副本,则可以通过运行 将权限分配给临时组织用户。sfdx force:user:permset:assign -n Your_Perm_Set_Name
  6. 在 VS Code 中,为 Apex Debugger 创建启动配置。
    1. 若要打开“调试”视图,请在 VS Code 活动栏中单击 bug 图标(悬停文本:调试)。
    2. 若要创建文件,请单击齿轮图标(悬停文本:Configure 或 Fix launch.json),然后选择 Apex Debugger。(如果您已经创建了此文件,请单击齿轮图标将打开该文件。launch.json
    3. 在阵列中,添加配置。它应包含的最少信息:"configurations""Launch Apex Debugger""configurations": [ { "name": "Launch Apex Debugger", "type": "apex", "request": "launch", "sfdxProject": "${workspaceRoot}" } ]
    4. 保存您的文件。每个项目只需要一个文件,即使您使用多个临时组织也是如此。此文件位于项目的目录中。launch.jsonlaunch.json.vscode

:::注意 Visual Studio Marketplace 中提供了一个名为 Salesforce Apex Debug 的非官方调试器扩展。它与我们的官方扩展名相冲突。请确保在使用我们的扩展程序时禁用该扩展程序。 :::

调试代码

要设置行断点,请打开一个 或 文件,然后单击行号左侧的列。活动断点为红色。非活动断点为灰色。您可以在“调试”视图的“断点”面板中查看断点列表。.cls.trigger

若要启动调试会话,请从“调试”视图顶部的配置下拉菜单中选择“启动 Apex 调试器”。然后,单击绿色播放图标(悬停文本:开始调试)。

在调试会话进行过程中,运行带有断点的代码行的任何同步活动都会导致执行在断点处停止。在执行暂停时,您可以检查调用堆栈并查看变量的当前值。还可以使用调试会话进行时显示在编辑器顶部的“调试操作”窗格单步执行代码,并观察这些值的更改。一次最多可以调试两个线程。有关详细信息,请参阅 Visual Studio Code 文档中的调试。

设置异常断点

要使 Apex Debugger 在调试会话期间引发异常时停止执行,请在异常上设置断点。当命中断点时,调试器会在导致异常的代码行上暂停。“调试”视图中的“调用堆栈”面板显示异常的名称。

若要设置异常断点,请按 Ctrl+Shift+P(Windows 或 Linux)或 Cmd+Shift+P (macOS) 打开命令面板,然后选择“SFDX:配置 Apex 调试例外”。可用异常列表包括 System 命名空间中的异常以及项目中扩展 .从列表中选择一个例外,然后选择“始终中断”。Exception

若要查看异常断点,请运行 SFDX:配置 Apex 调试异常。列表顶部显示具有活动断点的异常类,标记为 。若要删除异常断点,请从列表中选择一个例外,然后选择“永不中断”。Always break

关闭 VS Code 时,将删除所有异常断点。(但是,您的行断点将保留。

将用户和请求类型列入允许名单

若要筛选已调试的请求,请编辑文件以设置允许的用户列表。(该文件位于项目的目录中。如果不使用允许的用户列表,则组织中的所有事件都会在调试会话期间触发调试。将允许列表用户或请求类型设置为仅关注与要调试的问题相关的事件。launch.jsonlaunch.json.vscode

将筛选器添加到配置中:"Launch Apex Debugger"

"configurations": [
  {
    "name": "Launch Apex Debugger",
    "type": "apex",
    "request": "launch",
    "sfdxProject": "${workspaceRoot}",
    "userIdFilter": [],
    "requestTypeFilter": [],
    "entryPointFilter": ""
  }
]

若要自动完成 的潜在请求类型值,请按 Ctrl+空格键。"requestTypeFilter"

要按入口点进行筛选,请输入正则表达式作为 的值。例如,要允许 Visualforce 页面发出的请求,请输入 。"entryPointFilter"MyPage".*/apex/MyPage.apexp"

考虑

使用 Apex Debugger 时,请牢记这些限制和已知问题。

一般注意事项

  • 如果在调试会话进行时编辑 Apex 类,则在保存更改后,断点可能与调试输出不匹配。
  • 在停止会话之前关闭 VS Code 时,调试会话是孤立的。如果您有孤立会话,则无法启动新会话。若要停止活动会话,请在 VS Code 中运行 SFDX:停止 Apex 调试器会话。要管理 Dev Hub 的 Apex Debugger 会话,请转到设置中的 Apex Debugger。
  • 评估功能不可用。
  • 不允许热插拔。这些操作会终止调试会话:
    • 安装或卸载软件包
    • 保存导致组织元数据重新编译的更改
  • 在调试会话期间,无法保存对以下项的更改:
    • 顶点类或触发器
    • Visualforce 页面或组件
    • 闪电资源
    • 权限或首选项
    • 自定义字段或自定义对象

入口点的注意事项

不支持以下入口点:

  • 异步执行的代码,包括异步测试提示:介于一对 和 方法之间的代码可以同步运行。若要调试异步功能,请在测试中使用这些方法。startTeststopTest
  • 批处理、可排队和计划顶点
  • 入站电子邮件
  • 带有注解的代码@future

断点的注意事项

  • 不能设置条件断点。
  • 在 or 方法上设置的断点必须位于方法的主体内。getset
  • 不能在 Execute Anonymous 块中设置断点,也不能单步执行 Execute Anonymous 块。但是,当您使用 Execute Anonymous 命中断点时,我们会在堆栈中显示您的 Execute Anonymous 帧。要查看 Execute Anonymous 代码的变量,请单击堆栈中的此行。

变量的注意事项

  • 您无法监视变量。
  • 不支持动态 Visualforce 和 Lightning 组件中的变量检查。
  • 您无法钻取到 Apex 库对象的实例变量。若要查看这些对象的内容,请使用它们的方法。toString
  • 在循环中声明的变量在循环外可见。
  • 钻取到变量以查看其子项的值。例如,如果运行查询,则结果将嵌套如下。[SELECT Id, ContactId, Contact.accountId, Contact.Account.ownerId FROM Case]Case --> Contact -----> contactId -----> Account --------> accountId --------> ownerId
  • 当您对 EntityDefinition 表中的变量执行 SOQL 查询时,即使您没有显式显示该变量,结果也会包括 。durableIdSELECT

另见

Apex 交互式调试器

ISV 客户调试器

内容

  • 配置 ISV 客户调试器
  • 调试订阅者的组织
  • 续订调试会话
  • 保护订阅者的知识产权
  • ISV 客户调试器注意事项

Salesforce ISV(独立软件供应商)是在 Salesforce Platform 上创建可在 Salesforce AppExchange 上使用的托管软件包的开发人员。包订阅者无权访问托管代码,这可能会使调试具有挑战性。ISV 调试器允许 ISV 在沙盒组织中重现订阅者环境中的问题,以便于调试。借助 ISV 调试器,ISV 可以与订阅者合作,调试特定于订阅者组织的问题。

配置 ISV 客户调试器

ISV Customer Debugger 是 Apex Interactive Debugger () 扩展的一部分,因此除了 Salesforce 扩展包及其必备组件外,您无需安装任何其他内容。您只能调试沙盒组织。salesforcedx-vscode-apex-debugger

  1. 登录到您的许可证管理组织 (LMO),并使用配置文件或权限集在设置中为用户启用“查看和调试托管 APEX”权限。
  2. 通过许可证管理组织 (LMO) 登录订阅者的沙盒。如果您不熟悉此过程,请参阅 ISVforce 指南。有关如何获取订阅者组织的登录访问权限的信息,请参阅向客户请求登录访问权限。有关如何通过订阅者支持控制台登录的信息,请参阅登录订阅者组织。
  3. 在订阅者的组织中,从“设置”中,在“快速查找”框中输入“Apex Debugger”,然后单击“Apex Debugger”。
  4. 单击“启动合作伙伴调试会话”。
  5. 在“使用 VS Code 的 Salesforce 扩展”部分中,若要复制 URL,请单击“复制到剪贴板”。forceide://
  6. 在 VS Code 中,按 Ctrl+Shift+P(Windows 或 Linux)或 Cmd+Shift+P (macOS) 打开命令面板,然后运行 SFDX:创建和设置用于 ISV 调试的项目
  7. 收到指示后,将 URL 粘贴到提示符中,然后按 Enter。forceide://
  8. 收到指示时,接受默认项目名称或输入调试项目的名称,然后按 Enter。
  9. 选择存储项目的位置,然后单击“创建项目”。
  10. 等待项目生成过程完成。VS Code 检索组织中其他包的打包元数据、订阅者的元数据和框架类,将它们转换为源格式,并创建 Salesforce DX 项目。VS Code 还为项目创建启动配置(文件)。此过程可能需要很长时间,尤其是对于包含大量元数据的组织,因此请随时让它保持运行状态,稍后再回来查看。可以在 VS Code 底部的输出面板中监视进度。要显示输出面板,请选择“查看>输出”,然后从“输出”选项卡一角的下拉菜单中选择“Salesforce CLI”。
    项目准备就绪后,VS Code 会在新窗口中打开它。launch.json
  11. 在新窗口中,从“资源管理器”视图中,打开要在其中设置断点的 Apex 类或触发器。
  12. 要设置断点,请单击行号左侧的装订线。
  13. 切换到“调试”视图。
  14. 要启动 Apex Debugger,请单击启动配置下拉菜单旁边的播放图标。

调试订阅者的组织

除了一个值得注意的例外,调试订阅者组织的工作方式与调试其他组织的工作方式相同。例外情况:您无法中断组织中其他用户触发的 Apex 事件。只有“登录身份”用户才能触发 Apex 断点命中事件。

有关 Apex Debugger 的信息,请参阅本自述文件的其余部分。有关在 VS Code 中进行调试的一般信息,请参阅 Visual Studio Code 文档中的调试。

续订调试会话

如果您的会话已过期,请使用启动原始会话时所遵循的所有相同步骤从安装程序启动新会话。

保护订阅者的知识产权

订阅者所在组织的代码是订阅者的知识产权。建议不要在完成调试后保留它。在安装过程中,从存储项目的位置删除整个项目。切勿将订阅者的元数据存储在版本控制系统中。稍后启动新的调试会话时,VS Code 会再次为你下载元数据。

ISV 客户调试器注意事项

有关 Apex Debugger 的一般限制和已知问题,请参阅 Apex Interactive Debugger 一文中的注意事项。使用 ISV 客户调试器时,请牢记这些其他注意事项。

  • 您只能调试沙盒组织。
  • 一次只能调试一个客户。但是,如果您购买了 Apex Debugger 许可证,则可以一次调试多个客户。Apex Debugger 许可证还允许您在沙盒和临时组织中进行调试。
  • 单击“返回到订阅者概述”时,调试会话将终止。调试时保持登录到订阅者的组织,只有在完成调试后才返回到 LMO。

Apex 任务

内容

  • 使用 Anonymous Apex 批量更新帐户评级
  • 资源

此存储库包含示例 Apex 任务,您可以使用 Salesforce 扩展在 Code Builder 或 VS Code 中完成这些任务。我们不断添加到此列表中,因此请确保您经常访问此主题。

使用 Anonymous Apex 批量更新帐户评级

假设您的帐户设置为 由于不利的商业条件。您现在想要对这些帐户进行批量更新,并将其评级更改为 .您希望将此更新限制为收入超过一定金额的中型帐户。RatingColdWarm

此 Anonymous Apex 代码更新年收入大于员工人数或员工人数超过员工人数的账户的评级:$10,000,0001000

  1. 在文件夹中,使用文件扩展名创建一个 Anonymous Apex 文件。 将此代码粘贴到文件中:scripts/apex.apex List<Account> acctList =[SELECT Name, Rating FROM Account WHERE AnnualRevenue > 500000 AND NumberOfEmployees > 100]; for (Account acc: acctList){ if (acc.Rating == 'Cold') { acc.Rating = 'Warm'; update acc; } System.debug(acc.Name + acc.Rating); }
  2. 单击 Execute Anonymous Apex 以执行您的代码。

列出帐户及其更新的评级。DEBUG CONSOLE

资源