部署

导入一些测试数据后,您就完成了设置项目的过程。 现在,您可以开始开发过程了。

从 CLI 创建源文件

要从 CLI 添加源文件,请确保您在适当的 目录。例如,如果您的软件包目录名为 force-app,请在 force-app/main/default/classes 中创建 Apex 类。您可以根据需要组织源 在每个包目录下,文档、自定义对象和自定义对象除外 翻译。

从 API 版本 45.0 开始,您可以使用两种编程模型构建 Lightning 组件: Lightning Web 组件和 Aura 组件。要组织组件的源文件, 您的 Aura 组件必须位于 aura 目录中。您的闪电网络 组件必须位于 LWC 目录中。

执行以下命令之一。

  • apex generate class
  • apex generate trigger
  • cmdt generate object
  • cmdt generate field
  • cmdt generate record
  • cmdt generate records
  • cmdt generate fromorg
  • lightning generate app
  • lightning generate component
  • lightning generate event
  • lightning generate interface
  • lightning generate test
  • schema generate sobject
  • schema generate field
  • schema generate platformevent
  • schema generate tab
  • static-resource generate
  • visualforce generate component
  • visualforce generate page

许多命令都具有以下两个有用的可选标志:

描述
-d,–output-dir用于保存已创建文件的目录。如果您不指明 一个目录,您的源将添加到当前文件夹中。要添加 source 添加到现有目录,指示绝对或相对 路径。如果您不指示绝对路径或相对路径,并且 目录不存在,Salesforce CLI 会尝试为 你。
-t,–template用于文件创建的模板。

提示

如果您想了解有关命令的详细信息,请使用标志运行该命令。例如。–helpsf apex generate class –help

编辑源文件

使用您喜欢的代码编辑器编辑 Apex 类、Visualforce 页面和 组件、Lightning Web 组件和 Aura 组件。您可以 还可以在组织的设置 UI 中进行编辑,然后用于检索对项目的这些更改。为 组织中已有的 Lightning 页面(FlexiPage 文件),请使用快捷方式 从默认浏览器在临时组织中打开 Lightning App Builder。闪电 页面存储在 flexipages 目录中。project retrieve start

在默认浏览器中编辑 FlexiPage,例如,编辑 Property_Record_Page source – 从 FlexiPages 目录执行此命令。

sf org open --source-file Property_Record_Page.flexipage-meta.xml

如果要生成在 Lightning 应用程序生成器中加载 .flexipage-meta.xml 文件但不启动的 URL 您的浏览器,请使用该标志。–url-only | -r

sf org open --source-file Property_Record_Page.flexipage-meta.xml --url-only
  • 针对任何组织进行开发 针对启用了源跟踪的临时或沙盒组织
    进行开发后,您最终会在非源跟踪组织中测试和验证更改。
  • 分配权限集
    创建临时组织并部署源后,有时必须授予用户访问应用程序的权限,尤其是在应用程序包含自定义对象的情况下。
  • 向组织添加数据的方法 组织
    进行开发需要一小组库存数据进行测试。
  • 创建 Lightning 应用程序和 Aura 组件 您可以使用 Salesforce CLI 在本地 Salesforce DX 项目中创建 Lightning 应用程序和 Aura 组件
    。生成的文件位于项目的包目录中。aura
  • 创建 Lightning Web 组件 您可以使用 Salesforce CLI 在本地 Salesforce DX 项目中创建 Lightning Web 组件
    。生成的文件位于项目包目录中的目录中。lwc
  • 创建 Apex 类 您可以使用 Salesforce CLI 在本地 Salesforce DX 项目中创建 Apex 类
    。生成的类文件位于项目的包目录中。classes
  • 创建 Apex 触发器 使用 Apex 触发器
    在更改 Salesforce 记录之前或之后执行自定义操作,例如插入、更新或删除。您可以使用 Salesforce CLI 在本地 Salesforce DX 项目中创建 Apex 触发器。生成的文件位于项目包目录中的目录中。triggers
  • 创建自定义对象
    您可以使用 Salesforce CLI 为本地 Salesforce DX 项目中的新自定义对象生成元数据文件。
  • 执行匿名 Apex 您可以使用 Salesforce CLI 命令在组织中执行匿名的 Apex
    代码块。apex run
  • 运行 Apex 测试 当您准备好测试对源代码的更改时,您可以在命令行上使用 Salesforce CLI 在组织中运行 Apex 测试
    。您还可以从 Salesforce Extensions for VS Code 或第三方持续集成工具(如 Jenkins 或 CircleCI)中运行 Apex 测试。

针对任何组织进行开发

针对启用了源跟踪的临时或沙盒组织进行开发后,您 最终在非源跟踪组织中测试和验证您的更改。

您可以使用 Salesforce CLI 检索元数据并将其部署到 非源跟踪组织,与检索和部署源(在源中)一样容易 format) 到从头开始组织。如果您不熟悉 Salesforce CLI、Salesforce DX 项目结构和 源文件格式解释了源格式和元数据之间的区别 格式。

使用 ,您可以检索 您需要的元数据以源格式发送到本地文件系统(DX 项目)。当您的更改 已准备好进行测试或生产,您可以使用本地文件直接部署到非源代码跟踪的组织。project retrieve startproject deploy start

不确定支持哪些元数据类型或哪些元数据类型支持通配符?请参阅元数据 API Developer 中的元数据类型 指南。package.xml

准备工作

在开始之前,请不要忘记:

  • 创建包含清单 (package.xml) 的 Salesforce DX 项目。跑。project generate –name mywork MyProject –manifest
  • 授权您的非源跟踪组织。如果连接到沙盒,请先编辑 sfdx-project.json 文件以设置为 https://test.salesforce.com 授权组织。不要忘记为您的创建别名 非源跟踪组织。sfdcLoginUrl

需要在命令行上编码的元数据名称

使用该选项检索或部署元数据时,元数据名称中的逗号需要编码才能正常工作。–metadata

不要: sf project deploy start –metadata “Profile:Standard User” –metadata “Layout:Page,Console”

狐狸 sf project deploy start –metadata “Profile:Standard User” –metadata “Layout:Page%2CConsole”

从非源跟踪组织中检索源

使用命令检索 来自没有源跟踪的组织(例如沙盒或生产组织)的源。 如果您在 VCS 中已有源代码和元数据,则可以跳过此操作 步。如果要重新开始,请检索与该功能关联的元数据。 项目或您正在处理的自定义项。project retrieve start

您可以使用以下方法之一检索源格式的元数据:

  • 指定列出要检索的组件的 package.xml。
  • 指定以逗号分隔的元数据组件名称列表。
  • 指定要检索的源文件路径的逗号分隔列表。您可以使用源 path 选项,当 source 存在于本地时,例如,在完成初始 取回。
  • 指定以逗号分隔的包名称列表。

如果您提供的逗号分隔列表包含空格,请将整个 一组双引号中的逗号分隔列表。

要检索:命令示例
清单中列出的所有元数据组件sf project retrieve start –manifest path/to/package.xml
目录中的源文件sf project retrieve –source-dir path/to/source
特定的 Apex 类和源位于目录中的对象sf project retrieve –source-dir path/to/apex/classes/MyClass.cls –source-dir path/to/source/objects
包含空格的元数据sf project retrieve start –metadata “Profile:Standard User”
所有 Apex 类sf project retrieve –metadata ApexClass
特定的 Apex 类sf project retrieve –metadata ApexClass:MyApexClass
包含逗号的布局名称(布局:页面、控制台)sf project retrieve –metadata “Layout:Page%2C Console”
与一个或多个特定包相关的所有元数据sf project retrieve –metadata –package-name DreamHouse

检索元数据时只能指定一个范围参数:、 或 。如果指明 ,则可以包括一个附加 作用域参数。–metadata–source-dir–manifest–package-name

sf project retrieve start --package-name DreamHouse --manifest manifest/package.xml

将源部署到非源跟踪组织

使用命令部署源 到没有源跟踪的组织,例如沙盒或生产组织。project deploy start

您可以使用以下方法以源格式部署元数据:

  • 指定列出要部署的组件的包 .xml
  • 指定以逗号分隔的元数据组件名称列表
  • 指定要部署的源文件路径的逗号分隔列表

如果您提供的逗号分隔列表包含空格,请将整个 一组双引号中的逗号分隔列表。

要部署,请执行以下操作:命令示例
清单中列出的所有组件sf project deploy start –manifest path/to/package.xml
目录中的源文件sf project deploy start –source-dir path/to/source
特定的 Apex 类和源位于目录中的对象sf project deploy start –source-dir path/to/apex/classes/MyClass.cls –source-dir path/to/source/objects
所有 Apex 类sf project deploy start –metadata ApexClass
特定的 Apex 类sf project deploy start –metadata ApexClass:MyApexClass
所有自定义对象和 Apex 类sf project deploy start –metadata CustomObject –metadata ApexClass
所有 Apex 类和名称中包含空格的配置文件sf project deploy start –metadata ApexClass –metadata “Profile:Content Experience Profile”
一组最近验证的组件,但未运行 Apex 测试(通常 称为快速部署)sf project deploy quick –job-id JOBID您可以在运行测试、传递代码覆盖率后运行此选项 要求,并使用命令执行仅检查部署,该命令返回 作业 ID。project deploy validate
即使部署包含警告sf project deploy start –ignore-warnings
无论部署是否包含错误(不建议在以下情况下) 部署到生产组织)sf project deploy start –ignore-errors

删除未跟踪的来源

使用命令删除 来自没有源跟踪的组织(例如沙盒)的组件。project delete source

如果源本地存在于 DX 项目中,您可以通过指定 源的路径或列出单个元数据组件的路径。如果以逗号分隔的列表 您提供的包含空格,将整个逗号分隔的列表包含在一组 双引号。

要删除:命令示例
目录中的源文件sf project delete source –source-dir path/to/source
特定组件,例如 FlexiPagesf project delete source –metadata FlexiPage:Broker_Record_Page
包含空格的特定组件sf project delete source –metadata “Profile:Content Experience Profile”

是否要保留生成的元数据?

通常,当您运行某些 CLI 命令时,包含所有元数据的临时目录是 创建,然后在成功完成命令后删除。但是,保留这些 由于多种原因,文件可能很有用。您可以调试命令期间出现的问题 执行。运行时可以使用生成的包.xml 后续命令,或作为创建包含所有 您关心的元数据。

要在运行这些命令时将所有元数据保留在指定的目录路径中,请将 SF_MDAPI_TEMP_DIR环境变量:

  • project deploy start
  • project retrieve start
  • project delete source
  • project convert mdapi|source
  • org create scratch(如果您的 Scratch 组织定义 包含临时组织设置,而不是组织首选项)

例:

SF_MDAPI_TEMP_DIR=/users/myName/myDXProject/metadata

分配权限集

在创建临时组织并部署源代码后,有时必须将 用户访问您的应用程序,尤其是在您的应用程序包含自定义对象时。

  1. 如果需要,请在临时组织中创建权限集。
    1. 在浏览器中打开临时组织。sf org open --target-org <scratch org username/alias>
    2. 在“设置”中,在“快速查找”框中输入“Perm”,然后选择“权限集”。
    3. 单击“新建”。
    4. 输入权限集的描述性标签,然后单击“保存”。
    5. 在“应用”下,单击“分配的应用”|”编辑
    6. 在“可用应用”下,选择你的应用,然后点按“添加”以移动它 添加到已启用的应用程序。
    7. 点击保存
  2. 从临时组织检索到项目的权限集。sf project retrieve start --target-org <scratch org username/alias>
  3. 将权限集分配给包含应用的组织中的一个或多个用户:sf org assign permset --name <permset_name> --target-org <username/alias>目标用户名必须具有分配权限集的权限。使用标志将权限集分配给 非管理员用户。–on-behalf-ofsf org assign permset --name <permset_name> --target-org <admin-user> --on-behalf-of <non-admin-user>

您还可以使用该命令将权限集许可证分配给用户。它的工作方式与命令类似。

org assign permsetlicenseorg assign permset

向组织添加数据的方法

开发组织需要一小组库存数据进行测试。

有时,临时组织中的库存数据无法满足您的开发需求。 Apex 测试通常会创建自己的数据。因此,如果 Apex 测试是 只测试您在临时组织运行的测试,您可能不需要担心 关于数据暂时。但是,其他测试(如 UI、API 或 用户验收测试,确实需要基线数据。确保您使用 运行每种类型的测试时一致的数据集。

以下各节介绍了可用于 填充您的组织。您使用的命令取决于您当前阶段的 发展。

您还可以使用 CLI 命令 对组织运行 SOQL 查询。虽然该命令不会更改 组织中的数据,它对于搜索或计算数据很有用。您还可以 将其与其他数据操作命令一起使用。请参阅 SOQL 和 SOSL 参考指南,了解使用这些命令时也适用的一般 SOQL 限制。data query

临时组织的注意事项

Scratch 组织附带的数据集与 他们是基于的。例如,Developer Edition 组织通常 包括 10-15 条关键标准对象的记录,例如 Account、 联系和领导。当您进行测试时,这些记录会派上用场 类似于新触发器、工作流规则、闪电网络之类的东西 组件、Aura 组件或 Visualforce 页面。

数据导出 | 导入树命令

SObject Tree Save API 驱动用于导出和 导入数据。这些命令使用 JSON 文件来描述对象和 关系。该命令需要 SOQL 查询来选择组织中的数据 写入 JSON 文件。而不是加载每个记录的所有记录 键入并建立关系,该命令将加载父项和子项 已经在层次结构中。data export|import treedata exportdata import

注意

这些命令旨在供开发人员使用小型 数据。导出查询最多可以返回 2000 条记录。 要导入的文件最多可以有 200 条记录。

数据删除 | 更新插入批量命令

批量 API 2.0 驱动用于从 组织并将该数据存储在源代码管理中。然后,您可以更新或 直接扩充数据,而不是在数据来源的组织中扩充数据。 这些命令使用 CSV 文件将数据文件导入临时组织或 删除您不想再挂在身边的数据集。使用点 用于建立孩子与父母关系的符号。data delete|upsert bulkdata delete|upsert bulk

数据创建 | 删除 | 获取 record 命令

每个人的流程都是独一无二的,您并不总是需要与 你的队友。当您想要创建、修改或删除时 使用命令快速记录单个记录。无数据文件 是需要的。data create|delete|get record

  • 示例:在组织之间导出和导入数据
    假设您已经创建了一组完美的数据来测试您的应用程序,并且它当前驻留在临时组织中。您在第二个临时组织中完成了新功能的编码,推送了源代码,并分配了所需的权限集。现在,您想用来自其他组织的完美数据集来填充临时组织。 如何?请继续阅读!

示例:在组织之间导出和导入数据

假设您已经创建了一组完美的数据来测试您的应用程序,并且它 当前驻留在临时组织中。您在第二个临时组织中完成了对新功能的编码, 推送源代码,并分配所需的权限集。现在,您要填充 使用来自其他组织的完美数据集来临时组织。 如何?请继续阅读!

虽然这个例子有点做作,但它对于获得一些实践经验很有用 替换为 data 命令。该示例引用了 Broker 和 Properties 自定义对象 GitHub 上的 Salesforce DreamHouse LWC 应用程序示例。比方说 要从中导出数据的临时组织具有别名 。同样,您想要进入的临时组织 要导入的数据具有别名 。对于临时组织,假设您有 已经:org-with-dataorg-needs-dataorg-with-data

  • 通过部署 DreamHouse 创建了 Broker 和 Properties 自定义对象 源。
  • 已分配权限集。
  • 用数据填充对象。

然而,对于临时组织来说,它是 假定您已经创建了 Broker 和 Properties 对象并分配了权限 设置但尚未用数据填充对象。org-needs-data

有关这些先决条件任务的说明,请参阅 GitHub 存储库中的自述文件。dreamhouse-lwc

  1. “带数据的组织”临时数据中导出数据 组织。使用命令微调 SELECT 查询,以便返回要导出的确切数据集。此命令输出 结果发送到终端或命令窗口,但不会生成任何文件。data query注意由于 SOQL 查询很长,因此示例命令用反斜杠分隔 更容易阅读。您仍然可以将命令复制并粘贴到终端窗口中,然后 运行它。sf data query --target-org org-with-data --query \ "SELECT Id, Name, Title__c, Phone__c, Mobile_Phone__c, \ Email__c, Picture__c, \ (SELECT Name, Address__c, City__c, State__c, Zip__c, \ Price__c, Beds__c, Baths__c, Picture__c, \ Thumbnail__c, Description__c \ FROM Properties__r) \ FROM Broker__c"
  2. 当您对 SELECT 语句感到满意时,请使用它将数据导出到集合中 的 JSON 文件,使用 data export tree 命令。sf data export tree --target-org org-with-data --query \ "SELECT Id, Name, Title__c, Phone__c, Mobile_Phone__c, \ Email__c, Picture__c, \ (SELECT Name, Address__c, City__c, State__c, Zip__c, \ Price__c, Beds__c, Baths__c, Picture__c, \ Thumbnail__c, Description__c \ FROM Properties__r) \ FROM Broker__c" \ --prefix export-demo --output-dir sfdx-out --plan该命令写入 JSON 文件 添加到 sfdx-out 目录和前缀 文件名替换为字符串 。文件 包括计划定义文件,该文件引用包含数据的其他文件, 每个导出的对象(Broker 和 Properties)对应一个对象。data export treeexport-demo
  3. 将数据导入 org-needs-data 暂存 组织,通过指定计划定义文件到数据导入 tree 命令。sf data import tree --target-org org-needs-data \ --plan sfdx-out/export-demo-Broker__c-Property__c-plan.json使用参数指定完整路径 命令生成的计划执行文件的名称。计划执行文件名始终以 -plan.json 结尾。–plandata export tree

寻找更复杂的示例?easy-spaces-lwc 示例应用程序有一个数据计划,显示如何导入帐户、相关 联系人和 3 级深度自定义对象链。

创建 Lightning 应用程序和 Aura 组件

您可以使用 Salesforce CLI 在本地创建 Lightning 应用程序和 Aura 组件 Salesforce DX 项目。生成的文件位于项目的包目录中。

aura

  1. 打开终端(macOS 和 Linux)或命令提示符 Windows,然后切换到 Salesforce DX 项目目录。
  2. 在要生成 Lightning 应用程序和 Aura 组件。例如,如果要在默认 package 目录下,如果不存在,请创建 force-app/main/default/aura 目录。
  3. 创建 Lightning 应用程序或 Aura 组件;使用 –name 标志指定应用或组件名称,并使用 —output-dir 标志指定 AURA 目录。sf lightning generate app --name myApp --output-dir force-app/main/default/aurasf lightning generate component --type aura --name myAuraComponent --output-dir force-app/main/default/aura

使用命令部署新的 Lightning 应用程序和 Aura 组件添加到您的组织。project deploy start

sf project deploy start --metadata AuraDefinitionBundle:myApp --metadata AuraDefinitionBundle:myAuraComponent

创建 Apex 类

您可以使用 Salesforce CLI 在本地 Salesforce DX 项目中创建 Apex 类。 生成的类文件位于 package 目录。

classes

  1. 打开终端(macOS 和 Linux)或命令提示符 Windows,然后切换到 Salesforce DX 项目目录。
  2. 在要生成 顶点类。例如,如果要在默认包目录中生成它,请创建 force-app/main/default/classes 目录(如果没有) 存在。
  3. 创建 Apex 类;使用 –name 标志指定类名,使用 —output-dir 标志指定目录。sf apex generate class --name myClass --output-dir force-app/main/default/classes

该命令生成两个文件:

  • myClass.cls-meta.xml– 元数据文件
  • myClass.cls– Apex 源文件

默认情况下,该命令创建一个空的 Apex 类。但是,您可以选择不同的 模板,具体取决于您正在创建的内容,通过指定标志。–template

模板描述《Apex 开发人员指南》中的详细信息
DefaultApexClass(默认值)标准 Apex 类。
ApexException(阿佩克斯异常)使用 Apex 内置异常或创建自定义异常。所有例外都有共同点 方法。Exception 类和内置异常
ApexUnitTest(顶点单元测试)使用注释定义类 以及仅包含用于测试应用程序的代码的方法。@isTestisTest 注解
入站电子邮件服务使用电子邮件服务处理入站的内容、标题和附件 电子邮件。Apex 电子邮件服务

本示例选择模板。ApexException

sf apex generate class --name myException --template ApexException --output-dir force-app/main/default/classes

使用命令部署新的 Apex 类添加到您的组织。project deploy start

sf project deploy start --metadata ApexClass:myClass

创建 Apex 触发器

使用 Apex 触发器在更改 Salesforce 之前或之后执行自定义操作 记录,例如插入、更新或删除。您可以使用 Salesforce CLI 创建 Apex 本地 Salesforce DX 项目中的触发器。生成的文件位于 项目。

triggers

  1. 打开终端(macOS 和 Linux)或命令提示符 Windows,然后切换到 Salesforce DX 项目目录。
  2. 在要生成 顶点触发器。例如,如果要在默认包目录中生成它,请创建 force-app/main/default/triggers 目录,如果 不存在。
  3. 生成 Apex 触发器;使用 –name 标志指定触发器名称,使用 —output-dir 标志指定触发器目录。sf apex generate trigger --name myTrigger --output-dir force-app/main/default/triggers默认情况下,生成的触发器用于泛型 sObject 上的事件。使用 and 标志更改这些 默认值。此示例生成一个触发器,该触发器在插入 Account 对象。before insert–event–sobjectsf apex generate trigger --name myTrigger --event 'before insert,after insert' --sobject Account --output-dir force-app/main/default/triggers

该命令生成两个文件。

  • myTrigger.trigger-meta.xml– 元数据文件
  • myTrigger.trigger– Apex 触发器源文件

使用命令部署新的 组织的顶点触发器。project deploy start

sf project deploy start --metadata ApexTrigger:myTrigger --target-org myscratch

创建自定义对象

您可以使用 Salesforce CLI 为本地 Salesforce DX 项目中的新自定义对象生成元数据文件。

  1. 打开终端(macOS 和 Linux)或命令提示符 Windows,然后切换到 Salesforce DX 项目目录。
  2. 运行交互式架构生成 sobject 命令。您必须为新的自定义指定标签 带有 –label 标志的对象。命令 使用此标签为其他对象属性提供智能建议, 例如其 API 名称和复数标签。sf schema generate sobject --label "New Object"回答有关新对象的所有问题,例如生成文件在 您的 Salesforce DX 项目以及是否启用各种对象属性。

创建自定义对象后:

  • 使用交互式命令在新对象上创建自定义字段,该命令会生成 项目中必需的元数据文件。您还可以使用以下命令 在标准对象(如 Account)上创建自定义字段。schema generate field
  • 使用命令为新对象创建自定义选项卡。schema generate tab

然后,将新的自定义对象部署到您的组织。

sf project deploy start --metadata CustomObject:NewObject__c --target-org myscratch

这 首次将新的自定义对象部署到源跟踪组织时,组织 创建其他属性并设置新的默认值。出于这个原因,我们 建议立即检索自定义对象,以便检索本地源文件 已更新为新信息。

执行匿名 Apex

您可以使用 Salesforce CLI 命令在组织中执行匿名的 Apex 代码块。

apex run

  1. 打开终端(macOS 和 Linux)或命令提示符 Windows,然后切换到 Salesforce DX 项目目录。
  2. 运行不带标志的 apex run 命令以打开 交互式 shell。在提示符下,输入所有 Apex 代码;完成后按 CTRL-D。 然后,您的代码将在指定组织中的单个执行匿名请求中执行,或者 默认组织(如果未指定)。sf apex run --target-org myscratch此输出显示了执行 Apex 代码的示例system.debug (‘Hello world!’);

Start typing Apex code. Press the Enter key after each line, then press CTRL+D when finished.
system.debug (‘Hello world!’);
Compiled successfully.
Executed successfully.

58.0 APEX_CODE,DEBUG;APEX_PROFILING,INFO
Execute Anonymous: system.debug (‘Hello world!’);
14:23:06.174 (174742273)|USER_INFO|[EXTERNAL]|0058H000005QWcE|test-ux9lpg9jyyqt@example.com|(GMT-07:00) Pacific Daylight Time (America/Los_Angeles)|GMT-07:00
14:23:06.174 (174785450)|EXECUTION_STARTED
14:23:06.174 (174792639)|CODE_UNIT_STARTED|[EXTERNAL]|execute_anonymous_apex
14:23:06.174 (175417814)|USER_DEBUG|[1]|DEBUG|Hello world!
14:23:06.175 (175529797)|CUMULATIVE_LIMIT_USAGE
14:23:06.175 (175529797)|LIMIT_USAGE_FOR_NS|(default)|
Number of SOQL queries: 0 out of 100
Number of query rows: 0 out of 50000
Number of SOSL queries: 0 out of 20
Number of DML statements: 0 out of 150
Number of Publish Immediate DML: 0 out of 150
Number of DML rows: 0 out of 10000
Maximum CPU time: 0 out of 10000
Maximum heap size: 0 out of 6000000
Number of callouts: 0 out of 100
Number of Email Invocations: 0 out of 10
Number of future calls: 0 out of 50
Number of queueable jobs added to the queue: 0 out of 50
Number of Mobile Apex push calls: 0 out of 10

14:23:06.175 (175529797)|CUMULATIVE_LIMIT_USAGE_END

14:23:06.174 (175598235)|CODE_UNIT_FINISHED|execute_anonymous_apex
14:23:06.174 (175617689)|EXECUTION_FINISHED

使用标志执行 Apex 在文件中编码,而不是以交互方式编写代码。–file

sf apex run --file ~/test.apex

运行 Apex 测试

当您准备好测试对源代码的更改时,您可以在组织中运行 Apex 测试 在命令行上使用 Salesforce CLI。您还可以从 Salesforce Extensions 运行 Apex 测试 适用于 VS Code 或第三方持续集成工具,例如 Jenkins 或 CircleCI 中。

所需的最低用户权限和设置

运行 Apex 测试的用户必须在组织中具有以下用户权限:

  • View 设置和配置
  • API 已启用

此外,请确保在组织的用户界面中启用了“启用流式处理 API”设置。 默认情况下,该设置处于启用状态。

有关详细信息,请参阅用户权限和配置用户界面设置。

运行所有 Apex 测试并查看结果

此命令异步运行指定组织中的所有 Apex 测试,这是默认设置 行为。

sf apex run test --target-org myscratch

该命令不会显示实际测试结果,而是输出带有作业 ID 的命令,然后运行该 ID 进行查看 完整的结果。例如:apex get test

sf apex get test --test-run-id 7078HzRMVV --target-org myscratch

使用该标志同步运行测试。 该命令将等待显示测试结果,直到所有测试完成。–synchronous

sf apex run test --synchronous

运行特定的 Apex 测试

用于运行测试的子集。请参阅了解 Apex Developer 中的部署 可能的测试级别值列表指南。–test-level

sf apex run test --test-level RunLocalTests

使用标志列出要运行的测试类或套件、指定输出格式、查看代码 覆盖结果等。例如,以下命令运行 TestA 和 TestB 测试 类,以 Test Anything Protocol (TAP) 格式提供结果,并请求代码覆盖率 结果。测试在默认组织中运行。

sf apex run test --class-names TestA --class-names TestB --result-format tap --code-coverage

使用标志运行特定的测试方法 使用标准符号 .如果你是 测试托管软件包,请使用 . 如果指定一个没有方法的测试类,则该命令将运行该类中的所有方法。 此示例演示如何运行类中的两个方法以及类中的所有方法。–testsClass.methodnamespace.Class.methodTestATestB

sf apex run test --tests TestA.excitingMethod --tests TestA.boringMethod --tests TestB

下面是相同的示例,但具有命名空间。

sf apex run test --tests ns.TestA.excitingMethod --tests ns.TestA.boringMethod --tests ns.TestB

您可以指定 OR FOR 或两者,但不能同时指定两者。–tests–class-namesapex run test

  • 调试 Apex 如果您使用 Salesforce Extensions for Visual Studio Code (VS Code) 执行开发任务,则可以选择 Apex
    调试器扩展。无论您选择哪种调试器,您都可以在 Apex 类中设置断点并逐步执行它们,以实时检查您的代码以查找错误。可以在 VS Code 中或在命令行上运行 Apex 测试。
  • 生成和查看 Apex 调试日志 Apex 调试日志
    可以记录在任何经过身份验证的组织中执行事务或运行单元测试时发生的数据库操作、系统进程和错误。在适用于 VS Code 的 Salesforce 扩展中启用调试日志,然后使用 VS Code 或 Salesforce CLI 查看日志。

调试 Apex

如果您使用 Salesforce Extensions for Visual Studio Code (VS Code) 进行开发 任务,您可以选择 Apex Debugger 扩展。无论选择哪个调试器,都可以设置 Apex 类中的断点,并逐步执行它们以实际检查代码 是时候找到错误了。可以在 VS Code 中或在命令行上运行 Apex 测试。

Apex 重播调试器

Apex Replay Debugger 无需任何额外许可证即可使用。配置和 使用它,请参阅 Apex Replay Debugger。

Apex 交互式调试器

您的 Dev Hub 组织中必须至少有一个可用的 Apex Debugger 会话。购买 组织的更多会话,请联系您的系统管理员以打开案例。

  • Performance Edition 和 Unlimited Edition 组织包括一个 Apex Debugger 会话。
  • Apex 调试器会话在试用版和开发人员版组织中不可用。
  • 您可以为 Enterprise Edition 组织购买 Apex Debugger 会话。

通过将功能添加到临时组织定义文件,在临时组织中启用 Apex 调试器:DebugApex

"features": "DebugApex"

要配置和使用它,请参阅 Apex 交互式调试器。

ISV Debugger (Salesforce Extensions for VS Code Only)

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

请参阅 Salesforce Extensions 中的 ISV 客户调试器 VS Code 了解详细信息。

生成和查看 Apex 调试日志

Apex 调试日志可以记录数据库操作、系统进程和发生的错误 在任何经过身份验证的组织中执行事务或运行单元测试时。启用调试日志 ,然后使用 VS Code 或 Salesforce 查看日志 命令行界面。

  1. 在 Salesforce Extensions for VS Code 中,准备组织以生成日志并配置 调试器。
    1. 登录到组织。
    2. 对于 Replay Debugger,请运行 SFDX: Turn on Apex Debug Log for Replay 调试器
    3. 为重播调试器或交互式调试器创建启动配置文件。
  2. 运行测试后,获取调试日志列表。sf apex list log --target-org myscratch APPLICATION DURATION (MS) ID LOCATION SIZE (B) LOG USER OPERATION REQUEST START TIME STATUS ─────────── ───────────── ─────── ───────── ──────── ───────── ─────────────── ─────── ─────────── ─────── Unknown 1143 07L9Axx SystemLog 23900 User User ApexTestHandler Api 2017-09-05x Success
  3. 通过将调试日志的 ID 传递给 apex get log 命令来查看调试日志。

sf apex get log –log-id 07L9A000000aBYGUA2

38.0 APEX_CODE,FINEST;APEX_PROFILING,INFO;CALLOUT,INFO;DB,INFO;SYSTEM,DEBUG;VALIDATION,INFO;VISUALFORCE,INFO;WAVE,INFO;WORKFLOW,INFO
15:58:57.3 (3717091)|USER_INFO|[EXTERNAL]|0059A000000TwPM|test-ktjauhgzinnp@example.com|Pacific Standard Time|GMT-07:00
15:58:57.3 (3888677)|EXECUTION_STARTED
15:58:57.3 (3924515)|CODE_UNIT_STARTED|[EXTERNAL]|01p9A000000FmMN|RejectDuplicateFavoriteTest.acceptNonDuplicate()
15:58:57.3 (5372873)|HEAP_ALLOCATE|[72]|Bytes:3