Salesforce CLI 配置和提示

使用 Salesforce CLI 执行大多数开发和测试任务。这些任务包括 授权 Dev Hub 组织,创建临时组织,在 临时组织和 VCS,以及运行测试。

您可以在安装 Salesforce CLI 后立即开始使用它。

CLI 命令分为多个顶级主题。例如,顶级主题包含用于创建和管理的命令 组织,例如 、 和 。顶级主题包含用于管理 配置变量。orgorg listorg create sandboxorg generate passwordconfig

在每个级别运行以获取更多信息。–help

sf --help                      // lists all top-level topics
sf org --help                  // lists all the topics and commands under "org"
sf org create --help           // lists all the commands in the subtopic "org create"
sf org create sandbox --help   // detailed info about the "org create sandbox" command
sf org create sandbox -h       // quick and short info about the "org create sandbox" command

运行以下命令可查看所有可用的 Salesforce CLI 命令:

sf commands

若要查看所有命令及其标志,请运行带有标志的命令:–json

sf commands --json
  • 自动完成 CLI 命令和标志
    部分键入 Salesforce CLI 命令,然后按 Tab 键自动完成该命令。自动完成功能也适用于 Salesforce CLI 标志。
  • 从公司防火墙或 Web 代理后面使用 Salesforce CLI 如果在公司防火墙或 Web 代理
    后面的计算机上安装或更新 Salesforce CLI,有时会收到错误消息。在这种情况下,您必须进一步配置系统。
  • Windows 性能建议 遵循这些建议可提高 Salesforce CLI 在 Windows 上的性能。
  • 配置变量 您可以为当前项目或所有项目设置配置(配置)变量
    。您可以设置两种配置变量:全局变量和局部变量。全局配置变量适用于计算机上的所有项目。本地配置变量适用于特定项目。当从 Salesforce DX 项目目录中运行命令时,本地配置变量会覆盖全局配置变量。
  • 环境变量 您可以设置环境变量
    来配置 Salesforce CLI 使用的某些值。
  • API 版本和源 API 版本在 Salesforce CLI 中的工作原理 Salesforce CLI
    在向组织部署元数据或从组织检索元数据时同时使用 API 版本和源 API 版本。虽然它们听起来相同,并且通常设置为相同的值,但这两种设置的工作方式不同。
  • CLI 参数解析顺序 由于您可以通过多种方式为给定的 Salesforce CLI 命令指定参数,因此了解解析顺序非常重要。
  • 支持 JSON 响应
    Salesforce CLI 命令通常以非结构化、人类可读的格式将其输出显示到控制台 (stdout)。写入日志文件 (stderr) 的消息始终采用 JSON 格式。
  • 按任意顺序指定主题和命令 在终端或命令提示符下键入命令时,可以按任意顺序
    输入主题和命令。Salesforce CLI 确定您指的是哪个命令,并自动运行它而不会出错。
  • 日志消息和日志级别
    Salesforce CLI 将所有日志消息写入文件。CLI 调用将日志消息附加到此正在运行的日志文件中。只有错误会输出到运行 CLI 的终端或命令窗口。USER_HOME_DIR/.sf/sf.log
  • 禁用 Salesforce CLI 数据收集和指标 Salesforce 收集使用情况数据和指标
    (遥测)以帮助改进 Salesforce CLI。我们收集与使用 Salesforce CLI 和插件相关的匿名信息,例如运行了哪些命令和标志,以及性能和错误数据。

自动完成 CLI 命令和标志

部分键入 Salesforce CLI 命令,然后按 Tab 键自动完成该命令。这 自动完成功能也适用于 Salesforce CLI 标志。

您必须先安装自动完成功能,然后才能使用它。

macOS 或 Linux

  1. 在终端中,运行 .sf autocomplete
  2. 按照显示的说明进行操作。
  3. 按一个 Tab 键自动完成命令,按两个 Tab 键获取可用命令列表。 键入完整命令后,输入 ,然后输入两个 Tab 键 获取可用标志的列表。

如果自动完成功能在安装后无法立即起作用,请运行 。然后打开一个新的终端窗口。sf autocomplete –refresh-cache

PowerShell的

Windows 用户可以通过先安装 PowerShell,然后再安装 PowerShell 来使用自动完成功能。 请按照下列步骤操作。

  1. 在 PowerShell 窗口中,运行 .sf autocomplete powershell
  2. 按照显示的说明进行操作。
  3. 按一个 Tab 键自动完成命令,按两个 Tab 键获取可用命令列表。 键入完整命令后,输入 ,然后输入两个 Tab 键 获取可用标志的列表。

如果自动完成功能在安装后无法立即起作用,请运行 。然后打开新的 PowerShell 窗口。sf autocomplete –refresh-cache

从公司防火墙或 Web 代理后面使用 Salesforce CLI

如果您在公司防火墙后面的计算机上安装或更新 Salesforce CLI,或者 Web 代理时,您有时会收到错误消息。在这种情况下,您必须进一步配置您的 系统。

当您在后面安装 Salesforce CLI 后运行命令时,您会收到此类错误 防火墙或 Web 代理。此错误来自 Linux 计算机,但 Windows 和 macOS 用户 有时会看到类似的错误。

@salesforce/cli: Updating CLI... !
 ▸  'ECONNRESET': tunneling socket could not be established, cause=connect EHOSTUNREACH 0.0.23.221:8080 - Local (10.126.148.39:53107)

若要解决此问题,请从终端或 Windows 命令提示符运行以下命令。 替换为您的 Web 代理用户名和密码。如果你的 代理不需要这些值,请省略它们。此外,请替换为公司代理的 URL 和端口。username:pwdproxy.company.com:8080

npm config set https-proxy https://username:pwd@proxy.company.com:8080
npm config set proxy https://username:pwd@proxy.company.com:8080

然后将 HTTP_PROXY 或 HTTPS_PROXY 环境变量设置为代理的完整 URL。为 例如,在 UNIX 上:

export HTTP_PROXY=https://username:pwd@proxy.company.com:8080
export HTTPS_PROXY=https://username:pwd@proxy.company.com:8080

在 Windows 上 机器:

set HTTP_PROXY=https://username:pwd@proxy.company.com:8080
set HTTPS_PROXY=https://username:pwd@proxy.company.com:8080

如果您仍然看到错误

您的代理需要额外的证书颁发机构

如果设置了代理环境变量,但仍然看到错误消息,则可能是 您的代理需要额外的证书颁发机构 (CA)。询问您的 IT 部门在哪里 以查找或下载证书。

将此环境变量设置为指向 CA 文件:NODE_EXTRA_CA_CERTS。

您的企业网络阻止了 Salesforce 主机

您的公司网络可能阻止 Salesforce 主机进行更新或 安装 Salesforce CLI。请与您的 IT 部门联系,将以下网址添加到您的许可名单中:

  • https://developer.salesforce.com/media/salesforce-cli
  • https://registry.npmjs.org

Windows 性能建议

请遵循以下建议来提高 Salesforce CLI 的性能 窗户。

警告

我们建议您在制作之前咨询您的安全管理员 这些建议的配置更改中的任何一个。为您的 Salesforce DX 项目使用本地文件系统,而不是基于云的文件系统。当您的 Salesforce DX 项目和相关文件位于 本地文件系统。基于云的文件系统,例如 OneDrive、Google Drive 和 Dropbox,不断监视文件系统中的所有文件和目录。作为 结果,如果您在这些文件系统之一中创建 Salesforce DX 项目, 它可能会限制 Salesforce CLI 的性能。若要避免此问题,请移动 您的项目目录远离这些系统。使用官方安装程序安装 Salesforce CLI,并从 Windows 中排除 sf 可执行文件 辩护人。

  • Windows Defender 会不断重新扫描可执行文件以查找潜在威胁。此扫描可能会对速度较慢的计算机产生明显的性能影响。
  • 要排除 Salesforce CLI,请使用可执行文件 从 developer.salesforce.com 和 请按照下列步骤操作:sf
    1. 向 Windows 添加排除项 安全性。
    2. 当系统提示您选择文件夹时,请选择 。C:\Program Files\Salesforce CLI

从 Windows Defender 中排除项目文件夹。Windows Defender 也可能不断重新扫描您的项目文件夹,从而导致 负面表现。若要排除项目文件夹,请按照下列步骤操作。从其他安全性中排除 sf 可执行文件 软件。一些公司使用比 Windows Defender 更广泛的安全软件,并且这种安全性 软件可能会导致 Salesforce CLI 执行缓慢。与内部 IT 部门合作 部门排除可执行文件 来自所有安全软件。sf关闭内存密集型程序。Salesforce CLI 可能执行缓慢,因为其他程序(如 Google Chrome 或 VS) 代码占用了过多的内存。尝试重新启动这些程序以释放 记忆。

配置变量

您可以为当前项目或所有项目设置配置(配置)变量 项目。您可以设置两种配置变量:全局变量和局部变量。全局配置变量 应用于计算机上的所有项目。本地配置变量适用于特定项目。 当从 Salesforce DX 中运行命令时,本地配置变量会覆盖全局变量 项目目录。

要为当前项目设置配置变量:

sf config set name <value>

对于本地配置变量,您必须从 Salesforce DX 项目中发出命令 目录。

要为所有项目设置配置变量,请执行以下操作:

sf config set name <value> --global

您可以在任何位置或任何 Salesforce DX 项目中发出全局命令,但它们适用于 您运行的所有 Salesforce CLI 命令。

查看使用该命令设置的局部和全局配置变量。输出列出了 从中运行命令的项目目录和所有全局变量。config list

sf config list
List Config
==========================================================
| Name                Value                       Location 
| ─────────────────── ─────────────────────────── ──────── 
| org-instance-url    https://test.salesforce.com Local    
| org-max-query-limit 20000                       Local    
| target-dev-hub      DevHub                      Local

要返回一个或多个先前设置的配置变量,请使用 。为此命令指定 JSON 输出以便于分析通常很有用 在持续集成 (CI) 环境中。例如,要返回 和 的值:config gettarget-orgtarget-dev-hub

sf config get target-org target-dev-hub --json

要取消设置配置变量,请运行以下命令。例如,要取消设置配置变量:config unsetorg-instance-url

sf config unset org-instance-url

注意

或者,您可以将所有 CLI 配置变量设置为环境变量。环境 变量覆盖配置变量。

配置变量列表

org-api-版本特定项目或所有项目的 API 版本。通常,Salesforce CLI 假定你使用的 CLI 版本与 Dev Hub 组织相同。这个例子 将所有项目的 API 版本(全局)设置为 57.0。

sf config set org-api-version 57.0 --global

是 请确保不要将此配置变量与具有类似名称的 sourceApiVersion 项目选项混淆。有关更多信息,请参阅在 Salesforce CLI 中 API 版本和源 API 版本的工作原理 信息。

环境变量:SF_ORG_API_VERSION

SF_ORG_API_VERSION=57.0

组织自定义元数据模板指定本地目录或克隆的 GitHub 存储库,其中包含 命令使用的默认自定义代码模板。GitHub URL 指向以下任一根目录: 包含您的模板或存储库中包含 模板。例如:project generate

sf config set org-custom-metadata-templates https://github.com/mygithubacct/salesforcedx-templates

环境变量:SF_ORG_CUSTOM_METADATA_TEMPLATES

SF_ORG_CUSTOM_METADATA_TEMPLATES=https://github.com/mygithubacct/salesforcedx-templates

目标组织默认情况下,所有命令都针对其运行的组织的用户名或别名。

sf config set target-org test-scratch-org@example.com

环境变量:SF_TARGET_ORG

SF_TARGET_ORG=test-scratch-org@example.com

目标开发中心默认 Dev Hub 组织的用户名或别名。

sf config set target-dev-hub my-dev-hub@devhub.org

环境变量:SF_TARGET_DEV_HUB

SF_TARGET_DEV_HUB=my-dev-hub@devhub.org

target-devops-center(仅限 DevOps Center 命令)安装 DevOps Center 的组织的用户名或别名。

sf config set target-devops-center myDevOpsCenterOrg@example.com

disable-telemetry默认情况下,Salesforce CLI 收集使用信息、用户环境信息、 和崩溃报告。此选项允许您选择 外。

sf config set disable-telemetry true

环境 变量: SF_DISABLE_TELEMETRYorg-instance-url (英文)托管组织的 Salesforce 实例的 URL。缺省值为 。我们建议您将 此配置变量设置为您组织的 My Domain 登录 URL。您可以找到 My Domain “设置”中“我的域”页面上的登录 URL。https://login.salesforce.com

sf config set org-instance-url https://yoda.my.salesforce.com

环境 变量: SF_ORG_INSTANCE_URL

SF_ORG_INSTANCE_URL=https://yoda.my.salesforce.com

组织最大查询限制Salesforce CLI 命令返回的 Salesforce 记录的最大数量。违约 值为 10,000。

例如,假设您在具有 15,000 个角色的 Salesforce 组织上运行。默认情况下 该命令仅显示 10,000 个角色。将显示一条消息,警告您检索到的命令 只有部分角色。要查看所有这些变量,请将此配置变量设置为更大的 数。sf org list metadata -m Role

sf config set org-max-query-limit 20000

环境变量:SF_ORG_MAX_QUERY_LIMIT

SF_ORG_MAX_QUERY_LIMIT=200000

组织元数据 rest-deploy如果 ,Salesforce CLI 使用元数据 REST API 用于部署。默认情况下,Salesforce CLI 使用 SOAP。使用 REST 的部署不是 受适用于 SOAP 的 39-MB.zip 文件大小限制的约束 部署。true

sf config set org-metadata-rest-deploy true

环境变量:SF_ORG_METADATA_REST_DEPLOY

环境变量

您可以设置环境变量来配置 Salesforce CLI 的某些值 使用。

Salesforce CLI 环境变量

环境变量将覆盖配置变量。设置环境变量 只有您正在运行的命令,才能附加变量:

SF_ORG_API_VERSION=57.0 sf org create scratch -<options>

FORCE_OPEN_URL指定运行 时在浏览器中打开的网页。例如,要打开 Lightning Experience,请将 自。org openlightning

等效于 的标志。–pathorg openFORCE_SHOW_SPINNER设置为在 运行异步 CLI 命令时的命令行。缺省值为 。truefalseFORCE_SPINNER_DELAY指定微调器的速度(以毫秒为单位)。默认值为 60。SF_ACCESS_TOKEN使用命令时指定访问令牌。如果未设置此环境变量,则命令 提示您输入访问令牌。对于持续集成 (CI) 脚本很有用。org login access-token

SF_APPLY_REPLACEMENTS_ON_CONVERT设置为测试字符串替换,而不使用 实际将文件部署到组织。相反,请运行以将文件转换为元数据 API 格式,然后检查 文件以查看将要部署的内容。trueproject convert source

请参阅之前替换代码中的字符串 部署了解详细信息。

SF_AUDIENCE_URL覆盖用于 JWT 身份验证的 aud (audience) 字段 以便它与您所在组织的授权服务器 URL 的预期值匹配 登录。例如,对于生产组织,和/或对于 沙盒。https://MyDomainName.my.salesforce.comhttps://login.salesforce.comhttps://MyDomainNameSandboxName.sandbox.my.salesforce.comhttps://test.salesforce.com

例:

SF_AUDIENCE_URL=https://MyDomainName.my.salesforce.com

SF_CODE_COVERAGE_REQUIREMENT指定在运行时或与标志一起显示为绿色的代码覆盖率百分比。apex run test apex get test–code-coverage

如果 Apex 测试的代码覆盖率百分比等于或高于 此设置显示为绿色。如果百分比较低,则显示为红色。 此环境变量仅适用于人类可读的输出。默认值为 70%.

例:

SF_CODE_COVERAGE_REQUIREMENT=75

SF_CONTAINER_MODE当设置为 时,通常会打开 org 在浏览器中,例如 或 ,而是输出组织的 URL,而不是 打开浏览器。当设置为(默认值 值),这些命令会在浏览器中打开组织。trueorg openorg login webfalse

此环境变量很有用 在无头环境中,例如 Docker 或持续集成。SF_CONTENT_TYPE设置为 时,指定所有 CLI 命令 JSON格式的输出结果。如果将环境变量设置为任何其他值, 或取消设置它,CLI 命令将输出其结果,如 标志。JSON

例:

SF_CONTENT_TYPE=JSON

SF_CUSTOM_ORG_METADATA_TEMPLATES

指定本地目录或克隆的 GitHub 存储库,其中包含 命令使用的默认自定义代码模板。GitHub URL 指向以下任一根目录: 包含您的模板或存储库中包含 模板。project create

例:

SF_CUSTOM_ORG_METADATA_TEMPLATES=https://github.com/mygithubacct/salesforcedx-templates

SF_DISABLE_AUTOUPDATE 或 SF_AUTOUPDATE_DISABLE(var 均有效)

设置为 以禁用 CLI.默认情况下,CLI 会定期检查并安装更新。trueSF_DISABLE_DNS_CHECK设置为停止 Salesforce CLI 命令 需要组织检查组织是否已连接。例如,该命令需要 Dev Hub 组织。这 默认值为 (Always Check.)trueorg create scratchfalse这 如果您在运行某些 Salesforce 时遇到此错误,环境变量很有用 命令行界面 命令。

DomainNotFound: The org cannot be found

第一 尝试设置 SF_DNS_TIMEOUT 环境变量以增加秒数 Salesforce CLI 等待响应。如果这不起作用,请尝试禁用 完全使用 SF_DISABLE_DNS_CHECK 环境变量进行检查。

SF_DISABLE_SOURCE_MEMBER_POLLING设置为 以禁用对组织的轮询 SourceMember 对象。trueproject deploy|retrieve

这些命令将 SourceMember 对象轮询到 跟踪部署或部署后本地源与组织之间的更改 检索完成。但是,如果您有大型元数据部署,则轮询可以 花点时间,甚至暂停一下。有时你根本不需要源跟踪, 例如在持续集成 (CI) 作业中。这些用例非常适合 设置此环境变量。

环境变量适用于两者 临时组织和沙箱。

警告

禁用 SourceMember 时 轮询,CLI 对本地源和 组织元数据不同步。因此,命令的后续运行是不可靠的,并且 由您来同步您的源。要重置源跟踪,请使用以下命令。project deploy|retrieveproject reset trackingSF_DISABLE_TELEMETRY设置为 以禁用 CLI 收集 使用情况信息、用户环境信息和崩溃报告。trueSF_DNS_TIMEOUT指定需要组织等待的 Salesforce CLI 命令的秒数 用于检查组织是否已连接时的响应。例如,该命令需要 Dev Hub 组织。如果 命令在这段时间内没有收到响应,它们会超时。默认值为 3.org create scratch如果在运行某些 Salesforce 命令行界面 命令。

DomainNotFound: The org cannot be found

第一 尝试设置 SF_DNS_TIMEOUT 环境变量以增加秒数 Salesforce CLI 等待响应。如果这不起作用,请尝试禁用 完全使用 SF_DISABLE_DNS_CHECK 环境变量进行检查。

SF_DOMAIN_RETRY指定 CLI 等待 Lightning Experience 自定义的时间(以秒为单位) 域来解析并在新创建的临时组织中可用。

默认 值为 240(4 分钟)。将变量设置为 0 以绕过 Lightning Experience 完全自定义域检查。SF_HIDE_RELEASE_NOTES设置为静音自动显示 运行 时的发行说明。这 缺省值为 。truesf updatefalse

例:

SF_HIDE_RELEASE_NOTES=true

SF_HIDE_RELEASE_NOTES_FOOTER设置为使样板页脚静音 关于在运行 时显示发行说明。缺省值为 。truesf updatefalse

例:

SF_HIDE_RELEASE_NOTES_FOOTER=true

SF_IMPROVED_CODE_COVERAGE将 Apex 测试结果的范围限定为在测试运行期间输入的类,当运行 和 。设置为以改进代码 覆盖。apex run testapex get testtrueSF_JSON_TO_STDOUT当 Salesforce CLI 命令失败时发送消息,而不是 。设置此项 环境变量 to 对 脚本用例。stdoutstderrtrue

例:

SF_JSON_TO_STDOUT=true

SF_LOG_LEVEL设置 CLI 写入日志的消息级别 文件。

例:

SF_LOG_LEVEL=debug

SF_LOG_ROTATION_PERIODSalesforce CLI 轮换日志文件的时间段。轮换日志文件 指制作文件的备份副本,然后清除当前日志文件 重新开始。例如,如果设置为 ,则 Salesforce CLI 每天午夜轮换日志文件。如果设置为 ,则文件每 2 周轮换一次。有关其他时间段选项,请参阅此表中的条目。这 缺省值为 。1d2wperiod1d

例:

SF_LOG_ROTATION_PERIOD=2w

SF_LOG_ROTATION_COUNT轮换日志文件时要保留的备份文件数。缺省值为 。查看SF_LOG_ROTATION_PERIOD了解更多信息 信息2

例:

SF_LOG_ROTATION_COUNT=10

SF_MDAPI_TEMP_DIR在运行某些 CLI 时将文件(元数据格式)放在指定目录中 命令,例如 .挡 由于多种原因,这些文件可能很有用。您可以调试在 命令执行。您可以在以下情况下使用生成的包.xml 运行后续命令,或作为创建清单的起点 包括您关心的所有元数据 大约。project retrieve start

SF_MDAPI_TEMP_DIR=/users/myName/myDXProject/metadata

SF_NEW_VERSION_CHECK_FREQ一个数字,指定显示有关 新 Salesforce CLI 版本的可用性。默认情况下,每个 CLI 命令执行 检查是否有新的 Salesforce CLI 版本可用,并打印出警告 消息(如果找到)。使用此环境变量 with 更改消息的频率 显示。要完全禁用版本检查,请使用 。SF_NEW_VERSION_CHECK_FREQ_UNITSF_SKIP_NEW_VERSION_CHECK

默认值为 ,表示显示警告消息 每次找到新版本时。0

例如,要查看警告消息 1 一天的时间:

SF_NEW_VERSION_CHECK_FREQ=1
SF_NEW_VERSION_CHECK_FREQ_UNIT=days

SF_NEW_VERSION_CHECK_FREQ_UNIT显示警告消息的频率的时间单位 新 Salesforce CLI 版本的可用性。默认情况下,每个 CLI 命令执行 检查是否有新的 Salesforce CLI 版本可用,并打印出警告 消息(如果找到)。使用此环境变量 with 更改消息的频率 显示。要完全禁用版本检查,请使用 。SF_NEW_VERSION_CHECK_FREQSF_SKIP_NEW_VERSION_CHECK

可能的值为 、 、 、 、 和。缺省值为 。dayshoursminutessecondsmillisecondsminutes

例如,要查看警告消息 每天一次:

SF_NEW_VERSION_CHECK_FREQ=1
SF_NEW_VERSION_CHECK_FREQ_UNIT=days

SF_NETWORK_MUTEX_PORT将 SF_USE_NETWORK_MUTEX设置为 时指定本地网络服务器的端口,以便在安装或更新时启用该选项 Salesforce 命令行界面。trueyarn–mutex network

仅当您同时将 SF_USE_NETWORK_MUTEX。默认值为 31997。SF_NPM_REGISTRY将 URL 设置为专用 npm 服务器,其中发布的所有包都是专用的。 我们仅支持不需要的存储库 认证。

例:

SF_NPM_REGISTRY=http://mypkgs.myclient.com/npm/my_npm_pkg

Verdaccio 是 轻量级专用 npm 代理注册表的示例。SF_ORG_API_VERSION特定项目或所有项目的 API 版本。通常,Salesforce CLI 假定你使用的 CLI 版本与开发人员中心相同。SF_ORG_INSTANCE_URL托管组织的 Salesforce 实例的 URL。缺省值为 。我们建议 将此值设置为组织的 My Domain 登录 URL。您可以找到 My Domain “设置”中“我的域”页面上的登录 URL。https://login.salesforce.comSF_ORG_MAX_QUERY_LIMITCLI 命令返回的最大 Salesforce 记录数。默认值 是 10,000。

例:

SF_ORG_MAX_QUERY_LIMIT=200000

SF_ORG_METADATA_REST_DEPLOY设置为使 Salesforce CLI 使用 用于部署的元数据 REST API。默认情况下,Salesforce CLI 使用 SOAP。部署 使用 REST 不受 39 MB .zip 文件大小限制的约束,该限制 适用于 SOAP 部署。trueSF_PRECOMPILE_ENABLE设置为在 运行测试。此变量与命令一起使用。缺省值为 。trueapex run testfalse

重要

Apex 测试预编译的持续时间可能不一致。如 结果,相同的 Apex 测试的运行有时很快,有时则需要时间 外。我们建议您仅在 Apex 测试(不预编译)激活多个 消耗许多系统资源的并发 Apex 编译。trueSF_PROJECT_AUTOUPDATE_DISABLE_FOR_PACKAGE_CREATE对于 ,禁用自动更新到 sfdx-project.json 文件。package createSF_PROJECT_AUTOUPDATE_DISABLE_FOR_PACKAGE_VERSION_CREATE对于 ,禁用自动 对 sfdx-project.json 文件的更新。package version createSF_SKIP_NEW_VERSION_CHECK设置为禁用 Salesforce CLI 版本 检查。默认情况下,每个 CLI 命令执行都会检查是否有新的 Salesforce CLI 版本可用,如果找到警告消息,则打印出警告消息。 虽然此消息很有用,但它通常是不需要的,尤其是在持续集成中 (CI) 环境。缺省值为 。truefalse要继续检查新的 CLI 版本,但更改显示的频率 警告消息,请使用 和 环境 变量。SF_NEW_VERSION_CHECK_FREQSF_NEW_VERSION_CHECK_FREQ_UNITSF_SOURCE_MEMBER_POLLING_TIMEOUT设置为您希望命令在命令之前继续轮询 SourceMember 对象的秒数 超时。该命令轮询 SourceMember 对象,用于跟踪本地源和 部署完成后的组织。Salesforce CLI 根据 它部署的组件。使用此环境变量覆盖计算出的 暂停。project deploy startproject deploy startproject deploy start

例如,如果部署在 3 分钟后超时,请尝试将 超时 5 分钟 (300 秒):

SF_SOURCE_MEMBER_POLLING_TIMEOUT=300

SF_SOURCE_TRACKING_BATCH_SIZE在部署或检索期间设置源跟踪的文件批大小。默认值 是 8,000 (Windows) 或 15,000 (Linux/macOS)。

此环境变量在以下情况下很有用 部署或检索包含许多源代码跟踪文件的大型项目,以及 超出操作系统打开文件限制。虽然部署或检索可能 成功完成,在这种情况下,源跟踪可能会遇到错误。也 增加打开文件限制,例如使用命令 (Linux/macOS),或将环境变量设置为数字 明显低于ulimit -Hn <number>SF_SOURCE_TRACKING_BATCH_SIZEulimit -Hn.SF_TARGET_DEV_HUB指定默认 Dev Hub 组织的用户名,因此不必使用该标志。覆盖配置值的值。–target-dev-hubtarget-dev-hub

示例 将其设置为 别名:

SF_TARGET_DEV_HUB=myDevHub

例 将其设置为组织 用户名:

SF_TARGET_DEV_HUB=mydevhuborg@example.com

SF_TARGET_ORG指定默认组织的用户名,因此您不必使用该标志。覆盖配置变量的值。–target-orgtarget-org

设置示例 它到一个 别名:

SF_TARGET_ORG=myscratchorg

例 将其设置为 用户名:

SF_TARGET_ORG=test-xhquykly9fhl@example.com

SF_USE_GENERIC_UNIX_KEYCHAIN(仅限 Linux 和 macOS)如果需要,请设置为 使用通用 UNIX 钥匙串,而不是 Linux 库或 macOS 钥匙串。在使用 在 CI 环境中使用 ssh 或“无头”的 Salesforce CLI。truelibsecretSF_USE_NETWORK_MUTEX设置为 以在安装或更新时启用该选项 Salesforce 命令行界面。默认值为 (其中 启用该选项。trueyarn–mutex networkfalse–mutex file

Salesforce 命令行界面 插件安装使用。如果你 在安装或更新过程中遇到错误,请尝试将此环境变量设置为 打开本地网络以管理 并发实例。这种行为更 可靠,有时可以修复安装错误。此本地网络的默认端口 服务器是 31997。将 SF_NETWORK_MUTEX_PORT 环境变量设置为使用不同的 港口。yarntrueyarn

有关更多信息,请参阅 yarn 文档。SF_USE_PROGRESS_BAR设置为禁用进度 酒吧。project deploy startfalse

例子:

SF_USE_PROGRESS_BAR=false.

常规环境变量

HTTP_PROXY如果您在 防火墙或 Web 代理后面的计算机,请设置此环境变量。用 公司代理的 URL 和端口,用于 例:

http://username:pwd@proxy.company.com:8080

HTTPS_PROXY如果您在 防火墙或 Web 代理后面的计算机,请设置此环境变量。用 公司代理的 URL 和端口,用于 例:

http://username:pwd@proxy.company.com:8080

NODE_EXTRA_CA_CERTS安装自签名证书。指示指向 证书文件名。然后运行 .sf update

有关详细信息,请参见 NODE_EXTRA_CA_CERTS=file。NODE_TLS_REJECT_UNAUTHORIZED要允许 Node.js 在证书链中使用自签名证书, 表明。0

API 版本和源 API 版本在 Salesforce CLI 中的工作原理

Salesforce CLI 在部署或 向组织检索元数据或从组织检索元数据。虽然它们听起来相同,并且通常设置为相同 值,这两个设置的工作方式不同。

为简单起见,让我们使用本主题中的术语 和 ,并首先定义每个术语 方法。apiVersionsourceApiVersionapi版本该值决定了 HTTPS 请求或响应apiVersion

更深入地挖掘,指的是用于为 HTTPS 提供服务的核心元数据 API 版本 请求或响应。将元数据源部署到组织时,Salesforce CLI 会设置对象的值,并使用 具有 SOAP 或 REST API 的 HTTPS 请求。因为目前没有 REST 用于元数据检索的 API,Salesforce CLI 使用在对象上设置的值来创建 URL 用于 SOAP 端点。apiVersionapiVersionConnectionapiVersionConnectionsourceApiVersion该值决定了形状 HTTPS 请求或响应中的元数据sourceApiVersion

Salesforce CLI 在清单文件中设置元素时使用该值 ()。在以下情况下,该文件包含在 HTTPS 请求或响应中 分别部署或检索。sourceApiVersion<version>package.xmlpackage.xml

以下示例显示了这两个设置如何协同工作:

  • 检索:假设在 22 年夏季向元数据类型添加了一个新字段 release,即 API 版本。如果设置为 ,然后执行该命令,则检索到的元数据将不包含此新字段。然而 设置为的相同检索会返回带有新字段的元数据。55.0sourceApiVersion54.0project retrieve startsourceApiVersion55.0
  • 部署:再次假设在 API 版本中将新字段添加到元数据类型中。如果设置为并尝试 部署包含此新字段的本地元数据文件时,部署将失败。自 使用新字段成功部署元数据,必须设置为或更大。55.0sourceApiVersion54.0sourceApiVersion55.0

Salesforce CLI 设置的优先级

有多种方法可以设置 和 ,以及 Salesforce CLI 确定的多种方式 如果尚未显式设置它们,则为它们的值。使用以下优先级列表可以 确定环境中这两个设置的值。设置在列表的更高位置 优先于较低的。请参阅本节后面的示例以了解这是如何实现的 优先级会影响元数据的部署和检索。apiVersionsourceApiVersionapiVersion:优先顺序

  1. –api-version命令标志。
  2. SF_ORG_API_VERSION环境变量。
  3. org-api-version本地配置变量。
  4. org-api-version全局配置 变量。
  5. 目标组织支持的最高 API 版本。

sourceApiVersion:优先顺序

  1. <version>元素 ( )。package.xml
  2. sourceApiVersion属性。sfdx-project.json
  3. –api-version命令标志。
  4. SF_ORG_API_VERSION环境变量。
  5. org-api-version本地配置变量。
  6. org-api-version全局配置 变量。
  7. 目标组织支持的最高 API 版本。

部署显示设置优先级的示例

这些示例设置了各种用例,然后在部署后显示结果。设置:设置为使用本地配置变量 ()。在文件中设置为。apiVersion55.0sf config set org-api-version=55.0sourceApiVersion54.0sfdx-project.json命令sf project deploy start –source-dir force-app

结果:Salesforce CLI 将部署请求发送到 API 版本端点。清单中随 请求的值为 ,这意味着 正在部署的元数据源处于 API 版本形状中。55.0<version>54.054.0设置:设置为使用本地配置变量 ()。在文件中设置为。apiVersion55.0sf config set org-api-version=55.0sourceApiVersion54.0sfdx-project.json命令sf project deploy start –source-dir force-app –api-version=56.0

结果:Salesforce CLI 发送部署 请求到 API 版本终端节点。清单中 随请求一起发送的值为 ,其中 表示正在部署的元数据源处于 API 版本形状中。56.0<version>54.054.0设置:设置为使用本地配置变量 ()。这 SF_ORG_API_VERSION环境变量设置为 。不是 中定义。apiVersion55.0sf config set org-api-version=55.056.0sourceApiVersionsfdx-project.json命令sf project deploy start –source-dir force-app

结果:Salesforce CLI 将部署请求发送到 API 版本端点。清单中随 请求的值为 ,这意味着 正在部署的元数据源处于 API 版本形状中。56.0<version>56.056.0设置:设置为使用本地配置变量 ()。在文件中设置为。清单文件中的元素已设置 自。apiVersion55.0sf config set org-api-version=55.0sourceApiVersion54.0sfdx-project.json<version>53.0命令sf project deploy start –manifest ./package.xml

结果:Salesforce CLI 将部署请求发送到 API 版本终结点。清单中随 请求的值为 ,这意味着 正在部署的元数据源处于 API 版本形状中。55.0<version>53.053.0设置:无。组织支持的最高 API 版本为56.0命令sf project deploy start –source-dir force-app

结果:Salesforce CLI 将部署请求发送到 API 版本端点。清单中随 请求的值为 ,这意味着 正在部署的元数据源处于 API 版本形状中。56.0<version>56.056.0

检索显示设置优先级的示例

这些示例设置了各种用例,然后在检索后显示结果。设置:设置为使用本地配置变量 ()。在文件中设置为。apiVersion55.0sf config set org-api-version=55.0sourceApiVersion54.0sfdx-project.json命令sf project retrieve start –source-dir force-app

结果:Salesforce CLI 将检索请求发送到 API 版本 SOAP 端点。清单中随 请求的值为 ,这意味着 要检索的元数据源处于 API 版本形状中。55.0<version>54.054.0设置:设置为使用本地配置变量 ()。在文件中设置为。apiVersion55.0sf config set org-api-version=55.0sourceApiVersion54.0sfdx-project.json命令sf project retrieve start –source-dir force-app –api-version 56.0

结果:Salesforce CLI 发送 检索对 API 版本 SOAP 的请求 端点。元素 随请求一起发送的清单的值为 ,这意味着要检索的元数据源处于 API 版本形状中。56.0<version>54.054.0设置:设置为使用本地配置变量 ()。这 SF_ORG_API_VERSION环境变量设置为 。不是 中定义。apiVersion55.0sf config set org-api-version=55.056.0sourceApiVersionsfdx-project.json命令sf project retrieve start –source-dir force-app

结果:Salesforce CLI 将检索请求发送到 API 版本 SOAP 端点。清单中随 请求的值为 ,这意味着 要检索的元数据源处于 API 版本形状中。56.0<version>56.056.0设置:设置为使用本地配置变量 ()。在文件中设置为。清单文件中的元素已设置 自。apiVersion55.0sf config set org-api-version=55.0sourceApiVersion54.0sfdx-project.json<version>53.0命令sf project retrieve start –manifest ./package.xml

结果:Salesforce CLI 将检索请求发送到 API 版本 SOAP 端点。清单中随 请求的值为 ,这意味着 要检索的元数据源处于 API 版本形状中。55.0<version>53.053.0设置:无。组织支持的最高 API 版本为56.0命令sf project retrieve start –source-dir force-app

结果:Salesforce CLI 将检索请求发送到 API 版本 SOAP 端点。清单中随 请求的值为 ,这意味着 要检索的元数据源处于 API 版本形状中。56.0<version>56.056.0

CLI 参数解析顺序

由于您可以通过多种方式为给定的 Salesforce CLI 命令指定参数, 了解解析顺序很重要。

Salesforce CLI 解析命令行标志和参数、定义文件、环境 变量和设置按此顺序排列,这意味着列表顶部的项目采用 优先级低于以下项目:

  • 命令行标志,例如 .–target-org
  • 在命令行中指定的文件中列出的选项。一个例子是临时组织 文件中的定义,您可以使用标志 指定。如果在命令行中指定一个标志,例如 ,其值与 定义文件时,命令行标志优先。–definition-fileorg create scratch–edition
  • 环境变量,例如 SF_TARGET_ORG。
  • 局部配置变量,例如 或 。自 查看本地配置变量,从项目目录运行。target-orgtarget-dev-hubsf config list
  • 全局 CLI 配置变量。要查看全局配置变量,请从任意 目录。sf config list –global

请记住,命令行标志位于优先级列表的顶部。例如,假设您 将 SF_TARGET_ORG 环境变量设置为 。如果指定何时运行命令,则 使用用户名连接到组织。myorg@mydomain.com–target-org myotherorg@myotherdomain.commyotherorg@myotherdomain.com

同样,假设您将配置变量设置为 。如果 指定在运行命令时连接到组织 替换为用户名。target-orgmyorg@mydomain.com–target-org myotherorg@myotherdomain.commyotherorg@myotherdomain.com

支持 JSON 响应

Salesforce CLI 命令通常将其输出显示在控制台 (stdout) 中 非结构化、人类可读的格式。写入日志文件 (stderr) 的消息始终采用 JSON 格式。

要以 JSON 格式查看控制台输出,请指定特定 CLI 命令的标志。–json

sf org display --json

大多数 CLI 命令都支持 JSON 输出。若要确认,请运行带有标志的命令以查看支持的标志。该标志列在“全局标志”下。–help–json

要获取对所有 Salesforce CLI 命令的 JSON 响应而不每次都指定标志,请设置 SF_CONTENT_TYPE 环境 变量。–json

export SF_CONTENT_TYPE=JSON

按任意顺序指定主题和命令

在终端或命令提示符下键入命令时,可以输入主题和 命令以任意顺序排列。Salesforce CLI 确定您指的是哪个命令并自动运行 它没有错误。

例如,假设您想使用 JWT 登录组织,但忘记了确切的命令。所有这些命令都可以工作,而不会返回错误:Command not found

sf login org jwt <flags>
sf org login jwt <flags>
sf jwt org login <flags>

如果您只记得命令的一部分,请仍然运行部分命令以查看所有命令的列表 包含部件的命令。使用箭头突出显示您想要的那个,然后按 返回选择它。

例如,当您键入 时,您会看到以下内容 对话框中,您可以选择所需的命令:sf list

sf list
? Which of these commands do you mean (Use arrow keys)
❯ community list template         Retrieve the list of templates available in your org. 
  env list                        List the environments you’ve created or logged into. 
  env logdrain list               List log drains connected to a specified environment. 
  env var list                    List your environment's config vars in a table. 
  org list shape                  List all org shapes you’ve created. 
  org list snapshot               List scratch org snapshots. 
  package installed list          List the org’s installed packages.

若要缩小一长串可能的命令范围,请提供一个标志。例如,如果运行 ,则仅显示 和 命令,因为它们是唯一具有该标志的命令。sf list –allenv listorg list–all

每个命令仍然有一个规范签名,我们在示例中使用该签名来组织 Salesforce CLI 命令参考。–help

日志消息和日志级别

Salesforce CLI 将所有日志消息写入文件。CLI 调用将日志消息附加到此 运行日志文件。只有错误会输出到运行的终端或命令窗口 CLI.

USER_HOME_DIR/.sf/sf.log

重要

USER_HOME_DIR/.sf 目录中的文件是 由 Salesforce CLI 在内部使用。请勿删除或编辑它们。

日志消息的缺省级别为 。您可以设置 日志级别设置为以下级别之一,按信息从少到多的顺序列出。这 级别是累积的:对于级别,日志文件 还包括 、 和 级别的消息。warndebuginfowarnerror

  • error
  • warn
  • info
  • debug
  • trace
  • fatal

使用 SF_LOG_LEVEL 环境变量全局设置所有 CLI 命令的日志级别。 例如,在 UNIX 上:

export SF_LOG_LEVEL=debug

注意

Salesforce CLI 收集有关其使用情况的诊断信息,并将其报告给 Salesforce,以便开发团队可以调查问题。信息类型 包括命令持续时间和命令调用计数。

轮换日志文件

Salesforce CLI 使用轮换日志文件。默认情况下,每天午夜 Salesforce CLI 创建日志文件的备份副本,然后清除其条目以重新开始。 备份将与当天的日志一起保留过去两天。此行为 确保当前日志文件不会变得太大。

您可以使用以下环境变量更改默认行为:

  • SF_LOG_ROTATION_PERIOD:创建新日志文件的频率,例如默认的 值为一天 () 或两周。1d2w
  • SF_LOG_ROTATION_COUNT:要保留的备份文件数。默认值为 2。

例如,假设您选择的轮换周期为 2 周,计数为 2。这些 值可确保您拥有 当前日志。

禁用 Salesforce CLI 数据收集和指标

Salesforce 收集使用情况数据和指标(遥测)以帮助改进 Salesforce CLI。 我们收集与使用 Salesforce CLI 和插件相关的匿名信息,例如 运行了命令和标志,以及性能和错误数据。

我们使用这些数据来改进 CLI,方法是查看命令执行的趋势以及 CLI 如何 已配置。我们还研究错误数据以改进 CLI 并在我们的 工作(和你的)。使用 CLI 时,会自动注册遥测。

如果希望选择退出遥测,请将配置变量设置为 。disableTelemetrytrue

sf config set disable-telemetry=true --global

或者,您可以通过设置环境变量来选择退出:。SF_DISABLE_TELEMETRY=true

卸载 Salesforce CLI 或插件

卸载 Salesforce CLI 会将其从计算机中完全删除。

macOS 或 Linux

在终端中输入所有这些命令以删除 Salesforce CLI。命令卸载 (v7) 和 (v1 和 v2)。sfdxsf

sudo rm -rf /usr/local/sfdx
sudo rm -rf /usr/local/lib/sfdx
sudo rm -rf /usr/local/bin/sfdx
sudo rm -rf ~/.local/share/sfdx ~/.config/sfdx ~/.cache/sfdx
sudo rm -rf ~/Library/Caches/sfdx
sudo rm -rf /usr/local/sf
sudo rm -rf /usr/local/bin/sf
sudo rm -rf ~/.local/share/sf ~/.config/sf ~/.cache/sf
sudo rm -rf ~/Library/Caches/sf

窗户

以下步骤将卸载 (v7) 和 (v1 和 v2):sfdxsf

  1. 选择“开始”>“控制面板”>“程序”>“程序和功能”。
  2. 选择 @salesforce/cli,然后单击卸载
  3. 在主目录中,删除以下两个目录:
    • .config\sfdx
    • .config\sf

如果仍安装 Salesforce CLI,请删除以下目录:

  • %LOCALAPPDATA%\sfdx
  • %LOCALAPPDATA%\sf

npm

  1. 要卸载 (v7),请从终端或命令运行此命令 提示:sfdxnpmnpm uninstall sfdx-cli --global自 卸载(v1 或 v2),运行此命令 命令:sfnpm uninstall @salesforce/cli --global
  2. 在主目录中,删除这两个目录。
    • Library/Caches/sfdx(在 Windows 上:Library\Caches\sfdx)
    • Library/Caches/sf(在 Windows 上:Library\Caches\sf)

删除授权和日志文件

卸载 Salesforce CLI 后,您的计算机仍具有特定于 CLI 使用情况的数据,例如 作为日志文件和有关您已登录或创建的组织的授权信息。 如果您以后重新安装 Salesforce CLI,保留这些文件很有用,因为您不会 必须重新授权这些组织,才能查看旧日志。但是,如果您想删除 这些文件,也运行这些命令。

在 macOS 或 Linux 上:

sudo rm -rf ~/.sfdx
sudo rm -rf ~/.sf

在 Windows 上,删除家中的这些目录 目录:

  • .sfdx
  • .sf

卸载插件

使用命令卸载 您之前安装的插件。plugins:uninstall

例如,假设您以前安装了该插件的特定版本,但现在您 想要返回到最新版本。卸载插件将带您回到核心 与 CLI 捆绑在一起的版本。从终端或 Windows 命令输入此命令 提示:auth

sf plugins:uninstall auth

如果插件是独立的,并且未与 CLI 捆绑在一起,则卸载它会将其删除 来自 Salesforce CLI。

使用 Docker 映像运行 Salesforce CLI

Salesforce 在 Docker Hub 上发布 Salesforce CLI 的 Docker 容器映像。我们 遵循与我们的安装程序和软件包相同的发布流程。每周我们都会发布一个 当周候选发布 (.接下来的一周,我们将图像重新标记为 .您可以运行 或 CLI 版本,或者 特定编号版本。

npmlatest-rc)latestlatestlatest-rc

对于每个 Salesforce CLI 版本,我们提供两种风格:

  • slim – 使用 TAR 文件和 OpenJDK 11 安装在 Linux 上的 CLI。
  • full – 在 Linux 上安装的 CLI,在完整的 Node.js 安装中使用 npm,以及 OpenJDK 11 以及其他实用程序,例如 .jq

请参阅此网页或下表 确定要使用的映像的名称。

Salesforce CLI 版本类型Docker Hub 映像名称
Slim 最新版本salesforce/cli:latest-slim
完整最新版本salesforce/cli:latest-full
Slim 候选版本salesforce/cli:latest-rc-slim
完整候选版本salesforce/cli:latest-rc-full
超薄特定版本,例如 2.0.1salesforce/cli:2.0.1-slim
完整特定版本,例如 2.0.1salesforce/cli:2.0.1-full

例如,要拉取并运行精简的 CLI 候选发布映像,请执行以下操作:

docker pull salesforce/cli:latest-rc-slim
docker run -it salesforce/cli:latest-rc-slim

然后,您可以运行 Salesforce CLI 命令,例如:

sf version

要退出 Salesforce CLI Docker 容器,请执行以下操作:

exit

您还可以在容器运行后从容器外部远程执行命令,并且 知道容器 ID:

docker exec -it 8b1e2696a243 bin/bash sf version

Salesforce CLI 插件

Salesforce CLI 由一个名为 npm 包和多个插件(也称为 npm 包)组成,其中包含 命令。Salesforce CLI 提供的大多数核心功能都来自插件。

@salesforce/cli

安装 Salesforce CLI 时会自动安装某些插件。这些核心插件 包含支持源代码驱动开发的命令,例如:

  • 创建和管理临时组织和沙箱:plugin-org 插件包含以下命令:和org create scratchorg delete sandbox
  • 在组织和本地项目之间部署和检索元数据:plugin-deploy-retrieve 插件包含 和 等命令。project deploy startproject retrieve preview
  • 授权组织:plugin-auth 插件包含 和 等命令。org login weborg logout
  • 创建和管理临时组织用户:plugin-user 插件包含 和 等命令。org create userorg generate password

有些插件只是在您需要时安装,而不是自动包含 在 Salesforce CLI 安装中。在“实时”(JIT) 中运行命令时 插件,Salesforce CLI 首次安装插件的最新版本 ,然后运行该命令。插件安装会自动发生,尽管我们显示 一条小消息,这样你就知道发生了什么。从那时起,运行包含的任何命令 像往常一样在插件中。当您下次使用 时更新 Salesforce CLI,如果 JIT 插件发布了新版本,则它也会更新。 这些 JIT 插件包含大多数 CLI 用户通常不使用的专用命令, 如:sf update

  • 创建和管理第二代软件包:plugin-packaging 插件包含 和 等命令。package version createpackage install
  • 创建和管理自定义元数据类型:plugin-custom-metadata 包含 和 等命令。cmdt generate objectcmdt generate records
  • 创建和管理临时组织快照和形状:plugin-signups 包含 和 等命令。org create shapeorg delete snapshot
  • 创建和管理 Experience Cloud 站点:plugin-community 插件包含 和 等命令。community createcommunity publish

要确定插件是核心插件还是 JIT,请检查 聚合器插件:@salesforce/cli

  • 核心插件列在本节中。oclif:plugins
  • JIT 插件列在本节中。oclif:jitPlugins

请参阅 Salesforce CLI 状态页面,了解核心和 JIT 插件及其 GitHub 的完整列表 存储库及其状态。

您还可以安装更多插件,例如 CRM Analytics,以合并其他 Salesforce 功能添加到您的开发环境中。你也可以开发自己的插件来添加你的 Salesforce CLI 的自定义功能。请参阅 Salesforce CLI 插件开发人员指南

默认情况下,安装 Salesforce 时会安装最新版本的核心插件 第一次使用 CLI。同样,当您将 CLI 更新到最新版本时,核心 插件以及随后安装的任何 JIT 插件也会更新。

要确定 CLI 中当前安装的插件版本,请运行:

sf plugins --core

该命令显示以下示例输出等信息。

@oclif/plugin-autocomplete 3.0.1 (core)
@oclif/plugin-commands 3.0.6 (core)
@oclif/plugin-help 6.0.5 (core)
@oclif/plugin-not-found 3.0.3 (core)
@oclif/plugin-plugins 4.1.0 (core)
@oclif/plugin-search 1.0.6 (core)
@oclif/plugin-update 4.1.3 (core)
@oclif/plugin-version 2.0.6 (core)
@oclif/plugin-warn-if-update-available 3.0.2 (core)
@oclif/plugin-which 3.0.8 (core)
@salesforce/cli 2.17.10 (core)
apex 2.3.20 (core)
auth 2.8.26 (core)
data 2.6.3 (core)
deploy-retrieve 1.20.0 (core)
info 3.0.1 (core)
limits 3.0.1 (core)
login 2.0.1 (core)
marketplace 1.0.2 (core)
org 2.11.8 (core)
packaging 1.27.1
schema 3.0.1 (core)
settings 2.0.2 (core)
sobject 0.2.15 (core)
source 2.11.0 (core)
telemetry 3.1.0 (core)
templates 55.5.18 (core)
trust 3.0.1 (core)
user 2.3.42 (core)

Uninstalled JIT Plugins:
community 2.4.9
custom-metadata 2.2.12
dev 1.3.2
devops-center 1.2.4
env 3.0.1
functions 1.22.9
signups 1.5.6
@salesforce/sfdx-plugin-lwc-test 1.1.1
@salesforce/sfdx-scanner 3.18.0

如示例输出中所示,如果插件的名称旁边有,则它是与 CLI 捆绑的版本。如果安装特定版本的 插件,或者它作为 JIT 插件自动安装,其版本号或标签是 而是显示。例如,命令是 包含在 JIT 插件和示例中 输出指示已安装版本。(core)packagepackaging1.27.1

输出的末尾还显示 尚未安装的可用 JIT 插件。plugins –core

  • 安装其他版本的 Salesforce CLI 插件
    有时您想使用特定版本的插件。例如,假设 Salesforce 修复了命令中的一个错误。该修复程序已在关联的插件中发布,但 Salesforce 尚未将该插件版本包含在当前的 Salesforce CLI 中。但是,您希望在本地开发环境中测试 bug 修复。按照以下步骤安装具有修复程序的插件版本。apex run
  • 自动
    安装受信任的未签名插件 当您使用命令安装插件时,Salesforce CLI 首先验证其数字签名。如果插件提供有效的签名,CLI 将安装它。否则,Salesforce CLI 不会安装它,直到您回答警告提示并确认您了解风险。当您在命令行中以交互方式安装插件时,此过程效果很好,但可能会阻止批处理作业完成。要在不提示的情况下自动安装插件(即使未签名),请在本地文件系统上创建一个允许列表文件并添加您信任的插件。sf plugins install
  • 发现 Salesforce 插件
    查看这些与特定 Salesforce 功能配合使用的其他插件。这些插件由 Salesforce 创建。
  • 快速卸载所有非核心插件
    有时,您希望快速卸载首次安装 CLI 后安装的所有非核心 Salesforce CLI 插件。

安装其他版本的 Salesforce CLI 插件

有时您想使用特定版本的插件。例如,假设 Salesforce 修复了命令中的一个错误。该修复程序具有 已在相关插件中发布,但 Salesforce 尚未包含该插件版本 在当前的 Salesforce CLI 中。但是,您希望在本地开发中测试错误修复 环境。按照以下步骤安装具有 修复。

apex run

  1. 通过运行 which 命令来确定包含该命令的插件。此示例显示 apex run 命令位于 plugin-apex 插件中。sf which apex run === apex run plugin: @salesforce/plugin-apex
  2. 使用 Salesforce 查找插件的存储库 CLI 状态页面。然后导航到其 GitHub 存储库,例如 @salesforce/plugin-apex,其中列出了所有版本和标记。
  3. 安装包含错误修复的版本。例如,要安装 apex 插件版本 2.2.22,请运行以下命令:sf plugins install apex@2.2.22前面的示例使用插件的短名称,如输出中所示 之。您也可以使用插件的 长名称,这是插件的 package.json 文件中的属性。sf plugins –corenamesf plugins install @salesforce/plugin-apex@2.2.22什么时候 您现在运行 ,插件条目显示新安装的版本 而不是.sf plugins –coreapex(core)apex 2.2.21 (2.2.22)
  4. 完成测试后,通过以下方式返回使用插件的当前版本 卸载标记的版本。sf plugins uninstall apex重要当您使用标记(例如 )安装特定插件版本时,您将一直使用该标记,直到您 显式卸载它。2.2.22

自动安装受信任的未签名插件

当您使用该命令安装插件时,Salesforce CLI 首先验证其数字签名。如果插件 提供有效的签名,CLI 将安装它。否则,Salesforce CLI 不会安装它 直到您回答警告提示并确认您了解风险。这个过程 当您在命令行中以交互方式安装插件时,效果很好,但可能会阻止批处理 完成作业。要在不提示的情况下自动安装插件,即使未签名, 在本地文件系统上创建一个允许列表文件,并添加您信任的插件。

sf plugins install

警告

安装插件并在终端中运行其命令之一后, 命令以您的用户权限运行。因此,该命令可以读取加密数据, 与您经过身份验证的任何 Salesforce 组织通信,或删除您家中的文件 目录。仅安装您信任的未签名和未经验证的插件。

  1. 创建一个名为 unsignedPluginAllowList.json 的文件,并将其放在 这些目录:
    • (Linux 和 macOS):$HOME/.config/sf
    • (视窗)根据您的 Windows 配置,C:\Users\username\.config\sf 或 %LOCALAPPDATA%\sf
  2. 将您信任的插件的名称添加到 JSON 文件中的简单字符串数组中。 例如:[ "sfdx-templates", "salesforce-cmdt", ... ]

发现 Salesforce 插件

查看这些与特定 Salesforce 功能配合使用的其他插件。这些插件 由 Salesforce 创建。ISV 技术支持插件

ISVTE 插件是一个按需技术布道者。它会扫描您的包元数据 和代码,并提供有针对性的反馈,以帮助您改进应用并使其面向未来。 反馈包括详细的元数据清单、有关功能或 要考虑使用的技术、启用资源和安装限制。这 反馈还包括最佳做法、合作伙伴警报、改进 合作伙伴 Trailblazer 分数等。虽然它是为 ISV 和 OEM 合作伙伴设计的, 任何在平台上开发的人都可以使用它。

安装插件时,系统会要求您确认其未签名。答。此行为是预期的。yes

请参阅 GitHub 获取文档和更多内容 信息。CRM Analytics 插件

CRM Analytics 是一个基于云的平台,用于连接来自多个来源的数据, 创建该数据的交互式视图,并在应用程序中共享这些视图。

使用 CRM Analytics CLI 插件通过 Analytics Studio 创建临时组织,该 可用于开发和测试源代码。该插件包含调用 用于管理 CRM Analytics 资产的 Analytics REST API 端点的子集 编程。创建和迭代开发 CRM Analytics 模板。更新和 删除应用、仪表板、镜头和数据流。使用历史记录命令恢复以前的 仪表板和数据流的版本。管理嵌入式的自动安装生命周期 模板化应用。

请参阅使用 Analytics 插件进行开发,了解 Salesforce CLI 提供文档和更多信息。Salesforce 代码分析器插件

Salesforce Code Analyzer 插件是用于源静态分析的统一工具 代码,使用多种语言(包括 Apex),具有一致的命令行界面 和报告输出。我们目前支持 PMD 规则引擎、ESLint 和 RetireJS。

当扫描程序发现问题时,该插件会创建“规则违规”。 开发人员使用此信息作为反馈来修复其代码。集成此插件 添加到您的持续集成 (CI) 解决方案中,以持续执行规则和 确保高质量的代码。

有关文档和详细信息,请参阅 GitHub。

快速卸载所有非核心插件

有时,您想快速卸载所有非核心 Salesforce CLI 插件 在首次安装 CLI 之后安装。

非核心插件的示例包括:

  • 使用该命令显式安装的第三方插件。plugins install
  • 运行其中一个命令时自动安装的 JIT 插件。
  • 与命令链接的本地插件。plugins link

要卸载所有非核心插件,请运行此命令。

sf plugins reset

命令完成后,您只剩下核心 Salesforce CLI 插件,就好像您一样 刚刚从头开始安装了 CLI。

Salesforce CLI 疑难解答

以下是 Salesforce CLI 错误及其修复方法的列表。

  • 使用“医生
    ”解决问题 使用命令快速收集 Salesforce CLI 配置数据并运行诊断测试。使用该命令可以轻松生成信息文件,您可以将其附加到 GitHub 问题或提供给 Salesforce 客户支持。doctor
  • 错误:使用 ENOENT
    命令失败 最近安装 Salesforce CLI 后,当您运行诸如 .project generate

使用医生解决问题

使用命令快速收集 Salesforce CLI 配置数据并运行诊断测试。使用命令轻松生成 您可以附加到 GitHub 问题或提供给 Salesforce 客户的信息文件 支持。

doctor

在没有标志的情况下运行,该命令首先显示基本信息,例如您是否处于 最新的 CLI 版本。然后,它会将您的配置和详细诊断写入 JSON 文件。使用标志 以指定其他目录。–output-dir

sf doctor --output-dir diagnostic-files

使用标志在 调试模式;医生将两者写入单独的文件。将命令封装在双引号中。–commandstdoutstderr*.log

sf doctor --command "org list --all"

要在特定插件上运行诊断测试,而不是 CLI 本身,请使用标志。如果插件没有听医生的话, 然后,您会收到警告,并且没有数据。–plugin

sf doctor --plugin @salesforce/plugin-source

若要创建 GitHub 问题,请使用标志,在提示符处输入标题和浏览器窗口 自动打开,显示部分填充的 GitHub 问题。输入其余信息 关于您的具体问题,请单击提交新问题,然后 Salesforce CLI 团队会收到有关您的问题的警报。–create-issue

CLI 医生已准备好诊断您的所有问题!

错误:命令失败,使用 ENOENT

最近安装 Salesforce CLI 后,当您运行以下命令时,您会收到此错误 如。

project generate

ERROR running project generate:  Command failed with ENOENT: npm root -g --prefix /Users/johndoe/Documents/sf_workspaces/.yo-repository --loglevel error
spawnSync npm ENOENT

答:安装 节点.js。

CLI 弃用策略

例如,Salesforce 在底层 API 时弃用 CLI 命令和标志 变化。

Salesforce CLI 弃用策略为:

  • Salesforce 可以随时弃用命令或标志。
  • 当您运行已弃用的命令时,Salesforce 会为 至少 4 个月。
  • Salesforce 在弃用后 4 个月或更长时间删除已弃用的命令或标志 首先出现警告。
  • 如果使用已弃用但尚未删除的命令或标志,则会收到警告 指定人类可读时的消息 输出。如果指定 JSON 输出,则警告将显示为属性。消息 包括何时删除命令或标志的插件版本。命令帮助 在适当的时候还包括弃用信息。stderr
  • 如果可能,Salesforce 会提供已弃用命令的功能替代方法,或者 旗。
  • Salesforce 在版本中宣布了新的和即将弃用的命令和标志 笔记。

后续步骤

请继续阅读,了解安装 Salesforce CLI 后要执行的操作。

查看示例库中的示例。图库包含 示例应用程序,显示您可以在 Salesforce 平台上构建的内容。他们是 不断更新以纳入最新功能和最佳实践。

使用快速入门快速提升 Salesforce CLI 上速:Salesforce DX Trailhead 项目。然后,使用“与包开发一起构建应用”跟踪直接进入开发阶段。

想要更直观的开发人员体验?我们为您提供保障!查看适用于 VS Code 的 Salesforce 扩展, 它基于 Salesforce CLI 构建。

阅读 Salesforce DX 文档:

  • Salesforce DX 开发人员指南,了解如何管理和 在整个生命周期内在 Salesforce Platform 上开发应用程序。
  • Salesforce CLI 命令参考,获取完整列表 CLI 命令及其使用方法。
  • Salesforce CLI 插件开发人员指南,了解如何 为 Salesforce CLI 开发您自己的插件。

发展路径

Salesforce CLI 是一个功能强大的工具,可用于在 许多不同的方式。以下是一些常见的途径,以及获得所需的步骤 开始并就下一步做什么提出建议。入门:使用 Scratch Orgs 进行开发临时组织是 Salesforce 代码的源代码驱动和一次性部署,并且 元数据。Scratch 组织在 开发过程,并促进自动化测试和持续集成。

  1. 作为管理员用户,在 Developer Edition、试用版或生产组织(如果您是 客户)或您的业务组织(如果您是 AppExchange) 合作伙伴)。如果您没有组织,请注册免费的 Developer Edition Salesforce 开发人员上的组织 网站。
  2. 如果希望开发团队创建临时组织,请将其添加到开发人员中心组织。
  3. (可选)在开发人员中心中打开 Einstein 功能,以消除在 scratch 中启用聊天机器人功能的手动步骤 组织。
  4. 从 GitHub 克隆示例 Salesforce DX 项目 并尝试最常见的 CLI 命令。然后查看 Salesforce DX 开发人员指南并了解 Salesforce DX 项目 配置、临时组织、同步代码和其他开发人员 主题。

入门:开发第二代托管包作为 AppExchange 合作伙伴,使用第二代托管打包 (2GP) 来组织 您的源代码,构建小型模块化包,与您的版本集成 控制系统,并更好地使用您的自定义 Apex 代码。

  1. 作为管理员用户,在 Developer Edition、试用版或生产组织(如果您是 客户)或您的业务组织(如果您是 AppExchange) 合作伙伴)。如果您没有组织,请注册免费的 Developer Edition Salesforce 开发人员上的组织 网站。
  2. 在开发人员中心中,启用第二代 包装。
  3. 如果希望开发团队创建 2GP 托管包,请将其添加到开发人员中心 组织。
  4. 阅读有关 2GP 托管包以及如何创建它们的所有信息 Salesforce DX 开发人员指南。

入门:使用沙盒沙盒是可用于开发的 Salesforce 组织的副本, 测试和训练,而不会影响 生产组织。您可以在生产组织中启用源跟踪,以便开发人员 Developer Pro 沙盒会自动跟踪生产组织和 本地开发工作区。

  1. 启用源跟踪 你的沙盒。
  2. 了解如何使用 Salesforce CLI 通过以下方式创建、管理和开发沙盒 阅读 Salesforce DX 开发人员指南。

Salesforce CLI 设置指南

准备工作

Salesforce CLI 是一个命令行界面,可简化开发和构建 与您的 Salesforce 组织合作时的自动化。使用它来创建和管理组织, 将源文件与组织同步,创建和安装软件包等。

重要

你还在使用(v7)吗? 如果是这样,请参见从 sfdx (v7) 移动到 sf (v2)。sfdx

Salesforce CLI 基于 oclif,这是一个用于构建命令行的开源框架 Node.js 中的接口。在本地计算机或持续集成 (CI) 上运行它 系统。它支持安装自定义插件。

我们每周都会发布新版本的 CLI 和插件。阅读每周发行说明,了解最近和 即将到来的更改。

系统要求

在开始之前,请查看这些系统要求以充分利用 Salesforce CLI 和开发人员工具。操作系统Salesforce CLI 支持以下操作系统。

  • Windows – Windows 8.1 和 Windows Server 2012(64 位和 32 位)或 后
  • Mac—macOS 10.11 或更高版本(Intel 和 M1)
  • Linux – Ubuntu 20.04

代码编辑器或 IDE您可以使用任何代码编辑器。建议使用 Visual Studio Code (VS Code) 并安装适用于 VS Code 的 Salesforce 扩展 专为在 Salesforce Platform 上进行开发而设计。

注意

如果您使用 适用于 VS Code 的 Salesforce 扩展,请记住,某些 CLI 命令 在命令面板中不可用。如果在 VS Code,在集成终端中运行它。开启 API 系统权限Salesforce CLI 需要启用 API 的系统权限,该权限提供 以编程方式访问组织的信息。如果无法运行 CLI 命令,请您的 Salesforce 管理员启用此权限。版本控制系统您可以使用任何版本控制系统 (VCS)。我们建议您使用 GitHub 利用 GitHub 存储库中的示例。节点.js我们将 Node.js 捆绑在每个特定于操作系统的 Salesforce CLI 中 安装。我们包含具有活动 LTS 状态的 Node.js 版本,并与 Node.js 发布计划。如果您更喜欢使用 安装 Salesforce CLI,我们建议您也使用 Active LTS 版本 节点.js。npm

Salesforce CLI 版本支持

Salesforce 仅支持最新版本的 Salesforce CLI。请参阅 Salesforce CLI 发行说明,了解 最新版本信息。

Salesforce CLI 发行说明

使用发行说明了解 Salesforce 的最新更新和更改 命令行界面。

我们每周发布 Salesforce CLI 的新版本。阅读每周发行说明,了解新功能、更改和错误修复 在当前版本和候选版本中。

从 sfdx (v7) 移动到 sf (v2)

如果您当前正在使用 (v7),我们高度 建议移至 (v2)。搬家很简单:你 首先卸载 (v7),然后安装 (v2)。移动后,CLI 命令 在终端或持续集成 (CI) 脚本中运行将继续像以前一样工作。

sfdxsfsfdxsf

重要

您必须先卸载 (v7) 安装 (v2),也可以获取安装 错误。此要求适用于所有安装方法:npm、特定于操作系统的安装程序和 TAR 文件。sfdxsf

确定 (v7) 是否安装在 您的计算机,请在终端(macOS 和 Linux)或命令提示符下运行此命令 (视窗):sfdx

sfdx version
sfdx-cli/7.208.10 darwin-arm64 node-v18.16.0

如果显示的版本开始 如图所示,则 (v7) 已安装在您的计算机上。sfdx-cli/7sfdx

本文档中的各节说明如何将三种安装方法移至 (v2):、macOS 或 Windows 安装程序和 TAR 文件。选择适用于您的环境的部分。如果 您不确定最初如何安装 (v7), 阅读此文档。你是 使用 Docker?阅读我们更新的 Docker 说明,了解如何 获取 (v2) 映像。sfnpmsfdxsf

npm

  1. 打开终端(macOS 和 Linux)或命令提示符 (Windows)。
  2. 使用以下命令卸载 (v7):sfdxnpm uninstall sfdx-cli --global
  3. 验证您是否已通过以下方式卸载 (v7) 运行命令。如果您卸载了 正确地,该命令失败。例如,在 macOS操作系统:sfdxsfdx versionsfdx version -bash: sfdx: command not found
  4. 使用此命令安装 (v2)。sfnpm install @salesforce/cli --global如果你 已安装 (v1),此命令将更新 它到 v2。sf
  5. 验证是否已通过以下方式安装 (v2) 运行以下命令:sfsf version @salesforce/cli/2.0.1 darwin-arm64 node-v18.16.0版本以 开头。以下命令还 返回相同的版本,因为现在是别名 自:@salesforce/cli/2sfdxsfsfdx version @salesforce/cli/2.0.1 darwin-arm64 node-v18.16.0

恭喜,你已成功迁移到 (v2)!sf

macOS 或 Windows 安装程序

安装程序是指 Windows 或 macOS 安装程序文件。.exe.pkg

  1. 卸载当前的 sfdx (v7) 安装。截至 2021 年 10 月,如果您最初安装了 Salesforce CLI 使用特定于操作系统的安装程序,您实际上得到了两个可互操作的 CLI(又名 可执行文件)捆绑在一起:(v7) 和 (v1)。卸载 Salesforce CLI 时,它会 删除这两个可执行文件。sfdxsf
  2. 打开终端 (macOS) 或命令提示符 (Windows)。
  3. 验证您是否已通过以下方式卸载 (v7) 运行命令。如果您卸载了 正确地,该命令失败。例如,在 macOS操作系统:sfdxsfdx versionsfdx version -bash: sfdx: command not found
  4. 使用以下安装程序链接安装 (v2):sf
    • macOS操作系统
      • 苹果芯片
      • 英特尔CPU
    • 窗户
      • 64 倍
      • x86的
  5. 验证是否已通过以下方式安装 (v2) 运行以下命令:sfsf version @salesforce/cli/2.0.1 darwin-arm64 node-v18.16.0版本以 开头。以下命令还 返回相同的版本,因为现在是别名 自:@salesforce/cli/2sfdxsfsfdx version @salesforce/cli/2.0.1 darwin-arm64 node-v18.16.0

恭喜,你已成功迁移到 (v2)!sf

TAR文件

Salesforce CLI 分发 TAR 文件,您可以在所有受支持的操作上安装这些文件 系统。

  1. 卸载当前的 sfdx (v7) 安装。截至 2021 年 10 月,如果您最初安装了 Salesforce CLI 使用 TAR 文件,您实际上得到了两个可互操作的 CLI(又名可执行文件) 捆绑在一起:(v7) 和 (v1)。卸载 Salesforce CLI 时,它会删除 两个可执行文件。sfdxsf
  2. 打开终端(macOS 和 Linux)或命令提示符 (Windows)。
  3. 验证您是否已通过以下方式卸载 (v7) 运行命令。如果您卸载了 正确地,该命令失败。例如,在 macOS操作系统:sfdxsfdx versionsfdx version -bash: sfdx: command not found
  4. 安装 sf (v2)。
  5. 验证是否已通过以下方式安装 (v2) 运行以下命令:sfsf version @salesforce/cli/2.0.1 darwin-arm64 node-v18.16.0版本以 开头。以下命令还 返回相同的版本,因为现在是别名 自:@salesforce/cli/2sfdxsfsfdx version @salesforce/cli/2.0.1 darwin-arm64 node-v18.16.0

恭喜,你已成功迁移到 (v2)!sf

更新持续集成 (CI) 脚本

如果您在持续集成 (CI) 系统中使用 Salesforce CLI,请将您的脚本更新为 使用 (v2)。sfnpm如果您的 CI 脚本使用 安装 Salesforce CLI,请更新它们以使用此命令安装 (v2):npmsf

npm install @salesforce/cli --global

警告

更新 CI 脚本时,如果它包含以下命令以安装 (v7),则必须将其删除:sfdx

npm install sfdx-cli --global

如果你 保留这两个命令,则安装命令 (v2) 将返回错误,并且脚本将失败。sfTAR文件如果您的 CI 脚本使用 TAR 文件安装 Salesforce CLI,请将下载 URL 更新为 指向 (v2) 下载。例如,更改 此 URL:sf

https://developer.salesforce.com/media/salesforce-cli/sfdx/channels/stable/sfdx-linux-x64.tar.gz

自 这 网址:

https://developer.salesforce.com/media/salesforce-cli/sf/channels/stable/sf-linux-x64.tar.gz

请参阅使用 TAR 文件安装 CLI,了解所有操作系统的 URL。

迁移到 sf (v2) 后

以下是您搬家后需要注意的几件事。

  • 通过在终端(macOS 和 Linux) 或命令提示符 (Windows)。sf autocomplete --refresh-cache打开一个新的 终端以使更改生效。自动完成功能在您之前无法正常工作 重新生成其缓存。
  • 每个 CLI 命令执行、Salesforce CLI 的 VS Code 调用和 CI 脚本都有效 在 (v7) 和 (v2) 中相同。如果发现差异,请打开 GitHub 问题。sfdxsf
  • 您可以使用 或 运行命令;它们现在是一样的。例如,这两个命令 处决是一样的。sfdxsfsf project deploy start sfdx project deploy start里面的所有东西都可以在 中使用,并且相同 名称和标志。sfdxsf

为什么要搬家?

sf(v2) 已于 2023 年 7 月 12 日正式发布。 当时,我们停止发布对 (v7) 的更新 和 (v1)。获取新的 Salesforce CLI 功能和错误 修复,您必须使用 (v2)。sfdxsfsf

此外,(v7) 的大小是 (v2) 的两倍,因为它还包括 (v1)。要减小 Salesforce CLI 安装和下载的大小, 我们建议您迁移到 (v2)。sfdxsfsfsf

排查 npm 错误:代码 EEXIST

如果您尝试在不先卸载 (v7) 的情况下使用 (v2) 进行安装,则会出现以下错误:sfnpmsfdx

npm ERR! code EEXIST
npm ERR! path /Users/user/.nvm/versions/node/v18.16.0/bin/sfdx
npm ERR! EEXIST: file already exists
npm ERR! File exists: /Users/user/.nvm/versions/node/v18.16.0/bin/sfdx
npm ERR! Remove the existing file and try again, or run npm
npm ERR! with --force to overwrite files recklessly.

npm ERR! A complete log of this run can be found in:
npm ERR!     /Users/user/.npm/_logs/2023-06-28T22_16_15_181Z-debug-0.log

当 (v2) 正式发布时,在持续集成 (CI) 系统中也会遇到此错误。如果您的 CI 脚本 已经用于安装 (v7) 和 (v1), 并且您不更新脚本,错误可能会从 7 月 12 日开始自动发生, 2023.sfnpmsfdxsf

若要解决此问题,请从脚本中删除此命令。

npm install sfdx-cli --global

保留此命令,该命令将安装 (v2)。sf

npm install @salesforce/cli --global

返回 sfdx (v7)

我们预计您没有任何理由返回 (v7)。但是,如果您必须返回,请按照下列步骤操作。sfdx

  1. 卸载 sf (v2)。
  2. 安装 (v7)。sfdx对于 ,在终端(macOS 和 Linux)中运行此命令,或者 命令提示符 (视窗)。npmnpm install sfdx-cli --global为 安装程序和 TAR 文件,请参阅 (v7) JSON 文件,其中列出了每个受支持操作系统的最新下载 URL。 有关详细信息,请参阅本主题。sfdx注意截至 2023 年 7 月 12 日,下载 Salesforce CLI 的网页已更新为 仅下载 (v2)。sf
  3. 在 CI 脚本中,返回命令或 您之前使用的 TAR 下载 URL。npm

安装 Salesforce CLI

使用特定于操作系统的工件在计算机上安装 Salesforce CLI,例如 与 macOS 一样,TAR 文件或使用 .

.pkgnpm

选择一种方法在计算机上安装。例如,不要在同时使用两者的 macOS 上安装 文件和 . 两种方式安装它可能会导致计算机上出现令人困惑的路径问题,有时没有 一个明显的错误,因此难以诊断。.pkgnpm

  • 在 macOS 上安装 CLI 使用 .pkg 文件在 macOS
    上安装 Salesforce CLI。
  • 在 Windows 上安装 CLI 使用 .exe 文件在 Windows
    上安装 Salesforce CLI。
  • 使用 TAR 文件安装 CLI Salesforce CLI 分发可在所有受支持的操作系统上安装的 TAR 文件
  • 使用 npm
    安装 CLI 如果您在计算机上安装了 Node.js,则可以用于安装 Salesforce CLI。此方法允许您从命令行安装 Salesforce CLI,对于持续集成 (CI) 用例特别有用。npm
  • 安装旧版本的 Salesforce CLI 我们建议您始终使用 Salesforce CLI
    的最新版本或候选版本。但是,我们也理解有时您需要旧版本的 CLI。
  • 验证安装并获取版本信息
    要确保您已正确安装 Salesforce CLI,请运行以下命令以查看可用命令的版本和列表。

在 macOS 上安装 CLI

使用 .pkg 文件在 macOS 上安装 Salesforce CLI。

  1. 下载 .pkg 文件。
  2. 运行 .pkg 文件,例如双击它 查找器,并回答所有提示。
  3. 安装完成后,重新启动终端窗口或 IDE 以确保 Salesforce CLI 可用。

另见

  • 验证安装并获取版本信息
  • 禁用 CLI 的自动更新

在 Windows 上安装 CLI

使用 .exe 文件在 Windows 上安装 Salesforce CLI。

  1. 下载 .exe 文件。
  2. 运行 .exe 文件,例如双击它 Windows 资源管理器,并回答所有提示。(可选)在“选择组件”窗口中,如果需要 Microsoft Defender 防病毒软件 若要在扫描时排除已安装的 Salesforce CLI 文件,请选择“将 %LOCALAPPDATA%\sf 添加到 Windows Defender 排除项”。此选项最初被取消选择,因为我们想要默认的 Windows 安装更安全。但从防病毒扫描中排除 CLI 文件 提高了 Salesforce CLI 的性能,这就是我们为您提供选项的原因。与 关心。
  3. 安装完成后,重新启动命令提示符、PowerShell 窗口或 IDE 以确保 Salesforce CLI 可用。

警告

Salesforce CLI 在本机 Windows 命令提示符下效果最佳 (cmd.exe) 和 Microsoft Windows PowerShell。 我们不建议将 Salesforce CLI 与 Linux 终端模拟器(如 Windows 10)一起使用 适用于 Linux、cygwin 或 MinGW 的子系统,因为对 bug 的支持有限。

使用 TAR 文件安装 CLI

Salesforce CLI 分发 TAR 文件,您可以在所有受支持的操作上安装这些文件 系统。

使用此表查找适用于您的操作系统的 TAR 文件(.tar.gz 或 .tar.xz)的未版本控制 URL。当我们发布新版本时 每周,我们还会更新这些 URL,以便它们指向最新的 版本。非版本控制的 URL 对于 CI 用例特别有用。该表还包括 清单 URL,显示每个文件的版本控制 URL。

操作系统tar文件清单
Linux操作系统sf-linux-x64.tar.gzsf-linux-x64.tar.xzsf-linux-arm.tar.gzsf-linux-arm.tar.xzsf-linux-arm64.tar.gzsf-linux-arm64.tar.xzsf-linux-x64-buildmanifestsf-linux-arm-build清单sf-linux-arm64-buildmanifest
macOS操作系统sf-darwin-x64.tar.gz (英特尔CPU)sf-darwin-x64.tar.xz (英特尔 CPU)sf-darwin-arm64.tar.gz (苹果芯片)sf-darwin-arm64.tar.xz (苹果芯片)sf-darwin-x64-buildmanifest (英特尔 CPU)sf-darwin-arm64-buildmanifest (Apple 芯片)
窗户sf-win32-x64.tar.gzsf-win32-x64.tar.xzsf-win32-x86.tar.gzsf-win32-x86.tar.xzsf-win32-x64-buildmanifestsf-win32-x86-buildmanifest

重要

我们强烈建议您使用 安装程序或安装 Salesforce Windows 上的 CLI。但是,如果您决定使用 Windows TAR 文件,则必须首先安装 一个单独的程序,如 7Zip,用于提取文件内容。npm

在这些示例中,假设您正在 Linux 上和主目录的子目录中安装 Salesforce CLI。cli/sf

  1. 打开终端窗口。
  2. 下载这些 TAR 文件之一。或者,在终端中运行 wget 以获取 TAR 文件。wget https://developer.salesforce.com/media/salesforce-cli/sf/channels/stable/sf-linux-x64.tar.xz
  3. 创建要安装 Salesforce CLI 的目录。mkdir ~/cli/sf
  4. 解压缩 TAR 文件的内容:tar xJf sf-linux-x64.tar.xz -C ~/cli/sf --strip-components 1-C解压缩 ~/cli/sf 目录中的内容,同时删除根路径组件。–strip-components 1注意此示例仅显示 Linux 上命令的一组可能标志。对于您操作的其他选项 系统,请参阅文档。tartar
  5. 更新 PATH 环境变量以包含 Salesforce CLI bin 目录。例如,为当前终端设置它 会期:export PATH=~/cli/sf/bin:$PATH要永久更新 PATH,请将相应的条目添加到 shell 的 配置文件。例如,如果您使用 Bash shell,请将以下行添加到 ~/.bashrc 或 ~/.bash_profile 文件中:PATH=~/cli/sf/bin:$PATH

使用 npm 安装 CLI

如果您在计算机上安装了 Node.js,则可以用于安装 Salesforce CLI。此方法允许您安装 命令行中的 Salesforce CLI,对于持续集成特别有用 (CI) 用例。

npm

如果您没有管理员权限,则此安装方法是一个不错的选择 您的工作站,或者如果组策略阻止 CLI 安装和更新。安装 Salesforce CLI 不需要 root 权限。npm

  1. 打开终端(macOS 和 Linux)或命令提示符 (Windows)。
  2. 确保 Node.js 的长期支持(活动 LTS)版本安装在 计算机。要安装 LTS 版本,请转到 https://nodejs.org/en/download/。要检查 您的版本号,请从终端或命令提示符运行以下命令:node --version
  3. 要安装 Salesforce CLI,请运行以下命令。npm install @salesforce/cli --global如果您在使用 macOS 或 Linux 安装 Salesforce CLI 时收到权限错误,我们不建议使用 .请参阅修复 npm 权限。npmsudo

安装旧版本的 Salesforce CLI

我们建议您始终使用 Salesforce 的最新版本或候选版本 但是,我们也知道有时您需要旧版本的 CLI。

安装

如果您使用安装程序安装了 Salesforce CLI,请使用该标志更新到旧版本。例如,要更新到版本,请在终端(macOS 和 Linux)或 命令提示符 (Windows)。–version2.0.1

sf update --version 2.0.1

使用该标志列出所有可用的较旧 您可以更新到的版本。输出还显示是否已经有一个本地 复制或必须下载。–available

sf update --available

用于选择版本 交互。–interactive

使用此命令可返回到当前 版本。

sf update stable

npm

要更新到旧版本的 Salesforce CLI,请使用 在包名称后指定版本。例如,要更新 to version ,在终端 (macOS 和 Linux) 或命令提示符 (Windows)。npm @<version>@salesforce/cli2.0.1

npm install @salesforce/cli@2.0.1 --global

若要返回到当前版本,请运行此命令。

npm install @salesforce/cli --global

请参阅 Salesforce CLI npmjs.com 页面,了解所有列表 版本。我们保留了所有旧版本的 @salesforce/cli 和 sfdx-cli(已弃用)npm 包。

TAR文件

我们发布 JSON 文件,其中列出了最新版本的安装程序的下载 URL,以及 每个受支持的操作系统的 TAR 文件。我们不断向列表中添加新版本; 版本在列表中保留 20 周。我们保留 TAR 和安装程序文件本身 至少 40 周。

SF (V2)

操作系统文件类型TAR 压缩类型链接到 JSON 文件
Linux ARMTARgzsf-linux-arm-tar-gz.json
Linux ARMTARxzsf-linux-arm-tar-xz.json
Linux操作系统 64TARgzsf-linux-x64-tar-gz.json文件
Linux操作系统 64TARxzsf-linux-x64-tar-xz.json
窗户 64TARgzsf-win32-x64-tar-gz.json
窗户 64TARxzsf-win32-x64-tar-xz.json
视窗 x86TARgzsf-win32-x86-tar-gz.json
视窗 x86TARxzsf-win32-x86-tar-xz.json
macOS (英特尔 CPU)TARgzsf-darwin-x64-tar-gz.json
macOS (英特尔 CPU)TARxzsf-darwin-x64-tar-xz.json
macOS(Apple 芯片)TARgzsf-darwin-arm64-tar-gz.json
macOS(Apple 芯片)TARxzsf-darwin-arm64-tar-xz.json
窗户 64安装sf-x64-exe.json文件
视窗 x86安装sf-x86-exe.json文件
macOS (英特尔 CPU)安装sf-x64-pkg.json文件
macOS(Apple 芯片)安装sf-arm64-pkg.json文件

sfdx (v7) – 已弃用

注意

自 2023 年 7 月 12 日起,我们不再更新 (v7)。 我们保留这些旧版本只是出于历史原因。sfdx

操作系统文件类型TAR 压缩类型链接到 JSON 文件
Linux ARMTARgzsfdx-linux-arm-tar-gz.json
Linux ARMTARxzsfdx-linux-arm-tar-xz.json
Linux操作系统 64TARgzsfdx-linux-x64-tar-gz.json
Linux操作系统 64TARxzsfdx-linux-x64-tar-xz.json
窗户 64TARgzsfdx-win32-x64-tar-gz.json
窗户 64TARxzsfdx-win32-x64-tar-xz.json
视窗 x86TARgzsfdx-win32-x86-tar-gz.json
视窗 x86TARxzsfdx-win32-x86-tar-xz.json
macOS (英特尔 CPU)TARgzsfdx-darwin-x64-tar-gz.json
macOS (英特尔 CPU)TARxzsfdx-达尔文-x64-tar-xz.json
macOS(Apple 芯片)TARgzsfdx-darwin-arm64-tar-gz.json
macOS(Apple 芯片)TARxzsfdx-darwin-arm64-tar-xz.json
窗户 64安装sfdx-x64-exe.json文件
视窗 x86安装sfdx-x86-exe.json文件
macOS (英特尔 CPU)安装sfdx-x64-pkg.json文件
macOS(Apple 芯片)安装sfdx-arm64-pkg.json文件

验证安装并获取版本信息

要确保您已正确安装 Salesforce CLI,请运行以下命令以 查看可用命令的版本和列表。要查看已安装的 Salesforce CLI 版本,请运行以下命令 终端(macOS 和 Linux)或命令提示符 (Windows) 中的命令。

sf --version

这 命令返回有关版本的详细信息,例如以下示例 输出。

@salesforce/cli/2.17.10 darwin-x64 node-v20.9.0

要查看已安装的核心插件及其版本,请运行此命令 命令。

sf plugins --core

该命令显示以下示例输出等信息。

@oclif/plugin-autocomplete 3.0.1 (core)
@oclif/plugin-commands 3.0.6 (core)
@oclif/plugin-help 6.0.5 (core)
@oclif/plugin-not-found 3.0.3 (core)
@oclif/plugin-plugins 4.1.0 (core)
@oclif/plugin-search 1.0.6 (core)
@oclif/plugin-update 4.1.3 (core)
@oclif/plugin-version 2.0.6 (core)
@oclif/plugin-warn-if-update-available 3.0.2 (core)
@oclif/plugin-which 3.0.8 (core)
@salesforce/cli 2.17.10 (core)
apex 2.3.20 (core)
auth 2.8.26 (core)
data 2.6.3 (core)
deploy-retrieve 1.20.0 (core)
info 3.0.1 (core)
limits 3.0.1 (core)
login 2.0.1 (core)
marketplace 1.0.2 (core)
org 2.11.8 (core)
schema 3.0.1 (core)
settings 2.0.2 (core)
sobject 0.2.15 (core)
source 2.11.0 (core)
telemetry 3.1.0 (core)
templates 55.5.18 (core)
trust 3.0.1 (core)
user 2.3.42 (core)

Uninstalled JIT Plugins:
community 2.4.9
custom-metadata 2.2.12
dev 1.3.2
devops-center 1.2.4
env 3.0.1
functions 1.22.9
packaging 1.27.1
signups 1.5.6
@salesforce/sfdx-plugin-lwc-test 1.1.1
@salesforce/sfdx-scanner 3.18.0

查看所有可用的 Salesforce CLI 命令,运行此命令 命令。

sf commands

这 命令列表包括别名命令,例如 -style 命令 别名为 。force:apex:executesfdxapex run

自 显示 Salesforce CLI 版本的发行说明 当前安装在您的计算机上,请运行此命令 命令。

sf whatsnew

更新 Salesforce CLI

如果要确保运行的是最新版本的 Salesforce CLI,可以 手动更新它。

确定 Salesforce CLI 的安装方式

由于更新 Salesforce CLI 的方法因您是否使用了 安装程序或 npm,您必须先知道如何安装,然后才能更新。万一你 忘记了,这里有两种方法可以确定您如何安装 Salesforce CLI:

  • 在终端(macOS 和 Linux)中运行,或者 命令提示符 (Windows)。如果 Salesforce CLI 更新,则您安装了 安装。如果该命令返回此警告或类似警告,则您安装了 npm:sf updatesf update › Warning: Use "npm update --global @salesforce/cli" to update npm-based installations. @salesforce/cli: Updating CLI... not updatable
  • 如果已安装 Node.js,请运行 .如果显示的列表包含条目 ,则您使用 安装了 Salesforce CLI。npm list -g –depth 0@salesforce/cli@<version>npm

如果您使用安装程序安装了 Salesforce CLI

要安装最新的 Salesforce CLI 和插件版本,请在终端中运行此命令 (macOS) 或命令提示符 (Windows):

sf update

默认情况下,CLI 会定期检查并安装更新。要禁用自动更新, 将环境变量设置为 。SF_AUTOUPDATE_DISABLEtrue

当您更新 Salesforce CLI 时,我们会自动显示该版本的发行说明 您正在更新,以便了解新增、更改和修复的功能。沉默 显示中,将 和环境变量设置为 。SF_HIDE_RELEASE_NOTESSF_HIDE_RELEASE_NOTES_FOOTERtrue

如果您使用 npm 安装了 Salesforce CLI

自动更新选项不可用。当 CLI 的新版本可用时,运行 终端(macOS 和 Linux)或命令提示符中的此命令 (视窗):

npm install --global @salesforce/cli
  • 更新到 CLI 候选发布版或 Nightly
    我们每周发布一个新版本的 CLI。同时,我们还发布了 CLI 的候选版本,其中包含我们计划在下一个每周版本中包含的更改。将候选版本视为 Salesforce 沙盒预览的 CLI 版本。如果您想查看即将推出的功能,可以更新到候选版本。或者继续关注当前和官方版本。或者来回走动。由你决定!
  • 禁用 CLI 的自动更新 当您运行命令时,Salesforce CLI
    会检查您是否拥有最新版本。否则,CLI 会自动更新。您可以使用环境变量禁用此自动更新。

更新到 CLI 候选发布版或每晚更新

我们每周发布新版本的 CLI。同时,我们还发布了一个版本 CLI 的候选者,其中包含我们计划在下一个每周版本中包含的更改。 将候选版本视为 Salesforce 沙盒预览的 CLI 版本。您可以 如果您想查看即将推出的功能,请更新到候选版本。或者保持当前状态 并正式发布。或者来回走动。由你决定!

我们还每天发布夜间版本。Nightly 版本包括所有 我们的库和插件。如果您想尝试一天前合并的修复程序,请尝试 安装夜间构建。与候选版本类似,每日构建有助于改进 Salesforce CLI 的稳定性,在问题进入稳定版之前捕获问题 释放。

虽然最新的(稳定)版本是最可靠的,但我们鼓励用户也测试一下 发布候选版本和夜间构建,并向我们的 GitHub 报告问题 问题存储库。建议针对 当前版本和候选版本,用于识别潜在的中断性变更 在它们发生之前。

要显示已安装的 Salesforce CLI 的版本,请从终端运行此命令 (macOS 和 Linux)或命令提示符 (Windows)。该版本未指示它是否为发布 候选版本或夜间版本,因此请查看发行说明以获取当前版本号。

sf version

使用安装程序进行更新

安装程序使用当前 release,用于候选版本和夜间生成。stablestable-rcnightly

如果您已安装 Salesforce CLI 并且正在使用当前版本,请在 终端(macOS 和 Linux)或命令提示符 (Windows) 切换到版本 候选人。

sf update stable-rc

同样地 运行以下命令以安装 nightly 建。

sf update nightly

要卸载 候选发布或夜间构建并返回到当前版本,运行此 命令。

sf update stable

使用 npm 安装

Npm 安装使用当前版本、候选版本和夜间构建的标记。latestlatest-rcnightly

要使用 npm 安装候选版本,请在终端(macOS 和 Linux)中运行此命令,或者 命令提示符 (Windows)。

npm install --global @salesforce/cli@latest-rc

同样地 运行以下命令以安装 nightly 建。

npm install --global @salesforce/cli@nightly

自 卸载候选发布版本或夜间构建并返回到当前版本,运行此命令 命令。

npm install --global @salesforce/cli@latest

要查看当前与 npm 标记关联的 Salesforce CLI 版本,请运行以下命令 命令。

npm view @salesforce/cli dist-tags --json

从 TAR 文件安装

Salesforce CLI 分发 TAR 文件 候选版本和夜间版本,可以安装在所有受支持的操作上 系统。下载 URL 类似于用于安装当前 释放,但使用 or 通道而不是通道。stable-rcnightlystable

例如,到发行版的 Linux TAR 文件 候选人,在终端(macOS 和 Linux)或命令提示符 (Windows) 中运行此命令, 从频道下载。wgetstable-rc

wget https://developer.salesforce.com/media/salesforce-cli/sf/channels/stable-rc/sf-linux-x64.tar.xz

这 命令下载每晚 建。

wget https://developer.salesforce.com/media/salesforce-cli/sf/channels/nightly/sf-linux-x64.tar.xz

其他 而不是使用其他渠道,安装候选版本或 从 TAR 文件进行夜间构建与安装当前 释放。

禁用 CLI 的自动更新

当您运行命令时,Salesforce CLI 会检查您是否拥有最新版本。如果 不会,CLI 会自动更新。您可以使用以下命令禁用此自动更新 环境变量。

要保留当前版本的 CLI 并禁用自动更新,请将环境变量设置为 。环境变量的设置方式因 不同的操作系统。有关如何操作的说明,请参阅操作系统供应商的帮助 设置环境变量。SF_AUTOUPDATE_DISABLEtrue

浏览示例应用程序并发现缓存诊断

学习目标

完成本单元后,您将能够:

  • 解释用于存储和刷新缓存数据的模式。
  • 确定用于缓存值的数据结构。
  • 诊断您的缓存使用情况。

示例应用程序演练

让我们看一个示例应用程序,该应用程序演示如何使用组织缓存来存储和检索货币汇率。汇率在一天内波动,因此该示例应用程序不会返回实时汇率。该应用程序只提供汇率的每日快照。因为我们对准确的实时价值不感兴趣,而只对日常价值感兴趣,因此缓存货币汇率是一个不错的选择。当重复检索汇率时,从缓存中获取汇率会节省大量时间并提高应用程序的性能。

示例应用程序概述

我们将我们的汇率样本申请基于Visualforce页面和Apex控制器,该控制器包含获取汇率的逻辑。第一次访问此页面时,速率是通过对外部Web服务的API调用获得的。只要费率低于一天,此页面的后续执行将从缓存中返回费率。对于每种汇率,此页面显示基础货币,转换的目标货币和转换率。出于说明目的,返回一小组货币。

Visualforce页面显示货币汇率

此示例是Visualforce页面的标记。此页面与ExchangeRates Apex控制器。

<apex:page controller="ExchangeRates" action="{!init}">
    
   <apex:pageBlock title="Rates">
      <apex:pageBlockTable value="{!Rates}" var="rate">
         <apex:column value="{!rate.Base_Currency__c}"/>
         <apex:column value="{!rate.To_Currency__c}"/>
         <apex:column value="{!rate.Rate__c }"/>
      </apex:pageBlockTable>
   </apex:pageBlock>
   
</apex:page>

样品Apex控制器

我们的样品Apex控制器可以完成繁重的工作。它获取汇率,将它们存储在Salesforce和缓存中,并从缓存中检索汇率。以下是样本控制器执行的操作细分,后跟源代码。

第一次运行样本时,会发生以下操作。

  • 汇率是从对外部端点的API调用获得的。
  • 从API调用返回的结果(以JSON格式)将被解析并保存在Salesforce中的Exchange_Rate__c sObjects中。
  • 该 getCachedRates() method将Exchange_Rate__c sObjects数组存储在org缓存中。

在随后的样本执行中:

  • 该示例检查存储数据的新鲜程度。为此,它执行SOQL查询以获取第一个返回的Exchange_Rate__c记录的createdDate值。
  • 如果日期早于一天,则从API调用获得汇率,与第一次执行时一样。
  • 如果日期早于一天,则费率将从组织缓存中获取。如果存在高速缓存未命中,则从Exchange_Rate__c sObject查询速率并将其存储在组织高速缓存中。
注意

注意

Apex控制器使用一个名为的辅助Apex类 RateLib,这里没有显示。此帮助程序类包含用于对传输速率服务进行传出API调用,从API调用解析JSON结果以及存储Exchange_Rate__c记录的方法。

public class ExchangeRates {
    private String currencies = 'EUR,GBP,CAD,PLN,INR,AUD,SGD,CHF,MYR,JPY,CNY';
    public String getCurrencies() { return currencies;}
    public Exchange_Rate__c[] rates {get; set;}
    //                                                                          
    // Checks if the data is old and gets new data from an external web service 
    // through a callout. Calls getCachedRates() to manage the cache.           
    // 
    public void init() {
        // Let's query the latest data from Salesforce
        Exchange_Rate__c[] latestRecords = ([SELECT CreatedDate FROM Exchange_Rate__c 
                        WHERE Base_Currency__c =:RateLib.baseCurrencies 
                              AND forList__c = true 
                        ORDER BY CreatedDate DESC
                        LIMIT 1]);
        
        // If what we have in Salesforce is old, get fresh data from the API
        if ( latestRecords == null  
            || latestRecords.size() == 0 
            || latestRecords[0].CreatedDate.date() < Datetime.now().date()) {
            // Do API request and parse value out
            String tempString = RateLib.getLoadRate(currencies);
            Map<String, String> apiStrings = RateLib.getParseValues(
                tempString, currencies);
            
            // Let's store the data in Salesforce
            RateLib.saveRates(apiStrings);
            // Remove the cache key so it gets refreshed in getCachedRates()
            Cache.Org.remove('Rates');
        }
        // Call method to manage the cache
        rates = getCachedRates();
    }
    //                                                                          
    // Main method for managing the org cache.                                  
    // - Returns exchange rates (Rates key) from the org cache.                 
    // - Checks for a cache miss.                                               
    // - If there is a cache miss, returns exchange rates from Salesforce       
    //    through a SOQL query, and updates the cached value.                   
    //
    public Exchange_Rate__c[] getCachedRates() {
        // Get the cached value for key named Rates
        Exchange_Rate__c[] rates = (Exchange_Rate__c[])Cache.Org.get(
            RateLib.cacheName+'Rates');
        
        // Is it a cache miss? 
        if(rates == null) {
            // There was a cache miss so get the data via SOQL
            rates = [SELECT Id, Base_Currency__c, To_Currency__c, Rate__c 
                        FROM Exchange_Rate__c 
                        WHERE Base_Currency__c =:RateLib.baseCurrencies 
                              AND forList__c = true
                              AND CreatedDate = TODAY];
            // Reload the cache
            Cache.Org.put(RateLib.cacheName+'Rates', rates);
        }
        return rates;
    }
}

要下载Exchange Rate示例的来源并在Developer org中使用它,请参阅参考资料部分。

缓存管理的最佳实践

缓存存储的模式

该 ExchangeRatesApex类包含封装初始化和刷新缓存的逻辑的方法。如果数据陈旧或未找到,则在里面()method通过API调用检索新的汇率,然后将它们存储在Salesforce中。该getCachedRates()方法在内部管理缓存。如果未找到缓存值,则此方法从Salesforce检索一组速率并将其存储在缓存中。

由于我们的应用程序使用外部数据,因此它通过API调用从Web服务获取数据。它还将数据存储为Salesforce记录,作为刷新缓存的备份。不使用外部数据的应用程序使用SOQL检索Salesforce记录并对其进行缓存。在这种情况下,缓存管理过程更简单,缓存方法实现更短。例如,如果您的应用只使用SOQL中的本地数据,则不需要在里面() 方法,但只有 getCachedRates() 方法。

我们建议您在一种方法中包含用于管理缓存的所有逻辑。这样,缓存仅在应用程序的一个位置进行操作。高速缓存的集中管理减少了访问无效高速缓存(高速缓存未命中)或意外覆盖高速缓存值的错误的可能性。

决定缓存什么

此示例将一个sObjects数组存储在缓存中。这种方法是存储数据结构的最佳选择吗?你做出的每一个选择都有权衡。存储较小的数据片段(如字段值而不是整个sObject)可以减少缓存使用量。但是,如果在每个键中存储的数据较少,则可能需要复杂的逻辑来重建数据和sObject,这需要更多的处理时间。并且存储在一个键中的sObject数组使用的缓存空间少于存储在各个键中的各个sObject的总大小。由于序列化和缓存提交时间的开销,缓存较小的项而不是项列表会降低缓存性能。例如,

Cache.Org.put('Rates', rates);

您可以将各个费率存储为具有自己的缓存键的字段,如下所示。

Cache.Org.put('DollarToEuroRate', rateEUR);
Cache.Org.put('DollarToChineseYuan', rateCNY);
Cache.Org.put('DollarToJapaneseYen', rateJPY);
// etc.

决定缓存哪种数据结构取决于您的应用程序对数据的处理方式。例如,如果应用程序转换相同基础货币的货币,则至少存储每种目标货币的汇率。您可以将每种货币汇率存储为单个键。但是为了更容易在Visualforce页面上显示费率,请将数据缓存为sObject列表。sObjects可以增加存储空间,因为它们包含系统字段,例如创建的日期,但它们减少了逻辑处理时间并提高了应用程序和缓存性能。请记住,在使用缓存时,主要目标是减少应用程序的执行时间。

诊断缓存使用情况

所以,你已经完成了所有这些工作来实现Platform Cache。你怎么知道你是否正在充分利用缓存?有几种方法可以检查性能数据。一种方法是在Setup中查看诊断信息(仅在Salesforce Classic中可用)。

在访问诊断页面之前,请为您的用户启用缓存诊断权限。

  1. 从“设置”中,输入users“ 快速查找”框,然后选择“ 用户”
  2. 单击您的用户名,然后单击“ 编辑”
  3. 选择“ 缓存诊断”,然后单击“ 保存”

接下来,访问分区中特定缓存类型的诊断页面。

  1. 从“设置”中,输入cache“ 快速查找”框,然后选择“ 平台缓存”
  2. 单击要检查其诊断信息的分区。
  3. 在会话缓存或组织缓存下,单击“ 诊断”

如果单击“组织缓存”的“ 诊断”,则会在新选项卡中打开“组织缓存诊断”页面。此页面显示两个图表。第一个图表(组织缓存容量和使用情况)显示您的缓存使用限制。在我们的例子中,我们低于极限0.02%。第二个图表(按内容贡献)是一个圆环图,按键显示缓存分布。

注意

注意

因为我们的示例使用org缓存,所以我们只检查诊断页面中的org缓存。还为使用会话高速缓存的应用程序的会话高速缓存提供了类似的诊断页面。

下图显示了包含四个缓存键的内容分发图表。其中一个缓存键Rate用于我们的汇率样本。该 价格键更采用了比空间的一半。

组织缓存的诊断页面

在图表之后,列出了缓存键的详细信息。此列表提供与密钥对应的每个缓存值的大小以及访问缓存的次数。您可以从此列表中手动删除缓存,作为调用该缓存的替代方法去掉()Apex中的方法。“ 删除”按钮允许管理员在不修改任何代码的情况下管理缓存。

该DollarToEuroRate键使用比少得多的空间 价格的关键。这是可以预料的,因为 DollarToEuroRate只存储一个值,而 Rates存储一组sObjects。

使用诊断页面上的信息确定是否调整缓存使用情况。例如,如果缓存值具有较低的访问计数,表明它很少使用,请考虑它是否真的需要,特别是如果它很大。或者,如果您接近缓存使用限制,请重新考虑缓存内容。您可能希望删除不必要的缓存值或购买更多缓存容量。

恭喜!您已经学习了如何使用Platform Cache来缓存应用程序的数据以便快速检索。您还了解了缓存最佳实践以及如何诊断缓存使用情况。您现在已准备好加入花栗鼠的冒险并缓存宝贵的资源!

使用组织和会话缓存

学习目标

完成本单元后,您将能够:

  • 创建一个分区。
  • 在组织和会话缓存中存储和检索值。
  • 描述缓存中的值的持续时间。
  • 处理缓存未命中。
  • 从Visualforce页面读取会话缓存。

创建分区

注意

注意

还没有缓存试用版吗?此单元需要有效的Platform Cache试用版。使用上一个单元中的说明申请试用。如果您没有缓存试用版,则仍可以执行本机中的步骤,但不会在缓存中找到您的数据。

要使用Platform Cache,首先要设置至少一个分区。设置分区后,您可以使用Platform Cache Apex API添加,访问和删除数据。

每个分区都有一个会话缓存和一个组织缓存段。您可以为每个段分配单独的容量。通常,您为分区分配至少5 MB。对于此示例,我们不分配任何空间以确保您的代码正确处理缓存未命中。当没有分配空间时,缓存未命中率为100%,这意味着在缓存中找不到缓存值,并且得到() 方法返回 空值。考虑使用此技术来测试缓存未命中。我们将在后面的部分介绍如何处理缓存未命中。

首先,让我们从Platform Cache页面创建一个分区(仅在Salesforce Classic中可用)。

  1. 在“设置”中,输入Platform Cache“ 快速查找”框,然后选择“ 平台缓存”
  2. 单击“ 新建平台缓存分区”
  3. 为分区指定名称(例如应用程序的名称)。
  4. 检查默认分区
  5. 输入0会话缓存和0组织缓存,然后单击“ 保存”

缓存密钥名称格式

每个缓存键具有以下格式:

Namespace.Partition.Key

名称空间是运行应用程序的组织的名称空间名称,也可以设置为特殊名称“local”。“本地”名称是指组织的名称空间是否在组织中定义了名称空间。

分区是您创建的分区的名称。在此示例中,它是CurrencyCache。

Key是用于存储值的键的名称。键名唯一地表示您的缓存值。

假设我们想将货币汇率从美元存储到欧元。我们可以创建一个名为DollarToEuroRate的密钥。对于我们刚刚创建的分区,密钥的全名是:

local.CurrencyCache.DollarToEuroRate

例如,此代码段存储了DollarToEuroRate键的组织缓存中的值。

Cache.Org.put('local.CurrencyCache.DollarToEuroRate', '0.91');

我们创建的分区是默认分区,因此您可以省略命名空间和分区名称,只需指定密钥名称即可。

DollarToEuroRate

使用默认分区时,可以将put()调用缩短为以下内容。

Cache.Org.put('DollarToEuroRate', '0.91');

在组织缓存中存储和检索数据

您已完成设置分区,这是您在用户界面中执行的唯一步骤。现在我们将切换到Apex来管理缓存。使用组织缓存来存储组织中任何人都可以使用的数据。要么使用Cache.Org 类方法,或使用 Cache.OrgPartition用于引用特定分区的类。然后调用该分区上的缓存方法。

以下Apex代码段显示了如何使用。访问分区 Cache.OrgPartition用于存储和检索货币兑换应用程序的缓存值的类。它在本地名称空间中获取名为CurrencyCache的分区。使用关键的DollarToEuroRate和今天的货币汇率添加新值 。接下来,从缓存中检索关键DollarToEuroRate的值。

// Get partition
Cache.OrgPartition orgPart = Cache.Org.getPartition('local.CurrencyCache');
// Add cache value to the partition. Usually, the value is obtained from a 
// callout, but hardcoding it in this example for simplicity.
orgPart.put('DollarToEuroRate', '0.91');
// Retrieve cache value from the partition
String cachedRate = (String)orgPart.get('DollarToEuroRate');

如果您只在一个分区中管理缓存值,请使用 Cache.OrgPartition方法。该Cache.OrgPartition 方法比使用起来更容易 Cache.Org 方法,因为在创建分区对象时只指定了一次命名空间和分区前缀。

缓存价值最后一次?

前面的例子假设一切正常,即:

  • 平台缓存已启用,并具有可用空间的分区
  • 缓存中的缓存值
  • 该值已成功存储在缓存中

但在现实生活中,缓存数据并不总能得到保证。平台缓存旨在作为临时空间。例如,缓存可能已过期。即使缓存仍处于活动状态,您的缓存数据也可能会从缓存中逐出。就像花栗鼠清理他们的脸颊以腾出更多橡子的空间一样,Platform Cache也可以清除一些空间以获得更多数据!超出分区限制时,Salesforce会根据最近最少使用(LRU)算法驱逐缓存数据。高速缓存逐出直到使用减少到小于或等于100%容量。此外,如果超出本地缓存限制,则可以在提交请求之前从本地缓存中逐出项目。

缓存数据持续时间和到期时间

数据保存在缓存中的时间称为生存时间值(ttlsecs)。使用Apex方法在缓存中存储键值对时,可以指定生存时间值。对于会话缓存,您的数据最多可在缓存中保存8小时。对于组织缓存,您的数据最多可在缓存中运行48小时。默认情况下,组织缓存的生存时间值为24小时。

会话缓存在达到其指定的生存时间值或用户会话到期时(以先到者为准)到期。组织缓存在达到其指定的生存时间值时到期。

处理缓存未命中的最佳实践

作为最佳实践,您的代码应该预见并容纳故障点。换句话说,始终假设可能发生缓存未命中。缓存未命中是指从缓存中请求密钥值但未找到值的情况。你的价值 得到()call returns为null。检查结果得到()调用null并相应地处理它。例如,如果结果是空值,从数据库或API调用中获取值。

以下Apex代码段显示了如何通过检查缓存中返回的值是否来处理缓存未命中 空值 (if(cachedRate!= null))。如果值不是空值,您可以使用该值,例如,在页面上显示它。否则,从其他源(例如API调用或Salesforce)获取此值。

Cache.OrgPartition orgPart = Cache.Org.getPartition('local.CurrencyCache');
String cachedRate = (String)orgPart.get('DollarToEuroRate');
// Check the cache value that the get() call returned.
if (cachedRate != null) {
    // Display this exchange rate   
} else {
    // We have a cache miss, so fetch the value from the source.
    // Call an API to get the exchange rate.
}

在会话缓存中存储和检索数据

还记得什么会话缓存吗?没错,它存储与各个用户会话相关的数据。例如,您可以在应用程序中使用会话缓存来存储用户喜欢的货币或用户的自定义导航选项卡顺序。使用会话缓存,您可以使用Visualforce全局变量管理Apex中的缓存值并读取缓存值。

使用Apex时,管理会话缓存与管理组织缓存的方式类似,但类名不同。使用Cache.Session 和 Cache.SessionPartition用于访问存储在会话高速缓存中的值的类。要管理任何分区中的值,请使用中的方法Cache.Session 类。如果您只在一个分区中管理缓存值,请使用Cache.SessionPartition方法而不是。该Cache.SessionPartition 方法比使用起来更容易 Cache.Session 方法,因为在创建分区对象时只指定了一次命名空间和分区前缀。

以下的Apex代码片段显示了如何访问分区以存储和检索缓存值。它在本地名称空间中获取名为CurrencyCache的分区。使用关键的FavoriteCurrency添加新值。检索FavoriteCurrency密钥的值 。该 FavoriteCurrency密钥存储用户的喜爱货币,所以这个值是为每个用户,因此一个很好的候选人会话缓存不同。

// Get partition
Cache.SessionPartition sessionPart = Cache.Session.getPartition('local.CurrencyCache');
// Add cache value to the partition
sessionPart.put('FavoriteCurrency', 'JPY');
// Retrieve cache value from the partition
String cachedRate = (String)sessionPart.get('FavoriteCurrency');

使用Visualforce全局变量访问平台缓存

通过使用,从Visualforce页面访问存储在平台缓存中的缓存值 $ Cache.Session 要么 $ Cache.Org全局变量。通过使用这些全局变量,您可以直接从Visualforce页面读取与Apex一起存储的缓存值。

注意

注意

以下示例显示如何使用。访问会话高速缓存 $ Cache.Session全局变量。除了使用之外,等效的org缓存示例是相同的$ Cache.Org 而是全局变量。

使用时 $ Cache.Session全局变量,使用命名空间和分区名称完全限定密钥名称。此示例是一个输出文本组件,用于从命名空间中检索缓存的值艾博, 划分 CurrencyCache和关键 FavoriteCurrencyRate。

<apex:outputText value="{!$Cache.Session.ExPro.CurrencyCache.FavoriteCurrencyRate}"/>

与Apex方法不同,您不能省略 namespace.partition前缀以引用组织中的默认分区。如果没有为组织定义名称空间,请使用本地 引用运行代码的当前组织的命名空间。

<apex:outputText value="{!$Cache.Session.local.MyPartition.Key}"/>

如果缓存的值是具有属性或方法的数据结构,如Apex List或自定义类,则访问这些属性 $ Cache.Session表达式使用点表示法。例如,此标记调用则为list.size() 如果是Apex方法的值 numbersList 被声明为List。

<apex:outputText value="{!$Cache.Session.local.MyPartition.numbersList.size}"/>

此示例访问on上的value属性 MYDATA的 声明为自定义类的缓存值。

<apex:outputText value="{!$Cache.Session.local.MyPartition.myData.value}"/>

ISV应用程序的受保护缓存分配

通过使用平台缓存,ISV应用程序运行速度更快,性能更佳。如果您是ISV开发人员,则可以通过为自己的命名空间购买缓存空间来保证应用程序的缓存空间。这样,当您的应用安装在订阅者组织中时,应用缓存的空间不会受到订阅者组织中缓存使用的影响。只有从应用程序命名空间运行的Apex代码才能访问和使用命名空间的缓存。订阅者组织中没有其他代码可以使用此缓存。您可以根据命名空间的缓存测试您的应用程序,并确保缓存分配将在每个订阅者组织中受到保护。

缓存分区作为应用程序包的一部分分发给订阅者。将命名空间的一个或多个缓存分区作为组件添加到包中,方法与添加其他组件相同。缓存分区不会自动添加为依赖组件。

包含缓存分区的包组件列表
注意

注意

请参阅以下有关打包分区的信息

  • 您添加到程序包的分区必须是非默认分区。
  • 当订户安装您的软件包时,缓存分区将安装在其组织中,使您的应用程序可以访问您的命名空间的已安装缓存分区。
  • 订阅者必须拥有Enterprise Edition或Unlimited Edition组织,或者必须购买Platform Cache。

下图显示了使用打包缓存安装软件包的Enterprise Edition订户组织的示例缓存容量。订户的总缓存容量为30 MB,分为三个分区,包括会话和组织缓存的组合。打包的缓存容量来自订户组织中已安装的包,并包含两个分区。打包的缓存由ISV购买的20 MB缓存组成。(请记住,只有包中的Apex代码才能访问打包的缓存,订阅者组织中的代码无法使用此缓存。)

打包分区和组织分区的缓存容量是分开的

从Channel Order App购买命名空间缓存。您可以购买10 MB块的缓存。要确定应用程序需要多少缓存空间,请使用缓存分区测试应用程序。使用试用缓存来增加组织中缓存的容量。正如我们在第一个单元中提到的,默认情况下,某些版本的订户组织会获得缓存分配。对于开发应用程序的Developer Edition组织,您可以请求10 MB的试用缓存。您可以通过联系Salesforce请求增加为您的组织提供的试用缓存数量。通过尝试不同的缓存大小,您可以更好地了解为自己的命名空间购买多少缓存。

现在您已经了解了如何在Platform Cache中获取和存储值,请自行尝试!完成以下挑战以测试您的知识。

开始使用Platform Cache

学习目标

完成本单元后,您将能够:

  • 描述什么是平台缓存以及它的用途。
  • 列出两种类型的平台缓存并给出每种缓存的示例。
  • 描述分区以及如何使用它们。

什么是缓存?

缓存是临时存储。在计算机世界中,缓存是来自数据库的频繁访问数据的临时存储。这是一个类比。假设你是一只寻找坚果和橡子的花栗鼠。现在是5点,你准备好吃了。你打算使用存放在你脸颊上的坚果和橡子(缓存),还是你要回到森林里从树上收集更多(数据库)?如果您在脸颊上访问食物的临时缓存,您的晚餐会更接近,您可以更快地吃到它!此外,您可以更有效地实现目标。数据缓存具有类似的优点,但对于人而言,不是花栗鼠。

一种花栗鼠,脸颊上有坚果

什么是平台缓存?

Platform Cache是​​一个存储层,用于存储Salesforce会话和组织数据以供以后访问。使用Platform Cache时,您的应用程序可以更快地运行,因为它们将可重用数据存储在内存中。应用程序可以快速访问此数据; 他们不需要在后续事务中复制计算和对数据库的请求。简而言之,将Platform Cache视为云应用程序的RAM。

使用Platform Cache,您还可以分配缓存空间,以便某些应用程序或操作不会窃取其他人的容量。您使用分区来分配空间。我们稍后会进入分区。

在我们继续前进之前

让我们暂停一下,请求试用平台缓存。默认情况下,您的Developer org具有0 MB缓存容量。您可以请求10 MB的试用缓存。

要申请试用,请转到开发人员组织中的“设置”。在“ 快速查找”框中,输入cache,然后单击“ 平台缓存”。单击“ 请求试用容量”并等待电子邮件通知您平台缓存试用版处于活动状态。Salesforce立即批准试用请求,但您可能需要几分钟才能收到电子邮件。

请求“平台缓存”页面上的“试用容量”按钮

如果您没有缓存试用版,则仍可以执行缓存操作以了解如何使用缓存。但是,会绕过缓存存储,并且检索的值为空(缓存未命中)。

好的,既然您已经请求了Platform Cache试用版,那么让我们学习更多概念。

我什么时候可以使用平台缓存?

您可以在代码中使用平台缓存,几乎可以在任何地方反复访问相同的数据。使用缓存数据可以提高应用程序的性能,并且比重复执行SOQL查询,进行多个API调用或计算复杂计算更快。

要缓存的最佳数据是:

  • 在整个会话中重用,或在所有用户和请求中重用
  • 静态(不会快速变化)
  • 计算或检索费用昂贵

存储不经常更改的数据

使用缓存来存储不经常更改的静态数据或数据。该数据最初通过来自第三方的API调用或通过SOQL查询在本地检索。如果数据发生更改,请在不必始终高度准确的情况下缓存此数据。

此类静态数据的示例如下:

  • 公共交通时刻表
  • 公司班车时刻表
  • 所有用户都看到的标题页眉
  • 显示在应用的每个页面上的静态导航栏
  • 您希望在会话期间保留的用户购物车
  • 每日汇率快照(汇率在一天内波动)

存储从复杂计算中获得的数据

由复杂计算或长查询产生的值是缓存存储的良好候选者。此类数据的示例如下:

  • 过去一周的总销售额
  • 公司员工整体志愿服务时间总计
  • 最畅销的排名

有关使用Platform Cache的位置的线索,请检查您的代码。例如,您当前是否通过重载Visualforce视图状态来存储应用程序数据?这些存储的值都是Platform Cache的候选者。

并非每个用例都是Platform Cache用例。例如,经常更改且实时更改的数据(例如股票报价)不适合缓存。此外,请确保您熟悉Platform Cache限制。例如,如果您的数据由异步Apex访问,则无法将其存储在基于用户会话的缓存中。

按版本缓存分配

具有Enterprise Edition orgs及更高版本的客户可以使用Platform Cache。以下版本带有一些默认缓存空间,但通常情况下,添加更多缓存可提供更高的性能增强。

  • 企业版(默认为10 MB)
  • 无限版(默认为30 MB)
  • 性能版(默认为30 MB)

试用试用缓存

您可以为您的组织购买额外的缓存。要确定多少额外缓存对您的应用程序有益,您可以请求试用缓存并进行试用。此外,在购买缓存之前请求专业版的试用缓存。在Developer Edition组织中使用试用缓存来使用Platform Cache开发和测试您的应用程序。当您的请求获得批准后,您将获得30 MB的试用缓存空间(Developer Edition为10 MB)。如果您需要更多试用缓存空间,请联系Salesforce。

平台缓存的类型是什么?

平台缓存有两种类型:组织缓存和会话缓存。

组织缓存

组织缓存存储组织中任何人都可以使用的组织范围数据。可以跨会话,请求和组织用户和配置文件访问组织缓存。

例如,可以根据联系人的位置为联系人缓存和显示天气数据。或者可以缓存货币汇率的每日快照以便在应用中使用。

会话缓存

会话缓存存储单个用户的数据,并与该用户的会话相关联。会话的最长寿命为8小时。

例如,假设您的应用计算用户位置与用户希望在同一天访问的所有客户之间的距离。位置和计算的距离可以存储在会话高速缓存中。这样,如果用户想要再次获得该信息,则不需要重新计算距离。或者,您可能拥有一个应用程序,使用户可以自定义导航标签顺序,并在访问应用程序中的其他页面时重复使用该顺序。

使用缓存时性能提升了多少?

您可能想知道使用Platform Cache可以提高应用程序的性能。从缓存中检索数据比通过API调用快得多。将SOQL与缓存检索时间进行比较时,缓存也比SOQL查询快得多。

下图显示了通过API调用和缓存的数据检索时间(以毫秒为单位)。在通过缓存本地获取数据时,很容易注意到巨大的性能提升,尤其是在多个事务中检索数据时。在用于图表的示例中,缓存比API调用快数百倍。在此图中,缓存检索时间仅为几毫秒,但由于用于时间值的比例,因此几乎为零。请注意,此图表是一个示例测试,其他应用的实际数字可能会有所不同。对外部服务进行API调用比从缓存中获取数据(2)更慢(1)。

Graph将API调用的处理时间与缓存进行比较

下一个图表将SOQL与组织和会话缓存检索时间进行比较。如您所见,SOQL比缓存慢。在此示例中,缓存比SOQL快两倍或更多倍,以便在单个事务中进行数据检索。在多个事务中执行检索时,差异甚至更大。(请注意,此图表是一个示例,其他应用的实际数字可能会有所不同。)通过SOQL查询获取数据(1)比从组织和会话缓存中获取数据要慢(2)。

Graph将SOQL查询的处理时间与缓存进行比较

什么是缓存分区?

还记得我们之前提到过使用Platform Cache你可以使用分区分配空间吗?我们现在谈谈分区。分区允许您分配缓存空间以平衡跨应用程序的使用情况和性能。将数据缓存到指定的分区可确保缓存空间不会被其他应用程序或不太重要的数据覆盖。

在组织中使用缓存空间之前,必须创建分区以定义应用程序的容量。每个分区容量在组织缓存和会话缓存之间分解。会话和组织缓存分配可以是零,5 MB或更大,并且必须是整数。分区的最小大小(包括其组织和会话高速缓存分配)为5 MB。例如,假设您的组织总共有10 MB的缓存空间,并且您创建了一个总共5 MB的分区,其中5 MB用于会话缓存,0 MB用于org缓存。或者,您可以创建10 MB空间的分区,其中5 MB用于组织高速缓存,5 MB用于会话高速缓存。所有分区的总和(包括默认分区)等于Platform Cache总分配。

下图显示了缓存容量和分区分配的图表。在这个例子中,我们还没有使用缓存,正如0%缓存使用情况(1)所证明的那样,并且已经使用相等的分配创建了两个分区(2)。

缓存容量图表

默认分区

您可以将任何分区定义为默认分区,但只能有一个默认分区。默认分区使您可以使用简写语法在该分区上执行缓存操作。这意味着在添加键值对时,您不必使用命名空间和分区名称完全限定键名。例如,而不是呼叫Cache.Org.put(’namespace.partition.key’,0); 你可以打电话 Cache.Org.put(’key’,0);

在下一个单元中,您将在安装程序中创建一个分区,以便开始使用Platform Cache!

Big Objects-查询

学习目标

完成本单元后,您将能够:

  • 使用标准SOQL查询大对象。
  • 使用Async SOQL查询大对象。
  • 列出使用Async SOQL而非标准SOQL的优缺点。

SOQL和异步SOQL

可以使用SOQL或Async SOQL查询大对象。异步SOQL使用SOQL命令的子集。它是从头开始设计的,用于处理可以保存在大对象中的大量数据。由于异步SOQL查询是异步运行的,因此您不必担心查询超时。异步SOQL查询在后台运行,可以在Salesforce实体数据,标准对象,自定义对象和大对象上运行。异步SOQL通过Chatter REST API实现。

通常,当您处理大量数据时,您希望使用Async SOQL而不是标准SOQL。如果您只需要来自大对象的小数据集,或者如果您需要立即获得结果,请使用标准SOQL。异步SOQL也适用于标准和非大型自定义对象,但对这些对象的支持处于试用阶段。

请记住,虽然每个许可证都包含自定义大对象,但Async SOQL仅包含额外大对象容量的许可。在以下时间使用标准SOQL:

  • 您希望在UI中显示结果,而无需用户等待结果。
  • 您希望立即返回结果以便在Apex代码块中进行操作。
  • 您知道查询将返回少量数据。

在以下情况下使用Async SOQL:

  • 您正在查询数百万条记录。
  • 您希望确保查询完成。
  • 您不需要在索引之外进行聚合查询或过滤。
异步SOQL用例。

简而言之,Async SOQL允许您在大对象中获取数百万条记录,并将相关数据提取到可管理的工作数据集中。

如何使用SOQL查询大对象

如果您已经熟悉使用SOQL,那么您会感到宾至如归。使用标准SOQL时需要注意的事项与使用SOQL和非大对象的大对象不同。对于具有大对象的SOQL查询,您必须从索引中定义的第一个字段开始构建查询,而不跳过查询中第一个和最后一个字段之间的任何字段。因此,例如,如果索引定义了三个字段,则无法仅使用第一个和第三个字段创建查询。

您可以使用这些比较运算符 =, <, >, <=, > =, 要么 在在查询的最后一个字段上。查询中的任何先前字段只能使用=运营商。该!=, 喜欢, 不在, 排除,和 INCLUDES 运算符在涉及大对象的任何查询中都无效。

以下查询假定您有一个大对象,其中索引由其定义 Account__c, Game_Platform__c,和 Play_Date__c。此查询指定索引中的所有三个字段。在这种情况下,过滤器Play_Date__c 可以是一个范围。

SELECT Account__c, Game_Platform__c, Play_Date__c
FROM Customer_Interaction__b
WHERE Account__c='001R000000302D3' AND Game_Platform__c='PC' AND Play_Date__c=2017-09-06T00:00:00Z

查询不起作用,因为查询中的间隙在哪里 Game_Platform__c 应该。

SELECT Account__c, Game_Platform__c, Play_Date__c
FROM Customer_Interaction__b
WHERE Account__c='001R000000302D3' AND Play_Date__c=2017-09-06T00:00:00Z

如何使用异步SOQL查询大对象

有两种主要方法可以使用Async SOQL从大对象中获取可管理的数据集。首先是使用过滤。您可以使用过滤将大对象数据的一小部分提取到自定义对象中。然后,您可以在报告,仪表板或其他漂亮的分析工具中使用它。

创建可管理数据集的另一种方法是通过粗略聚合。这些是Async SOQL支持的聚合函数:AVG( field ), COUNT( field ), COUNT_DISTINCT( field ), SUM( field ), MIN( field ), MAX( field )。这些聚合函数可以更好地控制从大对象中提取的数据。

形成您的查询

使用Async SOQL,我们查询自定义大对象 Customer_Interaction__b,并将结果指向我们的目标对象 TargetObject__c。我们将特定日期的帐户和游戏内购买信息从我们的自定义大对象提取到目标对象,然后我们可以将其用于报告和分析。必填字段

名称类型描述
询问字符串指定要执行的SOQL查询的参数。
targetObject字符串要插入查询结果的标准对象,自定义对象,外部对象或大对象。
targetFieldMapMap <String,String>定义如何将查询结果中的字段映射到目标对象中的字段。定义时 targetFieldMap 参数,确保字段类型映射是一致的。如果源字段和目标字段不匹配,则适用这些注意事项。任何源字段都可以映射到目标文本字段。如果源和目标字段都是数字,则目标字段必须具有与源字段相同或更多的小数位数。如果不是,则请求失败。此行为是为了确保转换中不会丢失任何数据。如果查询结果中的字段被多次映射,即使映射到目标对象中的不同字段,也只使用最后一个映射。

示例URI

https://yourInstance.salesforce.com/services/data/v41.0/async-queries/

POST请求正文

{ 
   "query": "SELECT Account__c, In_Game_Purchase__c FROM Customer_Interaction__b WHERE Play_Date__c=2017-09-06T00:00:00Z",
   
   "operation": "insert",
   
   "targetObject": "Customer_Interaction_Analysis__c", 
        
   "targetFieldMap": {"Account__c":"Account__c",
                      "In_Game_Purchase__c":"Purchase__c"
                      },
   "targetValueMap": {"$JOB_ID":"BackgroundOperationLookup__c",
                      "Copy fields from source to target":"BackgroundOperationDescription__c"
                     }
}

在此查询中,我们从特定日期2017-09-06获取客户交互大对象的帐户和游戏内购买信息,并将该数据发送到我们创建的自定义对象中, Customer_Interaction_Analysis__c。因为我们使用的是Async SOQL而不是标准的SOQL,所以我们可以过滤而不必担心包含其他索引字段。此新自定义对象将填充该日期的所有帐户和游戏内购买信息。从那里我们可以开始做一些分析,并试图找出为什么我们的游戏是如此惊人的成功。

POST响应机构响应正文包括查询 的jobId,查询的状态以及任何相关消息。

{ 
   "jobId": "08PD000000003kiT", 
   
   "message": "",
    
   "query": "SELECT Account__c, In_Game_Purchase__c FROM Customer_Interaction__b WHERE Play_Date__c=2017-09-06T00:00:00Z",  
    
   "status": "New",
     
   "targetObject": "Customer_Interaction_Analysis__c", 
     
   "targetFieldMap": {"Account__c":"Account__c", 
                      "In_Game_Purchase__c":"Purchase__c"
                     },
   "targetValueMap": {"$JOB_ID":"BackgroundOperationLookup__c",
                      "Copy fields from source to target":"BackgroundOperationDescription__c"
                     } 
}

跟踪您的查询状态

要跟踪查询的状态,请指定它 JOBID使用HTTP GET请求。查询的状态在。中返回状态领域。如果你没有指定JOBID,我们返回所有查询的状态。该状态 可:

  • 取消- 工作在被运行之前被取消了。
  • 成功- 工作顺利完成。
  • 失败 – 系统提交后作业失败,或者请求超出了Async SOQL限制。消息字段提供有关失败原因的详细信息。
  • 运行- 工作成功运行,组织未超出任何限制。
  • 计划- 新作业已创建并已安排,但尚未运行。

您也可以通过指定HTTP DELETE请求来取消查询 的jobId。取消已完成的查询无效。

请记住,异步SOQL是异步完成的。这意味着您的查询可能需要一段时间才能完成。就像我们之前提到的那样,如果时间紧迫,并且数据集足够小,请使用标准SOQL。或者,我们可以想象一下在这些例子中使用的不那么受欢迎的虚构游戏,但那里的乐趣在哪里呢?示例URI

https://yourInstance.salesforce.com/services/data/v41.0/async-queries/08PD000000003kiT

示例GET响应

{
"jobId": "08PD000000003kiT",
"message": "",
"query": "SELECT Account__c, In_Game_Purchase__c FROM Customer_Interaction__b WHERE Play_Date__c=2017-09-06T00:00:00Z",  
"status": "Success",
"targetObject": "Customer_Interaction_Analysis__c",
"targetFieldMap": {"Account__c":"Account__c",
"In_Game_Purchase__c":"Purchase__c" } 
}

此响应显示我们的查询已成功完成。哇噢!是时候准备报告和仪表板了!

处理错误

在执行Async SOQL查询期间可能会发生两种不同类型的错误。

  • 查询执行中的错误
  • 将结果写入目标大对象的一个​​或多个错误

提交无效查询并超出其中一个异步SOQL限制是执行问题的示例。另一个示例是查询导致底层基础结构出现问题。对于这些错误,响应正文包含状态 失败。message参数提供有关失败原因的更多信息。

其他时候,查询成功执行但在尝试将结果写入目标对象时遇到错误。由于涉及的数据量很大,捕获每个错误都是低效的。相反,生成的错误的子集被捕获 BackgroundOperationResult对象并保留七天。您可以使用Async SOQL查询来查询此对象的jobId过滤特定Async SOQL查询的错误。异步SOQL作业信息保留一年。

把它包起来

现在您了解在您自己的组织中使用自定义大对象所需的一切。哈哈,现在有数十亿条记录。

我们只是触及了Async SOQL的表面。请务必查看资源部分,以查看Async SOQL支持的所有标准SOQL命令以及更多用例示例。您还可以找到有关可在POST请求中使用的可选字段的信息。另请参阅我们的Analytics数据集成基础知识模块,了解如何为从大对象中提取的数据设置分析。想想您可以使用所有数据制作的所有漂亮的图形和仪表板!

Big Objects-定义自定义

学习目标

完成本单元后,您将能够:

  • 创建自定义Big Objects。
  • 构建自定义索引。
  • 部署自定义Big Objects。
  • 填充一个Big Objects。

定义自定义Big Objects

所以你已经查看了自定义Big Objects的用例,或者想出了自己的用例。现在是时候建立一个。

您可以在安装程序中定义自定义Big Objects。您还可以使用Metadata API定义自定义Big Objects,但在安装程序中更简单。要开始使用,请登录您的Trailhead Playground并转到安装程序。在较高的层次上,这就是你如何定义一个Big Objects。

  1. 单击并选择“ 设置”
  2. Big Objects在“快速查找”框中输入,然后选择“ Big Objects
  3. 创建一个Big Objects并添加一些基本细节。
  4. 添加自定义字段。它们将数据存储在您的Big Objects上。
  5. 添加索引。索引定义Big Objects的复合主键,用于查询和过滤Big Objects数据。
  6. 保存Big Objects并将状态更改为已部署。

现在让我们更详细地介绍这些步骤。

虽然自定义Big Objects与标准对象和自定义对象类似,但某些参数对于Big Objects是唯一的,并且某些参数不适用。对象名称在组织中的所有标准,自定义,外部和大型对象中必须是唯一的。

Big Objects定义细节

定义Big Objects时,首先要填写一些有关它的基本细节。

字段名称描述
标签此名称用于引用用户界面中的对象。
多个标签对象的复数名称。
从元音开始如果它适合您组织的默认语言,请指明标签前面是“an”还是“a”。
对象名称Big Objects的唯一API名称。在托管包中,此名称可防止与包安装发生命名冲突。仅使用字母数字字符和下划线。名称必须以字母开头且没有空格。它不能以下划线结尾,也不能有两个连续的下划线。保存后,Big Objects的API名称将使用后缀“__b”与自定义对象后缀“__c”进行标识。
描述有意义的描述可帮助您记住在列表中查看对象时之间的差异。
上下文相关的帮助设置定义用户从对象记录的主页(概述),编辑和详细信息页面,列表视图和相关列表中单击此页面的“帮助”时显示的URL 。此设置不会影响页面顶部的“帮助”链接。该链接始终打开“帮助”窗口。
部署状态创建Big Objects时,状态将设置为In Development。在包含至少包含一个自定义字段的索引之前,您无法部署Big Objects。索引中只允许使用必需的自定义字段。创建索引后,您会看到Deployed的第二个状态。准备好授予用户访问权限后,将状态更改为“已部署”。

Big Objects自定义字段

定义好Big Objects后,添加自定义字段。自定义字段存储Big Objects的唯一数据。您还可以创建自定义关系字段,以将您的Big Objects与Salesforce中的另一个对象相关联。将自定义字段添加到Big Objects的方式与向Salesforce中的任何对象添加自定义字段的方式相同。Big Objects支持以下字段类型:

  • 查找关系
  • 日期时间
  • 文本
  • 文字区(长)

要为Big Objects创建索引,必须至少将一个自定义字段标记为必需。

定义自定义Big Objects的索引

这个很重要!请记住,Big Objects索引中定义的字段决定了Big Objects的身份和查询能力。索引中定义的字段应该是与查询最相关的字段,因此您必须具有远见并在此处进行一些规划。您定义字段的顺序也是一个重要的考虑因素。如果您使用SOQL查询Big Objects,则只能按照您定义它们的顺序查询构成索引的字段。将查询过滤器中最常用的字段分配到第一个位置。你的索引。您还可以仅使用特定的比较运算符,具体取决于字段在查询中的位置。我们将在下一个单元中详细介绍查询。

定义索引时请记住这些注意事项。

  • 索引必须至少包含一个自定义字段,并且最多可以包含五个自定义字段。
  • 索引中包含的自定义字段必须标记为必需。
  • 长文本区域字段不能包含在索引中。
  • 索引中所有文本字段的字符总数不能超过50。
  • 创建索引后,您无法编辑或删除它。要更改索引,请使用新索引创建另一个Big Objects。

Big Objects索引详细信息

定义组成自定义Big Objects索引的字段,并确定字段和排序顺序。

字段名称描述
标签标签用于指代用户界面中的索引。
名称索引的API名称。
索引字段为索引中包含的每个自定义字段设置“索引位置”和“索引方向”。此处的字段顺序决定了它们在索引中的顺序。对于最常用的过滤器参数,将“索引位置”设置为1。Index Direction的有效值为Ascending和Descending。

示例自定义Big Objects

现在您已经知道制作自定义Big Objects需要什么,请尝试制作一个。让我们假装你开发了这款超棒的新游戏,SFORCE-COM:UFBO防御,玩家可以防御地球对抗身份不明的飞行大物体威胁。您希望能够存储玩家在单个游戏会话中进行的所有互动。在每个游戏会话中,您可以在自定义Big Objects中捕获此信息,Customer_Interaction__b:

  • 玩家购买的东西数量 In_Game_Purchase__c
  • 他们取得的最高水平 Level_Achieved__c
  • 他们有多少人的生命 Lives_This_Game__c
  • 他们的平台在 Game_Platform__c
  • 他们的得分在 Score_This_Game__c
  • 他们的帐户名称 Account__c
  • 他们的比赛日期在 Play_Date__c
  • 他们的上场时间 Play_Duration__c

您的游戏非常受欢迎,因此对于每个用户,您每天都会进行多次互动,再加上您庞大的玩家群,这是一个非常惊人的记录数。啊,成功的代价!

您可以在自定义Big Objects上定义所有这些字段。定义字段后,还可以定义构成索引的字段。每个玩家的帐户名称都是唯一的,因此您已经选择了Account__c作为我们指数中的第一个字段。索引中的下一个字段是玩家的游戏平台,Game_Platform__c那么会议的日期, Play_Date__c。此特定订单允许您仅查询帐户,帐户和游戏平台,帐户,游戏平台和播放日期。

使用这些示例中的确切值来创建具有八个自定义字段和索引的自定义Big Objects。如果表中未列出字段和值,请忽略它或将其保留为默认值。

Big Objects定义细节

字段名称
标签客户互动
多个标签客户互动
对象名称Customer_Interaction
描述留着空白
部署状态开发中

Big Objects自定义字段

  • 游戏内购买
    • 数据类型:文本
    • 现场标签:游戏内购买
    • 长度:16
    • 字段名称:In_Game_Purchase
    • 要求:不
  • 达到水平
    • 数据类型:文本
    • 字段标签:达到等级
    • 长度:16
    • 字段名称:Level_Achieved
    • 要求:不
  • 生活使用这个游戏
    • 数据类型:数字
    • Field Label:生活使用此游戏
    • 长度:18
    • 小数位:0
    • 字段名称:Lives_This_Game
    • 要求:不
  • 平台
    • 数据类型:文本
    • 字段标签:平台
    • 长度:16
    • 字段名称:Game_Platform
    • 要求:是的
  • 得分这个游戏
    • 数据类型:文本
    • Field Label:为这场比赛打分
    • 长度:16
    • 字段名称:Score_This_Game
    • 要求:不
  • 帐户
    • 数据类型:查找
    • 相关:帐户
    • 字段标签:帐户
    • 字段名称:Game_User_Account
    • 要求:是的
  • 比赛日期
    • 数据类型:日期/时间
    • 字段标签:播放日期
    • 字段名称:Play_Date
    • 要求:是的
  • 播放持续时间
    • 数据类型:数字
    • 字段标签:播放持续时间
    • 长度:18
    • 小数位:2
    • 字段名称:Play_Duration
    • 要求:不

现在,您有八个字段可以跟踪所有玩家的互动情况。做得好!

大对象自定义字段

Big Objects索引详细信息

字段名称
标签客户互动指数
名称CustomerInteractionsIndex
索引字段指数位置1:账户_c,降序索引位置2:Game_Platform__c,升序索引位置3:Play_Date__c,降序

部署Big Objects

现在您已经定义了自定义Big Objects,您已准备好部署它。单击 Big Objects上的“ 编辑 ”,然后将部署状态更改为“已部署”。

它们出现在设置中的大对象。

现在,您已准备好开始使用新的自定义Big Objects。

设置中的自定义大对象。

从这里,您可以编辑自定义Big Objects及其字段的标签和名称,但不能编辑或删除索引。要更改索引,请从新的Big Objects开始。您还可以从安装程序中删除自定义Big Objects。删除的Big Objects存储15天。在此期间,您可以恢复或永久删除它,但在这15天后,Big Objects将被永久删除。

填充Big Objects

填充Big Objects有两种主要方式。您可以将.csv文件与Data Loader或API一起使用,或者通过Apex完全执行。使用.csv文件时,文件中的第一行必须包含用于将.csv数据映射到自定义Big Objects的字段标签。将数据上传到Data Loader中的Big Objects或通过Bulk API或SOAP API上传。这是我们用来上传到我们的.csv文件Customer_Interaction__bBig Objects。作为一个例子,一个Big Objects可以支持比我们在这里提供的数据多很多倍的数据。

Play Start,In-Game Purchase,Level Achieved,Lives Used,Platform,Play Stop,Score,Account
2015-01-01T23:01:01Z,A12569,57,7,PC,2015-01-02T02:27:01Z,55736,001R000000302D3
2015-01-03T13:22:01Z,B78945,58,7,PC,2015-01-03T15:47:01Z,61209,001R000000302D3
2015-01-04T15:16:01Z,D12156,43,5,iOS,2015-01-04T16:55:01Z,36148,001R000000302D3

如果你想使用Apex填充 Customer_Interaction__b, 使用 insertImmediate 方法。

// Define the record
Customer_Interaction__b bo = new Customer_Interaction__b();
bo.Account__c = '001R000000302D3';
bo.Game_Platform__c = 'PC';
bo.Play_Date__c = DateTime.newInstance(2018, 2, 5);
bo.In_Game_Purchase__c = 'A12569';
bo.Level_Achieved__c = '45';
bo.Lives_This_Game__c = '3';
bo.Score_This_Game__c = '5500';
bo.Play_Duration__c = 25;
 
// Insert the record, which creates a new record
database.insertImmediate(bo);
// Define the record
Customer_Interaction__b bo = new Customer_Interaction__b();
bo.Account__c = '001R000000302D3';
bo.Game_Platform__c = 'PC';
bo.Play_Date__c = DateTime.newInstance(2018, 2, 5);
bo.In_Game_Purchase__c = 'A12569';
bo.Level_Achieved__c = '45';
bo.Lives_This_Game__c = '3';
bo.Score_This_Game__c = '5500';
bo.Play_Duration__c = 25;
 
// Modify a field in the index
bo.Game_Platform__c = 'Mac';
 
// Insert the record, creating a new record because the primary key has changed 
database.insertImmediate(bo);
// Define the record
Customer_Interaction__b bo = new Customer_Interaction__b();
bo.Account__c = '001R000000302D3';
bo.Game_Platform__c = 'PC';
bo.Play_Date__c = DateTime.newInstance(2018, 2, 5);
bo.In_Game_Purchase__c = 'A12569';
bo.Level_Achieved__c = '45';
bo.Lives_This_Game__c = '3';
bo.Score_This_Game__c = '5500';
bo.Play_Duration__c = 25;
 
// Modify a field not included in the index
bo.Level_Achieved__c = '1';
 
// Insert the record, which updates the second record because the index is the same 
database.insertImmediate(bo);
警告

警告

不允许使用混合DML调用的Apex测试失败。如果只写入Big Objects,则测试会将错误数据插入到您必须手动删除的目标Big Objects中。要包含对目标Big Objects的测试DML调用,请使用带有Apex存根API的模拟框架。

重新插入具有相同索引但具有不同数据的记录会导致类似于upsert操作的行为。如果存在具有索引的记录,则插入将使用新数据覆盖索引值。插入是幂等的,因此插入现有数据不会导致重复。上传数百万条记录时,重新插入很有帮助。如果发生错误,则重新插入会重新上载失败的上载而不会出现重复数据。在重新插入期间,如果提供的索引不存在记录,则插入新记录。

Big Objects-入门

学习目标

完成本单元后,您将能够:

  • 描述Big Objects是什么。
  • 确定自定义Big Objects的常见用例。
  • 确定查询Big Objects的方法。

什么是Big Objects?

您,完美的Salesforce pro,了解所有标准对象,自定义对象和外部对象。您知道这些对象如何帮助您管理和操作数据,以便您可以使用组织或外部系统进行令人惊叹的开拓性事物。

在这个大数据大胆的新时代,您经常会发现自己有太多的数据,这是您自己成功的牺牲品。有些数字要紧缩,但很难有效或有效地处理它们。性能受到欢迎,您开始希望您的标准,自定义或外部对象可能更大。

这就是Big Objects的用武之地。Big Objects允许您在Salesforce平台上存储和管理大量数据。你问多大?

一千条记录?不,想想更大。

十万?更大

一百万?甚至没有关闭

Big Objects为十亿或更多记录提供一致的性能,并且可以通过一组标准API访问组织或外部系统。想想所有这些数据!我们基本上对你已经知道的物体进行了巨大的拍摄,并且喜欢创造大物体。

有两种大型物体。

标准Big Objects由Salesforce定义,并包含在Salesforce产品中。FieldHistoryArchive,我们的Field Audit Trail产品的一部分,是标准Big Objects的一个​​例子。 FieldHistoryArchive 允许您存储长达10年的存档现场历史数据,帮助您遵守与审计和数据保留相关的行业法规。

在安装程序中定义和部署自定义Big Objects。您可以在安装程序中创建自定义Big Objects,您可以在其中设置其定义,字段和索引。Big Objects索引中定义的字段决定了Big Objects的身份及其查询的能力。我们将在下一个单元中将它们组合在一起。

我可以使用自定义Big Objects的一些方法是什么?

虽然您可以使用Big Objects来存储不同类型的数据,但是创建了Big Objects来处理一些特定的场景。

360°客户视图

您有很多想要存储的客户信息。从忠诚度计划到交易,订单和账单信息,使用自定义Big Objects来跟踪每个细节。

审计和跟踪

长期查看用户的Salesforce使用情况,以便进行分析或合规。

历史档案

在优化核心CRM或Lightning Platform应用程序的性能的同时,保持对历史数据的访问以用于分析或合规性目的。

查询Big Objects

当然,如果您无法在记录上运行正确的分析,那么保留所有这些数据对您没有任何帮助。您可以使用标准SOQL或Async SOQL查询Big Objects。

SOQL

您可以使用标准SOQL命令的子集查询Big Objects。如果您知道查询将返回少量数据,不想等待结果,或者需要立即返回结果以便在Apex中使用,请使用SOQL。我们将深入探讨标准SOQL如何与下一个单元中的Big Objects进行不同的工作。

异步SOQL

我们开发了Async SOQL来帮助管理自定义Big Objects中的数百万条潜在记录。Async SOQL是一种在您无法等待实时结果的情况下运行SOQL查询的方法,因为查询的数据非常庞大。它是一个高度可扩展的解决方案,使用SOQL命令的子集,使其易于使用已经熟悉SOQL的任何人。异步SOQL在后台异步调度和运行查询,因此它可以运行通常使用常规SOQL超时的查询。使用Async SOQL,您可以在后台运行多个查询,同时监控其完成状态。设置您的查询,几个小时后回到一个很棒的数据集来使用。

注意

注意

虽然每个许可证都包含自定义Big Objects,但Async SOQL仅包含额外Big Objects容量的许可。

什么是Catch?

由于Big Objects操作的规模,它们不像非Big Objects那样工作。在使用Big Objects时,请记住以下几点。

  • Big Objects仅支持对象和字段权限。
  • 部署Big Objects后,无法编辑或删除索引。要更改索引,请从新的Big Objects开始。
  • SOQL关系查询基于从Big Objects到选择字段列表中的标准或自定义对象的查找字段(不在过滤器或子查询中)。
  • Big Objects支持自定义Salesforce Lightning和Visualforce组件,而不是标准UI元素(主页,详细信息页,列表视图等)。要在记录的相关列表中查看自定义Big Objects数据,可以安装自定义Lightning组件。有关详细信息,请参阅Custom Big Object Creator。
  • 每个组织最多可以创建100个Big Objects。Big Objects字段的限制类似于自定义对象的限制,并取决于您的组织许可证类型。
  • Big Objects不支持包含Big Objects,标准对象和自定义对象的事务。
  • 要支持Big Objects中的数据规模,您不能使用触发器,流,进程和Salesforce应用程序。

版本控制(5)

学习目标

完成本单元后,您将能够:

  • 将GitHub工作流转换为适用于团队的有效分支策略。
  • 解决GitHub上的合并冲突。
  • 创建代表单个工作单元的原子提交。

Illustration of branching in GitHub.

分支策略的工作

现在您已经通过一个简单的GitHub流程示例,想象一下工作流程如何与团队一起工作。将所有分支,提交和请求数量乘以团队中同事的数量,并积极开发。以前有很多团队都做过这样的事情,而且有一些成功的模式。

一般来说,分支机构应该是短暂的,创建完成一个功能,并在合并后删除。短命的分支可避免混淆,鼓励最新的代码,并设置开发人员对项目进行迭代改进。

长时间运行的分支可能会造成问题,如果不被有意使用。有时候,长期的分支对于开发分支是有意义的,或者对于需要多级部署级代码的其他情况。长期运行的分支所面临的大部分挑战来自于没有每个分支的最新版本的开发人员,造成了不必要的合并冲突,混淆和工作。虽然更复杂的分支工作流可能看起来是正确的解决方案,但是它们经常过于复杂,更简单的GitHub流更有效地工作。

有些问题要问你的团队分支:

  • 我们将使用哪种分支策略?
  • 哪个分支将作为我们的主或部署代码?
  • 我们将使用命名约定为我们的分支机构?
  • 我们将如何使用标签和受让人?
  • 我们会使用里程碑吗?
  • 我们会使用项目委员会(项目)吗?
  • 我们是否需要用于问题或拉取请求的模板/元素(例如运输清单)?
  • 我们将如何表示签收请求?
  • 谁将合并请求?

请记住,分支的力量来自一个安全的地方进行更改,并有权审查和测试拉请求。当你决定团队的分支期望时,保持轻量级,易于学习。专注于协作。

处理合并冲突

当你和一个团队一起工作(甚至有时候你独自一人工作),你偶尔会产生合并冲突。起初,合并冲突可能是令人恐惧的,但解决它们其实很简单。

让我们尝试创建一个合并冲突,看看会发生什么。

创建具有冲突提交的多个分支

我们知道合并冲突是在多个提交到相同文件的相同部分的分支上进行的。所以,要练习,让我们来设置。

  1. 从master创建一个新分支(new-branch-1),更改README.md文件,并创建一个pull请求:
    1. 输入命令: git checkout -b new-branch-1
    2. 更改存储库中的README.md文件。记下你改变的哪一行。
    3. 在新分支1上,添加并提交更改:
      1. 输入命令: git add README.md 
      2. 输入命令: git commit -m "Changes to the README"
        注意:在正常的实践中,我们不建议直接向主人提交 – 我们只是在这里做,它很快就会造成合并冲突。
    4. 将分支推到远程仓库: git push -u origin new-branch-1
    5. 打开GitHub并为此提交创建一个拉取请求
  2. 现在,为了创建下一个分支和拉取请求,请检查返回给master:
    git checkout master
  3. 创建一个新分支(new-branch-2),对同一个文件进行更改并创建一个pull请求:
    1. 输入命令: git checkout -b new-branch-2
    2. 将README.md文件更改为文件的同一行。
    3. 输入命令: git add README.md
    4. 输入命令: git commit -m “More changes to the README”
    5. 输入命令: git push -u origin new-branch-2
    6. 在GitHub中,创建一个拉请求

合并一个请求

到目前为止,两个分支都没有合并冲突。在GitHub中,合并您的第一个请求(来自new-branch-1)。

解决对方的冲突

合并new-branch-1的拉取请求后,转到 new-branch-2的拉取请求。

Screenshot showing merge conflict in GitHub.

你会看到有一个合并冲突!不要惊慌,你可以通过这个。根据合并冲突的复杂程度,您可以选择在GitHub上的浏览器中解决冲突,也可能需要在本地解决冲突。

要在本地解决它,您将合并到您的分支,解决冲突,然后再完成合并。

  1. 签出有冲突的分支: git checkout new-branch-2
  2. 确保你的本地仓库是最新的: git pull
  3. 合并主功能分支:git merge origin / master注意你正在合并远程追踪分支,而不是你的本地主副本 – 这是因为pull命令更新了远程分支和你正在使用的分支,但没有更新主分支。
  4. 当你看到有冲突的时候,没关系!输入git status来验证哪个文件有冲突。有冲突的文件列在Unmerged Paths下。
  5. 在文本编辑器中打开该文件,然后查找合并冲突标记。(<<<<<<<=======>>>>>>>)
  6. 两个分支的代码版本都存在 – 选择你想要保留的代码并删除其他代码。确保删除由Git创建的合并冲突标记并保存更改。
  7. 添加并提交保存的更改以解决合并冲突:
    1. 输入命令: git add README.md
    2. 输入命令: git commit -m “Commit to resolve merge conflict”
  8. 将功能分支推到远程: git push
  9. 回到GitHub的pull请求。拉请求现在没有冲突。没有冲突的分支屏幕截图。Screenshot of branch with no conflicts.
  10. 合并拉取请求。

现在我们已经完成了这些分支,在GitHub中删除它们,然后使用git checkout master和git pull命令来同步您的本地存储库。

工艺原子提交

编写原子提交是创建项目可读和信息丰富的历史的重要组成部分。

在一个完美的世界里,你永远不需要去看或改变你的历史。然而,我们并不是生活在一个完美的世界,所以版本控制让我们在必要的时候查看我们的变化历史。每个提交都应该是一个小小的逻辑变化单元,并讲述你的存储库的故事。

让我们练习一个命令来帮助您完成原子提交,git add –patch或git add -p。这个命令可以让您将文件的不同部分添加到暂存区域,帮助您进行确实是逻辑单元更改的提交。

  1. 将 bigFile.md 下载到您的计算机(您可能需要右键单击并选择 Save Target A
  2. 在GitHub中,将bigFile.md上传到最好的仓库中的master分支:
    1. 点击 Upload files
    2. 从您的电脑中选择 bigFile.md
    3. 选择 Commit directly to the master branch
    4. 点击 Commit changes
  3. 确保您的本地主存储库是最新的:
    1. 输入命令: git checkout master
    2. 输入命令: git pull
  4. 看看git跟踪的是什么: git status
    你应该看到没有什么可以提交的。
  5. 对第1行和第100行上的bigFile.md进行更改(修改内容无关紧要)。
  6. 使用–patch标志将一些文件的某些部分移至暂存区: git add -p
  7. 按y或n选择是否放弃hunk。

想知道为什么所有这些其他选项是为人?使用 ?查看大块以上的选项列表。

版本控制(4)

学习目标

完成本单元后,您将能够:

  • 列出GitHub工作流程中的步骤。
  • 解释远程和本地工作环境之间的区别。
  • 完成创建新文件并更改现有文件的步骤。

Flow chart showing code, then collaborate, and then ship.

GitHub工作流程概述

GitHub流程是一个轻量级的工作流程,可让您安全地尝试新想法,而不必担心会影响项目。主要步骤是:

  1. 创建一个分支关闭master
  2. 提交
  3. 打开pull request
  4. 合作
    1. 做更多的承诺
    2. 与集成进行交互
  5. 合并master branch

创建一个分支

分支是Git中的一个关键概念。 Git中的所有东西都生活在一个分支上。默认情况下,项目的生产版本位于主分支中。

当您准备好尝试新功能或解决问题时,请创建项目的新分支。首先,分支看起来和主人一模一样,但是你所做的任何更改只会反映在你的分支中。

提交
在对项目中的文件进行更改时,将它们提交到您的功能分支。

打开合并请求并进行协作
打开拉取请求开始讨论您的更改。拉取请求意味着进一步完善代码的起点 – 不需要它是一个完美的艺术作品。

合并到主分支
一旦您的团队批准您的更改,请将功能分支中的拉取请求合并到主分支中。
所以这在理论上是很好的,但是让我们把它付诸实践吧。

安装Git

在我们完成本单元其余部分的Git示例之前,首先要做的就是在您的计算机上安装Git。这使您可以在本地使用存储库。访问Git网站并按照说明安装Git的正式版本。在安装过程中接受所有的默认设置。

注册一个GitHub帐户并创建一个存储库

你要做的第一件事就是注册一个GitHub个人账户。这是GitHub的免费版本,可以让您按照以下步骤进行操作。

接下来创建一个工作库。

  1. 在标题中,单击并选择 New repository
  2. 输入存储库名称: best-repo-ever
  3. 选择项目是公共还是私人。 (我们现在推荐公众,公共仓库是免费的。)
  4. 选择 Initialize this repository with a README
  5. 点击Create repository

Screenshot of the repository creation screen.

在GitHub和本地工作

您可以直接在GitHub上对项目进行更改,但大多数人更喜欢在本地机器上工作,以便可以在自己喜欢的IDE或文本编辑器中进行更改。我们来回顾几个重要的术语:

  • Remote repository 是GitHub上仓库的副本。所有的协作者都将这些变化与这个同步,使之成为这个组织的真实来源。
  • Local repositories 是存储在用户计算机上的git存储库。如果本地目录链接到远程存储库,则本地存储库是远程存储库上所有内容的完整副本,包括其所有文件,分支和历史记录。

本地和远程存储库仅在Git中运行四个网络命令之一时进行交互:git clonegit fetchgit pull, and git push.

要在存储库上进行本地工作,首先需要在计算机上创建一个克隆。要克隆存储库,请按照下列步骤操作:

  1. 在GitHub中,点击你刚创建的版本库的代码标签
  2. 点击 Clone or download
  3. 将克隆网址复制到剪贴板
  4. 打开你的命令行应用程序。如果您在Mac或Linux上,则可以使用您的终端。如果你在Windows上,我们推荐你使用Git Bash,它随Git一起安装。
  5. 从GitHub中检索存储库的完整副本:git clone <CLONE-URL>。将<CLONE-URL>替换为上面复制的克隆URL。你应该看到这样的东西:
    Cloning into 'best-repo-ever'... 
    remote: Counting objects: 3, done. 
    remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0 
    Unpacking objects: 100% (3/3), done.
  6. 克隆完成后,cd进入由克隆操作创建的新目录: cd best-repo-ever

注意:您也可以使用桌面应用程序(如GitHub桌面)与Git和GitHub进行交互。这些提供了与存储库更直观的交互,通常非常强大。

配置您的本地环境

在对代码进行更改之前,您需要设置一些基本配置。您通常只需要设置一次这些配置。 Git允许您在三个不同的级别设置配置选项。

git config --system 这些是系统范围的配置。它们适用于此计算机上的所有用户。
git config --global 这些是用户级配置。他们只适用于您的用户帐户。
git config--local 这些是存储库级配置。它们只适用于设置它们的特定存储库。 git config的默认值是 --local.

Git会自动添加几个配置 – 输入git config –list来查看所有三个级别的配置设置。

Git使用您的用户名和电子邮件地址的配置设置为您创建的每个提交生成一个唯一的指纹。你不能创建提交没有这些设置,所以使用你的命令行应用程序自己设置它们:

$ git config --global user.name "First Last" 
$ git config --global user.email "you@email.com"
注意:您不会看到任何确认这个工作,但只要您没有看到错误,您就设置好了!

配置autocrlf
接下来,我们设置core.autocrlf(autocrlf代表自动回车换行符)。不同的系统处理换行符和换行符的方式不同。如果你打开在另一个操作系统上创建的文件,并且没有设置这个配置选项,Git会认为你根据你的操作系统处理行结束的方式对文件进行了修改。

对于Windows用户输入:

$ git config --global core.autocrlf true
对于Mac或Linux用户输入:
$ git config --global core.autocrlf input
使用GitHub跟踪文件

现在你已经有一个仓库的本地副本,并且已经配置好了Git,你可以使用GitHub工作流对项目进行一些修改。我们首先对README.md文件进行简单的更改。

第1步:创建一个Branch

要查看本地分支的列表,请键入 git branch. 现在,你可能只看到一个分支:master.

让我们为我们的工作创建一个新的分支(myfeaturebranch):

  1. 键入git branch myfeaturebranch
  2. Checkout 到该分支 git checkout myfeaturebranch

你应该看到这样的东西:

kjameson-ltm:best-repo-ever kjameson$ git branch 
   * master  
kjameson-ltm:best-repo-ever kjameson$ git branch myfeaturebranch 
kjameson-ltm:best-repo-ever kjameson$ git checkout myfeaturebranch 
  Switched to branch 'myfeaturebranch'
注意:如果你听说过从其他VCS签出,这可能意味着不同于Git。使用Git,checkout会移动一个名为HEAD的重要指针,在这种情况下,我们将移动到另一个分支。 HEAD指向你的分支的尖端。我们在最后一个单元中讨论HEAD。

步骤2:更改README.md文件并将更改提交到本地存储库

现在你已经签出了新的分支,做一些改变,看看Git的行动。

  1. 打开存储库中的README.md
  2. 用你最喜欢的文本编辑器添加一些内容。
  3. 完成后,保存您的更改。

在对文件进行了一些更改之后,是时候创建第一个快照了。从命令行工作时,您需要熟悉 two stage commit.

当您在本地工作时,您的文件存在四种状态之一。他们要么未被追踪,修改,上演或承诺。 Git跟踪这些文件,并通过在三棵树中组织文件和更改来跟踪您的历史。他们正在工作,分期(也称为索引)和历史。当我们添加,删除和更改文件时,我们在工作树中执行此操作。

Diagram of the three trees of Git, working, staging, and history.

要将更改添加到版本控制中,请创建一组表示离散工作单元的文件集合 – 我们在暂存区域中构建此单元。

当我们对我们组装的工作单元感到满意时,我们会在暂存区域对所有内容进行快照。这被称为 commit.

让我们使用命令git add和git commit来完成这个过程:

  1. 检查我们的工作树的状态: git status
    kjameson-ltm:best-repo-ever kjameson$ git status 
    On branch myfeaturebranch 
    Changes not staged for commit: 
          (use "git add <file>..." to update what will be committed) 
          (use "git checkout -- <file>..." to discard changes in working directory)  
       modified: README.md 
    no changes added to commit (use "git add" and/or "git commit -a")
  2. 将文件从工作树移动到临时区域:git add README.md
  3. 输入git status来查看发生了什么事情:
    kjameson-ltm:best-repo-ever kjameson$ git status
    On branch myfeaturebranch 
    Changes to be committed: 
          (use "git reset HEAD <file>..." to unstage)
       modified: README.md 
  4. 拿我们的第一个快照:git commit -m “My first commit”
  5. 让我们再看看我们的存储库状态: git status
    kjameson-ltm:best-repo-ever kjameson$ git status
    On branch myfeaturebranch 
    nothing to commit, working tree clean

步骤3:将更改发送到远程存储库

现在,这个提交只是本地的。如果您检查远程存储库,您将看不到您的分支或您刚才所做的更改。要查看远程更改,首先需要将更改推送到远程存储库。

既然我们在本地创建了这个分支,我们将首先创建一个与我们本地分支匹配的远程分支。用同样的命令,我们也会建立两个分支之间的跟踪关系。

  1. 输入 git push -u origin myfeaturebranch
  2. 当被问及时,输入你的GitHub用户名,然后输入你的密码。
    kjameson-ltm:best-repo-ever kjameson$ git push -u origin myfeaturebranch 
    Username for 'https://github.com': kierenjameson 
    Password for 'https://kierenjameson@github.com': 
    Counting objects: 6, done. 
    Delta compression using up to 4 threads. 
    Compressing objects: 100% (4/4), done. 
    Writing objects: 100% (6/6), 551 bytes | 0 bytes/s, done. 
    Total 6 (delta 1), reused 0 (delta 0) 
    remote: Resolving deltas: 100% (1/1), done. 
    To https://github.com/kierenjameson/best-repo-ever.git
       * [new branch] myfeaturebranch -> myfeaturebranch 
    Branch myfeaturebranch set up to track remote branch myfeaturebranch from origin.

注意:第一次推新分支时只需要这么长的命令。之后,你可以简单地输入git push。

第4步:创建合并请求

现在,您已将更改推送到远程存储库,让我们在GitHub上打开一个pull请求。

  1. 转到您的GitHub帐户在网上
  2. 点击Pull Request 标签
  3. 点击 New Pull Request
  4. 在Base下拉菜单中选择 master
  5. 在比较下拉列表中,选择myfeaturebranch。你应该看到这样的东西:

Screenshot from GitHub showing comparison of changes between master branch and myfeaturebranch.

  1. 点击 Create pull request
  2. 输入 Subject 和Comment
  3. 点击 Create pull request

通过代码审查控制代码质量

拉取请求不仅仅是分支的比较,它们是通过人工和自动化努力来检查代码并确保质量的一种方式。

一般对话
使用“对话”选项卡在拉取请求上添加常规注释。

行评论
在“文件已更改”选项卡(A)中,可以将鼠标悬停在一行上以查看蓝色+图标(B)。点击此图标将允许您在特定的行上输入注释(C)。这些行级别注释是提供建议更改的附加上下文的好方法。它们也将显示在会话视图中。

Screenshot showing how to add line comments.

评论
在进行评论时,您也可以选择开始评论(D)。创建审阅时,可以将许多行注释与摘要消息一起分组。提交评论时,您可以指出是评论,批准还是要求更改。在与受保护分支结合使用时,请求评论在GitHub中具有特殊的功能,如果没有至少一个评论,则可以防止合并请求。

自动化测试
如果您已经将CI / CD与您的项目集成在一起,您将看到正确的报告请求状态。这些测试是高度可定制的。

合并您的更改

当你合并你的分支时,你从你的功能分支中获取内容和历史记录,并将其添加到主分支的内容和历史记录中。

合并是快速和容易点击合并拉取请求,添加合并注释,然后单击确认合并。

你的团队应该建立谁应该合并拉取请求的规则。一些选项包括:

  • 创建拉取请求的人应该合并,因为他们需要解决合并导致的问题。
  • 在项目组中分配一个人。这确保了一致性,但可能成为一个瓶颈。
  • 创建拉取请求的人以外的任何人都可以合并。这确保了至少一次审查已经发生。

保持一切同步

合并你的pull请求之后,删除GitHub上的分支。要执行此操作,请点击请求画面底部的删除分支。

但是,在GitHub上合并和删除不会自动更新您的本地版本库。让我们回到我们的命令行应用程序,并让所有内容同步。

首先,我们需要将我们在GitHub上所做的更改导入到本地版本库中:

  1. 切换回你的默认分支: git checkout master
  2. 从GitHub中检索所有更改: git pull
    kjameson-ltm:best-repo-ever kjameson$ git checkout master 
    Switched to branch 'master' 
    Your branch is up-to-date with 'origin/master'. 
    
    kjameson-ltm:best-repo-ever kjameson$ git pull 
    remote: Counting objects: 1, done. 
    remote: Total 1 (delta 0), reused 0 (delta 0), pack-reused 0 
    Unpacking objects: 100% (1/1), done. 
    From https://github.com/kierenjameson/best-repo-ever 
           f464053..599f35f master -> origin/master 
    Updating f464053..599f35f 
    Fast-forward 
       README.md | 4 +++- 1 
       file changed, 3 insertions(+), 1 deletion(-)
    注意:git pull是一个组合命令,它从GitHub中检索所有更改,然后更新当前所在的分支,以包含来自远程的更改。正在运行的两个独立命令是git fetch和git merge。