关于 salesforce
Salesforce skill 指导通过 Salesforce CLI(sf)管理已认证的 Salesforce 组织,面向需要查询、维护数据或处理元数据的用户。它涵盖 SOQL、SOSL、批量操作和 REST API,并对写入、删除及生产环境操作设置确认要求。
主要功能
- 01管理组织登录与目标别名
- 02执行 SOQL 查询和 SOSL 搜索
- 03读取及维护单条记录
- 04使用 Bulk API 导入与导出
- 05检查对象结构并处理元数据
- 06通过 REST API 或 Apex 操作
适用场景
- 01查询联系人及商机数据
- 02批量导入或导出记录
- 03检查对象字段与关系
- 04部署或检索组织元数据
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ jdrhyne/ agent-skills --skill salesforce安装后在 Claude Code 中输入/salesforce确认已加载。
附带文件_meta.json.clawhub/origin.json
详细介绍
Salesforce 技能
使用 Salesforce CLI(sf)与 Salesforce 组织交互。使用前必须先登录 CLI。结构化输出始终添加 --json。
如果 sf 二进制文件不可用,请停止操作,并根据仓库声明的安装元数据或 Salesforce CLI 官方指南,请用户安装 Salesforce CLI。CLI 可用后,在接触组织数据前,先使用 sf org login web 登录。
安全边界
- 未经用户明确确认,不得创建、更新、删除或部署 Apex,也不得执行 Apex。
- 不得在聊天中透露访问令牌、身份验证 URL、刷新令牌或详细的组织显示输出。
- 除非用户要求保存文件或执行批量工作流,否则不得将数据导出到文件。
- 如果有沙盒或暂存环境可用,默认不得将生产组织作为目标。
身份验证和组织管理
登录(打开浏览器)
sf org login web --alias my-org
其他登录方式:
# JWT-based login (CI/automation)
sf org login jwt --client-id <consumer-key> --jwt-key-file server.key --username [email protected] --alias my-org
# Login with an existing access token
sf org login access-token --instance-url https://mycompany.my.salesforce.com
# Login via SFDX auth URL (from a file)
sf org login sfdx-url --sfdx-url-file authUrl.txt --alias my-org
管理组织
# List all authenticated orgs
sf org list --json
# Display info about the default org (access token, instance URL, username)
sf org display --json
# Display info about a specific org
sf org display --target-org my-org --json
# Display with SFDX auth URL (sensitive - contains refresh token)
sf org display --target-org my-org --verbose --json
# Open org in browser
sf org open
sf org open --target-org my-org
# Log out
sf org logout --target-org my-org
配置和别名
# Set default target org
sf config set target-org my-org
# List all config variables
sf config list
# Get a specific config value
sf config get target-org
# Set an alias
sf alias set [email protected]
# List aliases
sf alias list
查询数据(SOQL)
通过默认 API 执行标准 SOQL 查询:
# Basic query
sf data query --query "SELECT Id, Name, Email FROM Contact LIMIT 10" --json
# WHERE clause
sf data query --query "SELECT Id, Name, Amount, StageName FROM Opportunity WHERE StageName = 'Closed Won'" --json
# Relationship queries (parent-to-child)
sf data query --query "SELECT Id, Name, (SELECT LastName, Email FROM Contacts) FROM Account LIMIT 5" --json
# Relationship queries (child-to-parent)
sf data query --query "SELECT Id, Name, Account.Name FROM Contact" --json
# LIKE for text search
sf data query --query "SELECT Id, Name FROM Account WHERE Name LIKE '%Acme%'" --json
# Date filtering
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
# Include deleted/archived records
sf data query --query "SELECT Id, Name FROM Account" --all-rows --json
# Query from a file
sf data query --file query.soql --json
# Tooling API queries (metadata objects like ApexClass, ApexTrigger)
sf data query --query "SELECT Id, Name, Status FROM ApexClass" --use-tooling-api --json
# Output to CSV file
sf data query --query "SELECT Id, Name, Email FROM Contact" --result-format csv --output-file contacts.csv
# Target a specific org
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 可同时跨多个对象搜索:
# Search for text across objects
sf data search --query "FIND {John Smith} IN ALL FIELDS RETURNING Contact(Name, Email), Lead(Name, Email)" --json
# Search in name fields only
sf data search --query "FIND {Acme} IN NAME FIELDS RETURNING Account(Name, Industry), Contact(Name)" --json
# Search from a file
sf data search --file search.sosl --json
# Output to CSV
sf data search --query "FIND {test} RETURNING Contact(Name)" --result-format csv
单条记录操作
获取记录
# By record ID
sf data get record --sobject Contact --record-id 003XXXXXXXXXXXX --json
# By field match (WHERE-like)
sf data get record --sobject Account --where "Name=Acme" --json
# By multiple fields (values with spaces need single quotes)
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='[email protected]'" --json
sf data create record --sobject Account --values "Name='New Company' Website=www.example.com Industry='Technology'" --json
# Tooling API object
sf data create record --sobject TraceFlag --use-tooling-api --values "DebugLevelId=7dl... LogType=CLASS_TRACING" --json
更新记录(先向用户确认)
# By ID
sf data update record --sobject Contact --record-id 003XXXXXXXXXXXX --values "Email='[email protected]'" --json
# By field match
sf data update record --sobject Account --where "Name='Old Acme'" --values "Name='New Acme'" --json
# Multiple fields
sf data update record --sobject Account --record-id 001XXXXXXXXXXXX --values "Name='Acme III' Website=www.example.com" --json
删除记录(必须获得用户明确确认)
# By ID
sf data delete record --sobject Account --record-id 001XXXXXXXXXXXX --json
# By field match
sf data delete record --sobject Account --where "Name=Acme" --json
批量数据操作(Bulk API 2.0)
适用于大型数据集(数千到数百万条记录):
批量导出
# Export to CSV
sf data export bulk --query "SELECT Id, Name, Email FROM Contact" --output-file contacts.csv --result-format csv --wait 10
# Export to JSON
sf data export bulk --query "SELECT Id, Name FROM Account" --output-file accounts.json --result-format json --wait 10
# Include soft-deleted records
sf data export bulk --query "SELECT Id, Name FROM Account" --output-file accounts.csv --result-format csv --all-rows --wait 10
# Resume a timed-out export
sf data export resume --job-id 750XXXXXXXXXXXX --json
批量导入
# Import from CSV
sf data import bulk --file accounts.csv --sobject Account --wait 10
# Resume a timed-out import
sf data import resume --job-id 750XXXXXXXXXXXX --json
批量更新或插入
sf data upsert bulk --file contacts.csv --sobject Contact --external-id Email --wait 10
批量删除
# Delete records listed in CSV (CSV must have an Id column)
sf data delete bulk --file records-to-delete.csv --sobject Contact --wait 10
树形导出/导入(用于相关记录)
# Export with relationships into JSON tree format
sf data export tree --query "SELECT Id, Name, (SELECT Name, Email FROM Contacts) FROM Account" --json
# Export with a plan file (for multiple objects)
sf data export tree --query "SELECT Id, Name FROM Account" --plan --output-dir export-data
# Import from tree JSON files
sf data import tree --files Account.json,Contact.json
# Import using a plan definition file
sf data import tree --plan Account-Contact-plan.json
架构检查
# Describe an object (fields, relationships, picklist values)
sf sobject describe --sobject Account --json
# Describe a custom object
sf sobject describe --sobject MyCustomObject__c --json
# Describe a Tooling API object
sf sobject describe --sobject ApexClass --use-tooling-api --json
# List all objects
sf sobject list --json
# List only custom objects
sf sobject list --sobject custom --json
# List only standard objects
sf sobject list --sobject standard --json
执行 Apex 代码
# Execute Apex from a file
sf apex run --file script.apex --json
# Run interactively (type code, press Ctrl+D to execute)
sf apex run
# Run Apex tests
sf apex run test --test-names MyTestClass --json
# Get test results
sf apex get test --test-run-id 707XXXXXXXXXXXX --json
# View Apex logs
sf apex list log --json
sf apex get log --log-id 07LXXXXXXXXXXXX
REST API(高级)
执行任意经过身份验证的 REST API 调用:
# GET request
sf api request rest 'services/data/v62.0/limits' --json
# List API versions
sf api request rest '/services/data/' --json
# Create a record via REST
sf api request rest '/services/data/v62.0/sobjects/Account' --method POST --body '{"Name":"REST Account","Industry":"Technology"}' --json
# Update a record via REST (PATCH)
sf api request rest '/services/data/v62.0/sobjects/Account/001XXXXXXXXXXXX' --method PATCH --body '{"BillingCity":"San Francisco"}' --json
# GraphQL query
sf api request graphql --body '{"query":"{ uiapi { query { Account { edges { node { Name { value } } } } } } }"}' --json
# Custom headers
sf api request rest '/services/data/v62.0/limits' --header 'Accept: application/xml'
# Save response to file
sf api request rest '/services/data/v62.0/limits' --stream-to-file limits.json
元数据部署和检索
# Deploy metadata to an org
sf project deploy start --source-dir force-app --json
# Deploy specific metadata components
sf project deploy start --metadata ApexClass:MyClass --json
# Retrieve metadata from an org
sf project retrieve start --metadata ApexClass --json
# Check deploy status
sf project deploy report --job-id 0AfXXXXXXXXXXXX --json
# Generate a new Salesforce DX project
sf project generate --name my-project
# List metadata components in the org
sf project list ignored --json
诊断
# Run CLI diagnostics
sf doctor
# Check CLI version
sf version
# See what is new
sf whatsnew
常见 SOQL 模式
-- Count records
SELECT COUNT() FROM Contact WHERE AccountId = '001XXXXXXXXXXXX'
-- Aggregate query
SELECT StageName, COUNT(Id), SUM(Amount) FROM Opportunity GROUP BY StageName
-- Date literals
SELECT Id, Name FROM Lead WHERE CreatedDate = LAST_N_DAYS:30
-- Subquery (semi-join)
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'
-- Multiple WHERE conditions
SELECT Id, Name, Amount FROM Opportunity WHERE Amount > 10000 AND StageName != 'Closed Lost' AND CloseDate = THIS_QUARTER
安全准则
- 结构化且可解析的输出始终使用
--json。 - **未经用户明确确认,绝不创建、更新或删除记录。**说明操作内容并在执行前征求确认。
- 除非用户明确要求并确认了具体记录,否则绝不删除记录。
- 未经用户审核文件或查询并确认,绝不批量删除或批量导入。
- 查询时使用
LIMIT,避免获取过多数据。先从LIMIT 10开始,如用户需要更多数据再增加。 - 对于超过 10,000 条记录的查询,使用
sf data export bulk,而非sf data query。 - 用户要求对单个对象“查找”或“搜索”时,使用 SOQL
WHERE ... LIKE '%term%'。跨多个对象搜索时,通过sf data search使用 SOSL。 - 用户拥有多个组织时,使用
--target-org <alias>;如果目标组织不明确,请询问用户要使用哪个组织。 - 如果身份验证失败或会话过期,请指导用户使用
sf org login web登录。 - Bulk API 2.0 存在 SOQL 限制(不支持
COUNT()等聚合函数)。遇到此类需求时,使用标准的sf data query。 - 描述对象(
sf sobject describe)时,JSON 输出可能非常大。请向用户总结关键字段、必填字段和关系,而不是直接倾倒原始输出。
评论
支持 Markdown