mcpField
S
salesforce

salesforce

github.com/jdrhyne营销与增长24041 次安装9 周前更新
代码仓库

关于 salesforce

Salesforce skill 指导通过 Salesforce CLI(sf)管理已认证的 Salesforce 组织,面向需要查询、维护数据或处理元数据的用户。它涵盖 SOQL、SOSL、批量操作和 REST API,并对写入、删除及生产环境操作设置确认要求。

主要功能

  1. 01管理组织登录与目标别名
  2. 02执行 SOQL 查询和 SOSL 搜索
  3. 03读取及维护单条记录
  4. 04使用 Bulk API 导入与导出
  5. 05检查对象结构并处理元数据
  6. 06通过 REST API 或 Apex 操作

适用场景

  1. 01查询联系人及商机数据
  2. 02批量导入或导出记录
  3. 03检查对象字段与关系
  4. 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