Salesforce Skill

Polar Sponsor
爱发电 赞助
.NET 9.0

通过Salesforce CLI(sf)查询和管理Salesforce CRM数据。执行SOQL/SOSL查询、查看对象模式、增删改记录、批量导入/导出、运行Apex、部署元数据以及调用原始REST API。

销售力 技能 : 使用销售力 CLI (sf) 与 Salesforce orgs 进行交互

功能概述

销售力 技能 : 使用销售力 CLI (sf) 与 Salesforce orgs 进行交互是一项面向实际任务的技能,主要用于使用前必须认证 CLI;结构输出时总是添加 --json;

核心要点

  • 如果 sf 二进制不可用。
  • 它将相关步骤、工具调用和结果整理方式集中到统一流程中,帮助使用者更快完成目标并减少重复操作。
  • 使用时应结合输入条件选择合适的执行方式,核对必要参数、依赖环境与输出内容,并按原始要求处理异常情况。

使用与执行

该技能适合需要稳定复用相关能力的场景,可作为自动化工作流的一部分,也便于后续检查、调整和扩展。从功能定位来看,该技能强调把分散的操作要求整理成清晰、可复用的处理流程,使用户能够围绕既定目标快速准备输入、选择执行方式并获得结构化结果。实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;

结果检查与注意事项

若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;涉及批量任务时,还应保存进度,避免中断后重复操作。

Salesforce 技能

使用 Salesforce CLI(sf)与 Salesforce 组织(org)进行交互。使用前必须完成 CLI 认证。始终添加 --json 参数以获取结构化输出。

若系统中未安装 sf 可执行文件,可通过 npm 安装(npm install -g @salesforce/cli),或从 https://developer.salesforce.com/tools/salesforcecli 下载。安装完成后,请立即运行 sf org login web 进行认证,以连接到 Salesforce 组织。

认证与组织管理

登录(打开浏览器)

sf org login web --alias my-org

其他登录方式:

# 基于 JWT 的登录(适用于 CI/自动化场景)
sf org login jwt --client-id  --jwt-key-file server.key --username user@example.com --alias my-org

# 使用已有访问令牌登录
sf org login access-token --instance-url https://mycompany.my.salesforce.com

# 通过 SFDX 认证 URL 登录(URL 来自文件)
sf org login sfdx-url --sfdx-url-file authUrl.txt --alias my-org

组织管理

# 列出所有已认证的组织
sf org list --json

# 显示默认组织的信息(访问令牌、实例 URL、用户名)
sf org display --json

# 显示指定组织的信息
sf org display --target-org my-org --json

# 显示包含 SFDX 认证 URL 的详细信息(敏感信息 — 含刷新令牌)
sf org display --target-org my-org --verbose --json

# 在浏览器中打开组织
sf org open
sf org open --target-org my-org

# 注销
sf org logout --target-org my-org

配置与别名

# 设置默认目标组织
sf config set target-org my-org

# 列出所有配置变量
sf config list

# 获取指定配置项的值
sf config get target-org

# 设置别名
sf alias set prod=user@example.com

# 列出所有别名
sf alias list

数据查询(SOQL)

通过默认 API 执行标准 SOQL 查询:

# 基础查询
sf data query --query "SELECT Id, Name, Email FROM Contact LIMIT 10" --json

# WHERE 子句
sf data query --query "SELECT Id, Name, Amount, StageName FROM Opportunity WHERE StageName = 'Closed Won'" --json

# 关系查询(父 → 子)
sf data query --query "SELECT Id, Name, (SELECT LastName, Email FROM Contacts) FROM Account LIMIT 5" --json

# 关系查询(子 → 父)
sf data query --query "SELECT Id, Name, Account.Name FROM Contact" --json

# LIKE 文本搜索
sf data query --query "SELECT Id, Name FROM Account WHERE Name LIKE '%Acme%'" --json

# 日期筛选
sf data query --query "SELECT Id, Name, CreatedDate FROM Lead WHERE CreatedDate = TODAY" --json

# ORDER BY + LIMIT
sf data query --query "SELECT Id, Name, Amount FROM Opportunity ORDER BY Amount DESC LIMIT 20" --json

# 包含已删除/已归档记录
sf data query --query "SELECT Id, Name FROM Account" --all-rows --json

# 从文件执行查询
sf data query --file query.soql --json

# Tooling API 查询(元数据对象,如 ApexClass、ApexTrigger)
sf data query --query "SELECT Id, Name, Status FROM ApexClass" --use-tooling-api --json

# 输出为 CSV 文件
sf data query --query "SELECT Id, Name, Email FROM Contact" --result-format csv --output-file contacts.csv

# 指定目标组织
sf data query --query "SELECT Id, Name FROM Account" --target-org my-org --json

对于返回记录数超过 10,000 条的查询,请改用 Bulk API:

sf data export bulk --query "SELECT Id, Name, Email FROM Contact" --output-file contacts.csv --result-format csv --wait 10
sf data export bulk --query "SELECT Id, Name FROM Account" --output-file accounts.json --result-format json --wait 10

文本搜索(SOSL)

SOSL 可同时跨多个对象执行搜索:

# 跨对象搜索文本
sf data search --query "FIND {John Smith} IN ALL FIELDS RETURNING Contact(Name, Email), Lead(Name, Email)" --json

# 仅在名称字段中搜索
sf data search --query "FIND {Acme} IN NAME FIELDS RETURNING Account(Name, Industry), Contact(Name)" --json

# 从文件执行搜索
sf data search --file search.sosl --json

# 输出为 CSV
sf data search --query "FIND {test} RETURNING Contact(Name)" --result-format csv

单条记录操作

获取记录

# 按记录 ID 获取
sf data get record --sobject Contact --record-id 003XXXXXXXXXXXX --json

# 按字段匹配(类似 WHERE)
sf data get record --sobject Account --where "Name=Acme" --json

# 按多个字段匹配(含空格的值需加单引号)
sf data get record --sobject Account --where "Name='Universal Containers' Phone='(123) 456-7890'" --json

创建记录(首次执行前需用户确认)

sf data create record --sobject Contact --values "FirstName='Jane' LastName='Doe' Email='jane@example.com'" --json

sf data create record --sobject Account --values "Name='New Company' Website=www.example.com Industry='Technology'" --json

# Tooling API 对象
sf data create record --sobject TraceFlag --use-tooling-api --values "DebugLevelId=7dl... LogType=CLASS_TRACING" --json

更新记录(首次执行前需用户确认)

# 按 ID 更新
sf data update record --sobject Contact --record-id 003XXXXXXXXXXXX --values "Email='updated@example.com'" --json

# 按字段匹配更新
sf data update record --sobject Account --where "Name='Old Acme'" --values "Name='New Acme'" --json

# 多字段更新
sf data update record --sobject Account --record-id 001XXXXXXXXXXXX --values "Name='Acme III' Website=www.example.com" --json

删除记录(需显式用户确认)

# 按 ID 删除
sf data delete record --sobject Account --record-id 001XXXXXXXXXXXX --json

# 按字段匹配删除
sf data delete record --sobject Account --where "Name=Acme" --json

批量数据操作(Bulk API 2.0)

适用于大规模数据集(数千至数百万条记录):

批量导出

# 导出为 CSV
sf data export bulk --query "SELECT Id, Name, Email FROM Contact" --output-file contacts.csv --result-format csv --wait 10

# 导出为 JSON
sf data export bulk --query "SELECT Id, Name FROM Account" --output-file accounts.json --result-format json --wait 10

# 包含软删除记录
sf data export bulk --query "SELECT Id, Name FROM Account" --output-file accounts.csv --result-format csv --all-rows --wait 10

# 恢复超时的导出任务
sf data export resume --job-id 750XXXXXXXXXXXX --json

批量导入

# 从 CSV 导入
sf data import bulk --file accounts.csv --sobject Account --wait 10

# 恢复超时的导入任务
sf data import resume --job-id 750XXXXXXXXXXXX --json

批量 Upsert

sf data upsert bulk --file contacts.csv --sobject Contact --external-id Email --wait 10

批量删除

# 删除 CSV 中列出的记录(CSV 必须包含 Id 列)
sf data delete bulk --file records-to-delete.csv --sobject Contact --wait 10

树形导出/导入(用于关联记录)

# 导出为带关系的 JSON 树格式
sf data export tree --query "SELECT Id, Name, (SELECT Name, Email FROM Contacts) FROM Account" --json

# 使用计划文件导出(支持多对象)
sf data export tree --query "SELECT Id, Name FROM Account" --plan --output-dir export-data

# 从树形 JSON 文件导入
sf data import tree --files Account.json,Contact.json

# 使用计划定义文件导入
sf data import tree --plan Account-Contact-plan.json

模式检查(Schema Inspection)

# 描述对象(字段、关系、选择列表值等)
sf sobject describe --sobject Account --json

# 描述自定义对象
sf sobject describe --sobject MyCustomObject__c --json

# 描述 Tooling API 对象
sf sobject describe --sobject ApexClass --use-tooling-api --json

# 列出所有对象
sf sobject list --json

# 仅列出自定义对象
sf sobject list --sobject custom --json

# 仅列出标准对象
sf sobject list --sobject standard --json

执行 Apex 代码

# 从文件执行 Apex
sf apex run --file script.apex --json

# 交互式执行(输入代码后按 Ctrl+D 执行)
sf apex run

# 运行 Apex 测试
sf apex run test --test-names MyTestClass --json

# 获取测试结果
sf apex get test --test-run-id 707XXXXXXXXXXXX --json

# 查看 Apex 日志
sf apex list log --json
sf apex get log --log-id 07LXXXXXXXXXXXX

REST API(高级用法)

发起任意已认证的 REST API 请求:

# GET 请求
sf api request rest 'services/data/v62.0/limits' --json

# 列出 API 版本
sf api request rest '/services/data/' --json

# 通过 REST 创建记录
sf api request rest '/services/data/v62.0/sobjects/Account' --method POST --body '{"Name":"REST Account","Industry":"Technology"}' --json

# 通过 REST 更新记录(PATCH)
sf api request rest '/services/data/v62.0/sobjects/Account/001XXXXXXXXXXXX' --method PATCH --body '{"BillingCity":"San Francisco"}' --json

# GraphQL 查询
sf api request graphql --body '{"query":"{ uiapi { query { Account { edges { node { Name { value } } } } } } }"}' --json

# 自定义请求头
sf api request rest '/services/data/v62.0/limits' --header 'Accept: application/xml'

# 将响应保存至文件
sf api request rest '/services/data/v62.0/limits' --stream-to-file limits.json

元数据部署与检索

# 将元数据部署到组织
sf project deploy start --source-dir force-app --json

# 部署特定元数据组件
sf project deploy start --metadata ApexClass:MyClass --json

# 从组织中检出元数据
sf project retrieve start --metadata ApexClass --json

# 查看部署状态
sf project deploy report --job-id 0AfXXXXXXXXXXXX --json

# 生成新的 Salesforce DX 项目
sf project generate --name my-project

# 列出组织中的元数据组件
sf project list ignored --json

诊断命令

# 运行 CLI 诊断
sf doctor

# 查看 CLI 版本
sf version

# 查看最新特性说明
sf whatsnew

常用 SOQL 模式

-- 统计记录数量
SELECT COUNT() FROM Contact WHERE AccountId = '001XXXXXXXXXXXX'

-- 聚合查询
SELECT StageName, COUNT(Id), SUM(Amount) FROM Opportunity GROUP BY StageName

-- 日期字面量
SELECT Id, Name FROM Lead WHERE CreatedDate = LAST_N_DAYS:30

-- 子查询(半连接)
SELECT Id, Name FROM Account WHERE Id IN (SELECT AccountId FROM Contact WHERE Email LIKE '%@acme.com')

-- 多态查找(Polymorphic lookup)
SELECT Id, Who.Name, Who.Type FROM Task WHERE Who.Type = 'Contact'

-- 多重 WHERE 条件
SELECT Id, Name, Amount FROM Opportunity WHERE Amount > 10000 AND StageName != 'Closed Lost' AND CloseDate = THIS_QUARTER

安全守则(Guardrails)

  • 始终使用 --json 参数,确保输出为结构化、可解析格式。
  • 禁止未经用户明确确认即创建、更新或删除记录。 执行前须清晰描述操作内容并征得用户同意。
  • 禁止执行删除操作,除非用户明确要求且确认具体要删除的记录。
  • 禁止执行批量删除或批量导入操作,除非用户已审阅相关文件或查询内容并主动确认。
  • 查询时应使用 LIMIT 限制返回结果数量,避免数据量过大;建议起始值设为 LIMIT 10,再根据用户需求逐步增加。
  • 对预计返回记录数超过 10,000 条的查询,请使用 sf data export bulk,而非 sf data query。
  • 当用户要求“查找”或“搜索”单个对象时,使用 SOQL 的 WHERE ... LIKE '%term%';当需跨多个对象搜索时,则使用 sf data search 发起 SOSL 查询。
  • 当用户拥有多个组织时,应使用 --target-org 显式指定目标;若存在歧义,需主动询问用户选择哪一个组织。
  • 若认证失败或会话过期,请引导用户执行 sf org login web 重新完成认证。
  • Bulk API 2.0 对 SOQL 存在限制(不支持 COUNT() 等聚合函数)。此类查询请使用标准的 sf data query 命令。
  • 执行 sf sobject describe 时,JSON 输出可能非常庞大。请为用户归纳关键字段、必填字段及对象间关系,避免直接输出原始 JSON 内容。

相关专题

更多
Uvicorn 报错与问题解决教程
Uvicorn 报错与问题解决教程

本专题汇总了Uvicorn服务器常见问题与报错解决的教程合集,涵盖启动失败、端口占用、模块导入错误、事件循环冲突及热重载失效等典型故障的排查思路。同时整理了多进程与Worker配置、SSL/HTTPS证书报错、跨域与代理配置等实战解决方案,助你快速定位并解决Uvicorn运行中的各类问题。

2026.11.02

0

14

Uvicorn使用教程
Uvicorn使用教程

本专题汇总了Uvicorn使用教程与启动运行指南,涵盖其作为Python ASGI服务器的定位与特点,以及命令行启动(uvicorn main:app --reload)、参数配置(host/port/workers)、程序内嵌运行与Gunicorn结合部署等核心用法。同时整理了热重载调试、日志配置与生产环境部署优化等技巧,助你快速掌握Uvicorn的运行与配置。

2026.11.02

0

17

Uvicorn安装配置教程
Uvicorn安装配置教程

本专题汇总了Uvicorn的安装配置教程与部署指南,涵盖通过pip安装Uvicorn、启动FastAPI/Starlette应用、开发模式热重载(--reload)及多进程工作模式配置等核心操作。同时整理了结合Gunicorn的生产部署方案、HTTPS与反向代理配置及性能调优技巧,助你快速完成Uvicorn服务的安装与上线部署。

2026.11.02

0

17

Vite 项目如何打包和部署
Vite 项目如何打包和部署

Vite项目打包部署专题汇集生产构建、产物预览、输出目录、资源路径、Nginx与GitHub Pages部署及常见白屏和路由404问题的已审核文章,帮助读者完成上线流程。

2026.10.28

0

16

Vite 如何搭配 Vue.js
Vite 如何搭配 Vue.js

Vite搭配Vue.js专题汇集创建Vue 3项目、配置开发环境、路径别名、Vue插件、代理、多环境构建与调试的已审核文章,帮助读者完成从初始化到日常开发的配置。

2026.10.28

0

15

Vite 项目目录怎么看
Vite 项目目录怎么看

Vite项目目录专题汇集入口文件、src源码、public静态资源、路径别名、项目根目录和构建输出目录相关的已审核文章,帮助读者理解各文件夹的用途与引用方式。

2026.10.28

0

10

Gradle插件开发入门教程
Gradle插件开发入门教程

本专题介绍Gradle插件开发的基本流程,涵盖插件类编写、自定义任务注册、扩展参数设计和插件应用方法,帮助你理解插件如何组织构建逻辑,减少多个项目之间的重复配置。

2026.10.22

0

11

Gradle Wrapper配置教程
Gradle Wrapper配置教程

本专题介绍Gradle Wrapper的基本作用,涵盖文件组成、生成方法、版本配置和任务调用,帮助你理解项目如何使用指定的Gradle版本,减少不同开发环境带来的构建差异。

2026.10.22

0

10

Golangci-lint检查器使用教程
Golangci-lint检查器使用教程

本专题整理Golangci-lint常用Linters的用途与配置方法,覆盖错误处理、无效代码、安全、复杂度、命名和依赖检查,帮助项目合理选规则。

2026.10.22

0

15

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.7万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 134.1万人学习