通过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 内容。
热门AI工具
相关专题
本专题汇总了Uvicorn服务器常见问题与报错解决的教程合集,涵盖启动失败、端口占用、模块导入错误、事件循环冲突及热重载失效等典型故障的排查思路。同时整理了多进程与Worker配置、SSL/HTTPS证书报错、跨域与代理配置等实战解决方案,助你快速定位并解决Uvicorn运行中的各类问题。
0
2026.11.02
本专题汇总了Uvicorn使用教程与启动运行指南,涵盖其作为Python ASGI服务器的定位与特点,以及命令行启动(uvicorn main:app --reload)、参数配置(host/port/workers)、程序内嵌运行与Gunicorn结合部署等核心用法。同时整理了热重载调试、日志配置与生产环境部署优化等技巧,助你快速掌握Uvicorn的运行与配置。
0
2026.11.02
本专题汇总了Uvicorn的安装配置教程与部署指南,涵盖通过pip安装Uvicorn、启动FastAPI/Starlette应用、开发模式热重载(--reload)及多进程工作模式配置等核心操作。同时整理了结合Gunicorn的生产部署方案、HTTPS与反向代理配置及性能调优技巧,助你快速完成Uvicorn服务的安装与上线部署。
0
2026.11.02
Vite项目打包部署专题汇集生产构建、产物预览、输出目录、资源路径、Nginx与GitHub Pages部署及常见白屏和路由404问题的已审核文章,帮助读者完成上线流程。
0
2026.10.28
Vite搭配Vue.js专题汇集创建Vue 3项目、配置开发环境、路径别名、Vue插件、代理、多环境构建与调试的已审核文章,帮助读者完成从初始化到日常开发的配置。
0
2026.10.28
Vite项目目录专题汇集入口文件、src源码、public静态资源、路径别名、项目根目录和构建输出目录相关的已审核文章,帮助读者理解各文件夹的用途与引用方式。
0
2026.10.28
本专题介绍Gradle插件开发的基本流程,涵盖插件类编写、自定义任务注册、扩展参数设计和插件应用方法,帮助你理解插件如何组织构建逻辑,减少多个项目之间的重复配置。
0
2026.10.22
本专题介绍Gradle Wrapper的基本作用,涵盖文件组成、生成方法、版本配置和任务调用,帮助你理解项目如何使用指定的Gradle版本,减少不同开发环境带来的构建差异。
0
2026.10.22
本专题整理Golangci-lint常用Linters的用途与配置方法,覆盖错误处理、无效代码、安全、复杂度、命名和依赖检查,帮助项目合理选规则。
0
2026.10.22
热门下载
相关下载
精品课程
共6课时 | 12.1万人学习
共79课时 | 161.7万人学习
共6课时 | 54.7万人学习
最新文章