使用 `sf` CLI 查询 Salesforce 数据并管理销售管道。支持 SOQL 查询(从简单到复杂)、商机管道分析、预测报表、数据导出、数据模型探索以及 CRM 数据操作。还可用于高管级工作流,例如按名称查找交易(deal)、查找联系人信息以向潜在客户(prospects)发送邮件、准备管道评审(pipeline reviews),以及将 CRM 数据与其他工具进行交叉比对。触发场景包括:Salesforce、SOQL、管道(pipeline)、商机(opportunity)、预测(forecas
销售力 DX — 数据与管道 – 用 sf CLI.是一项面向实际任务的技能,主要用于Prerequisites. 如果没有列出任何 Org , 请认证 :.;Chema Discovery. 在查询前, 探索可用的对象和 fie。
从功能定位来看,该技能强调把分散的操作要求整理成清晰、可复用的处理流程,使用户能够围绕既定目标快速准备输入、选择执行方式并获得结构化结果。实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;
若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;涉及批量任务时,还应保存进度,避免中断后重复操作。
使用 sf CLI 查询数据并管理销售管道。
# 验证 CLI 版本及认证状态 sf --version sf org list
若未列出任何组织,请先完成认证:
sf org login web --alias my-org --set-default
执行查询前,先探索可用的对象与字段:
# 列出所有对象 sf sobject list --target-org my-org # 描述对象字段 sf sobject describe --sobject Opportunity --target-org my-org # 快速获取字段名列表(仅显示名称) sf sobject describe --sobject Opportunity --target-org my-org | grep -E "^name:|^type:"
# 简单查询 sf data query -q "SELECT Id, Name, Amount FROM Opportunity LIMIT 10" # 带 WHERE 子句的查询 sf data query -q "SELECT Id, Name FROM Opportunity WHERE StageName = 'Closed Won'" # 日期筛选 sf data query -q "SELECT Id, Name FROM Opportunity WHERE CloseDate = THIS_QUARTER" # 导出为 CSV 文件 sf data query -q "SELECT Id, Name, Amount FROM Opportunity" --result-format csv > opps.csv
# 父级查找(从 Opportunity 查 Account) sf data query -q "SELECT Id, Name, Account.Name, Account.Industry FROM Opportunity" # 子查询(从 Account 查其下的 Opportunities) sf data query -q "SELECT Id, Name, (SELECT Id, Name, Amount FROM Opportunities) FROM Account LIMIT 5"
# COUNT 统计 sf data query -q "SELECT COUNT(Id) total FROM Opportunity WHERE IsClosed = false" # SUM 与 GROUP BY sf data query -q "SELECT StageName, SUM(Amount) total FROM Opportunity GROUP BY StageName" # 多重聚合 sf data query -q "SELECT StageName, COUNT(Id) cnt, SUM(Amount) total, AVG(Amount) avg FROM Opportunity GROUP BY StageName"
# 当结果超过 2000 条记录时,使用 --bulk 参数 sf data query -q "SELECT Id, Name, Amount FROM Opportunity" --bulk --wait 10
# 按阶段划分的管道 sf data query -q "SELECT StageName, COUNT(Id) cnt, SUM(Amount) total FROM Opportunity WHERE IsClosed = false GROUP BY StageName ORDER BY StageName" # 按负责人划分的管道 sf data query -q "SELECT Owner.Name, SUM(Amount) total FROM Opportunity WHERE IsClosed = false GROUP BY Owner.Name ORDER BY SUM(Amount) DESC" # 按预计关闭月份划分的管道 sf data query -q "SELECT CALENDAR_MONTH(CloseDate) month, SUM(Amount) total FROM Opportunity WHERE IsClosed = false AND CloseDate = THIS_YEAR GROUP BY CALENDAR_MONTH(CloseDate) ORDER BY CALENDAR_MONTH(CloseDate)"
# 各阶段赢单率 sf data query -q "SELECT StageName, COUNT(Id) FROM Opportunity WHERE IsClosed = true GROUP BY StageName" # 本季度已赢单的交易 sf data query -q "SELECT Id, Name, Amount, CloseDate FROM Opportunity WHERE StageName = 'Closed Won' AND CloseDate = THIS_QUARTER ORDER BY Amount DESC" # 本季度已输单的交易及其原因 sf data query -q "SELECT Id, Name, Amount, StageName, Loss_Reason__c FROM Opportunity WHERE StageName = 'Closed Lost' AND CloseDate = THIS_QUARTER"
# 加权管道(假设存在 Probability 字段) sf data query -q "SELECT StageName, SUM(Amount) gross, SUM(ExpectedRevenue) weighted FROM Opportunity WHERE IsClosed = false GROUP BY StageName" # 本月即将关闭的交易 sf data query -q "SELECT Id, Name, Amount, StageName, CloseDate FROM Opportunity WHERE CloseDate = THIS_MONTH AND IsClosed = false ORDER BY Amount DESC" # 滞留交易(过去 30 天无活动) sf data query -q "SELECT Id, Name, Amount, LastActivityDate FROM Opportunity WHERE IsClosed = false AND LastActivityDate < LAST_N_DAYS:30"
sf data create record -s Opportunity -v "Name='New Deal' StageName='Prospecting' CloseDate=2024-12-31 Amount=50000"
# 按 ID 更新 sf data update record -s Opportunity -i 006xx000001234 -v "StageName='Negotiation'" # 批量更新(通过 CSV 文件) sf data upsert bulk -s Opportunity -f updates.csv -i Id --wait 10
# 导出含关联关系的数据 sf data export tree -q "SELECT Id, Name, (SELECT Id, Subject FROM Tasks) FROM Account WHERE Industry = 'Technology'" -d ./export # 导入数据 sf data import tree -f ./export/Account.json
添加 --json 参数以获得结构化输出:
sf data query -q "SELECT Id, Name, Amount FROM Opportunity WHERE IsClosed = false" --json
配合 jq 解析:
sf data query -q "SELECT Id, Name FROM Opportunity LIMIT 5" --json | jq '.result.records[].Name'
| 字面量 | 含义 |
|---|---|
| TODAY | 当前日期 |
| THIS_WEEK | 当前周 |
| THIS_MONTH | 当前月 |
| THIS_QUARTER | 当前季度 |
| THIS_YEAR | 当前年份 |
| LAST_N_DAYS:n | 过去 n 天 |
| NEXT_N_DAYS:n | 未来 n 天 |
| LAST_QUARTER | 上一季度 |
“Malformed query”(查询格式错误) —— 请检查字段 API 名称(而非标签名)。可使用 sf sobject describe 命令确认字段是否存在及拼写是否正确。
“QUERY_TIMEOUT”(查询超时) —— 添加更多筛选条件、使用 --bulk 参数,或显式添加 LIMIT 子句。
“INVALID_FIELD”(无效字段) —— 该字段可能在目标对象上不存在,或当前用户配置文件无访问权限。
结果集过大 —— 对返回记录数超过 2000 条的查询,请务必使用 --bulk 参数。
按交易名称或所属客户查找:
# 按机会名称模糊匹配(fuzzy) sf data query -q "SELECT Id, Name, Amount, StageName, CloseDate, Owner.Name, Account.Name FROM Opportunity WHERE Name LIKE '%Acme%' ORDER BY Amount DESC" # 按客户名称匹配 sf data query -q "SELECT Id, Name, Amount, StageName, CloseDate FROM Opportunity WHERE Account.Name LIKE '%Microsoft%' AND IsClosed = false" # 我负责的近期交易 sf data query -q "SELECT Id, Name, Amount, StageName, CloseDate, Account.Name FROM Opportunity WHERE OwnerId = '' AND IsClosed = false ORDER BY CloseDate"
查找某公司的可联系人员:
# 某客户的联系人 sf data query -q "SELECT Id, Name, Email, Phone, Title FROM Contact WHERE Account.Name LIKE '%Acme%'" # 决策者(按职位筛选) sf data query -q "SELECT Name, Email, Title, Account.Name FROM Contact WHERE Title LIKE '%CEO%' OR Title LIKE '%VP%' OR Title LIKE '%Director%'" # 某笔交易相关的联系人 sf data query -q "SELECT Contact.Name, Contact.Email, Contact.Title, Role FROM OpportunityContactRole WHERE Opportunity.Name LIKE '%Acme%'"
快速生成高管摘要:
# 本季度即将关闭的 Top 10 交易 sf data query -q "SELECT Name, Account.Name, Amount, StageName, CloseDate, Owner.Name FROM Opportunity WHERE CloseDate = THIS_QUARTER AND IsClosed = false ORDER BY Amount DESC LIMIT 10" # 按销售代表划分的交易(用于 1:1 会议) sf data query -q "SELECT Owner.Name, COUNT(Id) deals, SUM(Amount) total FROM Opportunity WHERE IsClosed = false GROUP BY Owner.Name ORDER BY SUM(Amount) DESC" # 需重点关注的交易(滞留) sf data query -q "SELECT Name, Amount, StageName, LastActivityDate, Owner.Name FROM Opportunity WHERE IsClosed = false AND LastActivityDate < LAST_N_DAYS:14 ORDER BY Amount DESC LIMIT 10"
会前/通话前快速了解客户:
# 客户概览 sf data query -q "SELECT Id, Name, Industry, BillingCity, Website, OwnerId FROM Account WHERE Name LIKE '%Acme%'" # 该客户的全部未关闭交易 sf data query -q "SELECT Name, Amount, StageName, CloseDate FROM Opportunity WHERE Account.Name LIKE '%Acme%' AND IsClosed = false" # 最近活动记录 sf data query -q "SELECT Subject, Status, ActivityDate FROM Task WHERE Account.Name LIKE '%Acme%' ORDER BY ActivityDate DESC LIMIT 5"
Salesforce + 邮件(通过 gog/gmail):
sf data query -q "SELECT Email FROM Contact WHERE Account.Name LIKE '%Acme%'"Salesforce + 日历(Calendar):
sf data query -q "SELECT Name, Account.Name, CloseDate FROM Opportunity WHERE CloseDate = THIS_WEEK"通话后快速更新 CRM:
# 记录一项任务 sf data create record -s Task -v "Subject='Call with John' WhatId='' Status='Completed' ActivityDate=$(date +%Y-%m-%d)" # 更新交易阶段 sf data update record -s Opportunity -i -v "StageName='Negotiation' NextStep='Send proposal'"
用于“我负责的交易”类查询:
sf data query -q "SELECT Id, Name FROM User WHERE Email = 'your.email@company.com'"
建议将该 ID 存入本地配置,便于后续快速引用。
相关专题
热门下载
相关下载
精品课程
共6课时 | 54.7万人学习
共89课时 | 134.1万人学习
共49课时 | 82.6万人学习
最新文章