platform-metadata-api-context-get

platform-metadata-api-context-get

熱門

Salesforce 中繼資料產生的必要夥伴 — 請在與任何中繼資料產生技能相同的回合中載入此 schema/API 情境技能;如果您載入產生器,也必須載入此技能。當您建立、產生、新增、編輯或編寫中繼資料或 *-meta.xml 檔案時使用它:自訂物件、自訂欄位、公式欄位、選擇清單、查閱、主從詳細資料、驗證規則、權限集、設定檔、自訂索引標籤、Lightning 記錄頁面、flexipage、清單檢視、自訂應用程式、流程、版面配置、記錄類型、共用規則、報表,以及 604 種 Metadata API 類型。它提供權威的 schema、欄位、欄位屬性、必要旗標、允許的列舉值,以及 XML 結構,讓產生的 *-meta.xml 能順利部署 — 略過它會導致幻覺的元素名稱和部署失敗。觸發條件為 *-meta.xml、中繼資料 schema、api 情境、'Salesforce metadata' 或 'sfdx project'。請勿用於 SOQL、DML、執行時期 sObject 存取或 Tooling API 記錄。

774星標
282分支
更新於 2026/7/24
SKILL.md
唯讀
名稱
platform-metadata-api-context-get
描述

Salesforce 中繼資料產生的必要夥伴 — 請在與任何中繼資料產生技能相同的回合中載入此 schema/API 情境技能;如果您載入產生器,也必須載入此技能。當您建立、產生、新增、編輯或編寫中繼資料或 *-meta.xml 檔案時使用它:自訂物件、自訂欄位、公式欄位、選擇清單、查閱、主從詳細資料、驗證規則、權限集、設定檔、自訂索引標籤、Lightning 記錄頁面、flexipage、清單檢視、自訂應用程式、流程、版面配置、記錄類型、共用規則、報表,以及 604 種 Metadata API 類型。它提供權威的 schema、欄位、欄位屬性、必要旗標、允許的列舉值,以及 XML 結構,讓產生的 *-meta.xml 能順利部署 — 略過它會導致幻覺的元素名稱和部署失敗。觸發條件為 *-meta.xml、中繼資料 schema、api 情境、'Salesforce metadata' 或 'sfdx project'。請勿用於 SOQL、DML、執行時期 sObject 存取或 Tooling API 記錄。

Salesforce Metadata API 技能

此技能提供所有 604 種 Salesforce Metadata API 類型的完整文件。使用此技能在您的 Salesforce DX 專案中建立、了解及修改 Salesforce 中繼資料 XML 檔案。

概觀

Salesforce Metadata API 可讓您擷取、部署、建立、更新或刪除組織的自訂項目。此技能提供每種中繼資料類型的詳細文件,包括:

  • 欄位定義與資料類型
  • 必要與選用欄位
  • WSDL schema 定義
  • 範例 XML 結構
  • 檔案命名慣例
  • Salesforce DX 專案中的目錄位置

如何使用此技能

重要:僅載入所需區段

請務必僅從 JSON 檔案載入您需要的特定區段,而非整個檔案。

重要:對於 assets/metadata_api/*.json 檔案,請一律使用 jq 或程式化 JSON 解析,僅擷取您需要的特定區段。 請勿透過 Readcatread_file 或任何會注入完整檔案的工具載入這些檔案 — 它們包含冗長的 WSDL 區段及其他區段,會浪費 60-80% 的 token。(使用 Read 載入小型檔案(例如此 SKILL.md 或索引表)是沒問題的;此規則僅適用於大型中繼資料類型 JSON 檔案。)

每個 JSON 檔案包含多個區段(fields、description、wsdl_segment 等)。大部分使用案例只需要 1-2 個區段:

  • 欄位定義:僅載入 fields 區段
  • 了解用途:僅載入 description 區段
  • XML 範例:僅載入 declarative_metadata_sample_definition 區段
  • 預設略過wsdl_segment(冗長 schema)、file_informationdirectory_location

這可將每個檔案的 token 消耗量減少 60-80%

快速開始

若要取得特定中繼資料類型的資訊:

  1. 僅載入特定區段(最佳):"Show me only the 'fields' section from CustomObject.json"
  2. 多個區段:"Show me 'fields' and 'description' from Flow.json"
  3. 避免載入整個檔案:不要要求「CustomObject 中繼資料類型」— 請指定區段

範例查詢(僅載入特定區段)

建議:

  • "Show me only the 'fields' section from CustomObject.json"
  • "What fields are in the 'fields' section of Profile.json?"
  • "Load the 'description' and 'fields' sections from Flow.json"
  • "Give me just the 'declarative_metadata_sample_definition' from ApexClass.json"

避免:

  • "Show me the CustomObject metadata type"(太廣泛 — 整個檔案)
  • "Load CustomObject.json"(包含不必要的 WSDL 及其他區段)

JSON 檔案結構

每種中繼資料類型儲存在 assets/metadata_api/ 中的 JSON 檔案,結構如下:

{
  "sections": ["title", "description", "fields", "wsdl_segment", ...],
  "title": "MetadataTypeName - Metadata API",
  "description": "Plain-text description of the metadata type.",
  "fields": {
    "fieldName": {
      "type": "string",
      "description": "Field description",
      "required": true
    }
  },
  "file_information": ".object",
  "directory_location": "objects",
  "wsdl_segment": "<xsd:complexType>...</xsd:complexType>",
  "declarative_metadata_sample_definition": [
    {
      "description": "Example description",
      "code": "<?xml version=\"1.0\"?>\n<MetadataType>...\n</MetadataType>"
    }
  ]
}

注意: 字串值(titledescriptionfile_informationdirectory_locationwsdl_segment)儲存為純文字 — 沒有 markdown 標題(#/##)或程式碼圍欄。file_information 僅包含檔案後綴(例如 .object.ai),directory_location 僅包含 SFDX 資料夾名稱(例如 objectsaiApplications)。

可用區段

sections 陣列指出每個檔案中存在的頂層鍵。常見區段包括:

  • title:中繼資料類型名稱與標題
  • description:中繼資料類型的代表意義
  • fields:類型自身的欄位,包含類型與描述
  • sub_types:(僅複合類型)被參考的子類型名稱對應到該子類型的欄位,例如 Flowsub_types.FlowActionCall
  • file_information:檔案命名慣例與副檔名
  • directory_location:檔案在 SFDX 專案中的儲存位置
  • wsdl_segment:來自 WSDL 的 XML schema 定義
  • declarative_metadata_sample_definition:範例 XML 程式碼

某些中繼資料類型有額外的特定區段。請參閱索引表以取得完整說明。

更多詳細資訊: 關於 為何 token 最佳化很重要、實際使用範例、常見工作流程、完整區段詞彙表,以及版本/支援說明的背景,位於 references/usage_guide.md。僅在需要時使用 Read 工具載入。

Token 最佳化策略

重要:為最小化 token 使用量與成本:

  1. 僅載入您需要的特定中繼資料類型,而非整個語料庫
  2. 僅從每個檔案載入特定區段,而非整個檔案

僅載入特定區段(最佳實務)

重要警告:請勿對這些 JSON 檔案使用 read_file 工具(或任何讀取整個檔案的工具)!

read_file 會將整個檔案內容載入您的上下文,破壞僅載入特定區段的目的。您會浪費 60-80% 的 token 預算載入不必要的 WSDL 區段與冗長區段。(對小型檔案(例如此 SKILL.md 或索引表)使用 Read 是沒問題的 — 此規則僅適用於大型中繼資料類型 JSON 檔案。)

方法:使用程式碼以程式化方式解析 JSON 檔案,僅擷取您需要的區段,而非使用讀取整個檔案的工具。

可用工作範例

我們提供多種語言的完整、可運作程式碼範例:

請參閱 examples/README.md 以取得完整文件與使用說明。

快速模式(依您的語言調整):

  1. 讀取 JSON 檔案
  2. 將其解析為資料結構
  3. 僅擷取您需要的區段(例如 fieldsdescription
  4. 忽略冗長區段(wsdl_segmentdeclarative_metadata_sample_definition

不應做的事

絕對不要對這些 JSON 檔案使用 read_file 工具

read_file assets/metadata_api/CustomObject.json  # 將整個檔案載入上下文!
read_file assets/metadata_api/Flow.json          # 浪費 60-80% token!

絕對不要載入所有檔案

read_file assets/metadata_api/*.json  # 這會載入約 15MB 的資料!

Token 影響

  • 僅載入特定區段:每種中繼資料類型 50-200 token
  • 整個檔案:每種中繼資料類型 500-2000 token
  • 節省:每個檔案 60-80%

何時載入多種類型

  • 相關類型:CustomObject + CustomField + ValidationRule
  • 權限集:Profile + PermissionSet + PermissionSetGroup
  • UI 元件:Layout + CompactLayout + QuickAction
  • 自動化:Flow + WorkflowRule + ApexTrigger

何時載入特定區段(強烈建議)

許多中繼資料類型有大型 WSDL 區段或廣泛的欄位清單。請務必僅從每個 JSON 檔案載入您需要的特定區段,而非消耗整個檔案:

  1. 首先,檢查可用區段:僅讀取 JSON 中的 sections 陣列
  2. 僅擷取您需要的區段(例如 fields 用於欄位定義,description 用於概觀)
  3. 略過 WSDL 區段,除非您特別需要 schema 驗證
  4. 略過 declarative_metadata_sample_definition,除非您需要完整的 XML 範例

此方法可透過排除冗長的 WSDL 定義與冗長範例,將每個檔案的 token 消耗量減少 60-80%

使用此技能的概念方法

步驟 1:確認您的需求

問自己:

  • 我想要建立或修改什麼?
  • 我正在處理哪種 Salesforce 中繼資料類型?
  • 我需要哪些特定資訊?
    • 僅欄位定義?→ 載入 fields 區段
    • 了解其用途?→ 載入 description 區段
    • XML 範例?→ 載入 declarative_metadata_sample_definition 區段
    • Schema 驗證?→ 載入 wsdl_segment 區段(很少需要)

步驟 2:找到正確的類型

使用以下方法之一:

  • 直接參考:如果您知道類型名稱(例如 "CustomObject")
  • 索引搜尋:檢查 references/metadata_index_table.md 以取得相關類型
  • 常見類型:請參閱下方「快速參考:常見中繼資料類型」

步驟 3:選擇性載入(僅載入特定區段)

區段載入決策樹

需要欄位定義?
  → 僅載入 'fields' 區段(約 50-200 token)

需要了解類型用途?
  → 僅載入 'description' 區段(約 20-100 token)

需要 XML 結構範例?
  → 僅載入 'declarative_metadata_sample_definition'(約 100-300 token)

需要全部三個?
  → 載入 'fields' + 'description' + 'declarative_metadata_sample_definition'
  → 仍略過 'wsdl_segment'、'file_information'、'directory_location'
  → 節省:相較於載入整個檔案約 60-70%

需要 schema 驗證?
  → 僅在需要時載入 'wsdl_segment'(此區段冗長)

請求格式

  • 單一區段(最佳):"Show me only the 'fields' section from ApexClass.json"
  • 多個區段:"Load 'fields' and 'description' from CustomObject.json"
  • 略過冗長區段:除非明確需要,否則絕不載入 wsdl_segment

步驟 4:套用至您的程式碼

使用載入的資訊來:

  • 建立新的中繼資料 XML 檔案
  • 了解專案中的現有檔案
  • 驗證欄位名稱與類型
  • 產生具有正確命名空間的正確 XML 結構

檔案位置

所有中繼資料類型 JSON 檔案位於:

assets/metadata_api/
├── CustomObject.json
├── Flow.json
├── ApexClass.json
├── Profile.json
└── ...(另有 600 多個檔案)

路徑解析

使用此技能時,檔案參考方式為:

  • 絕對路徑:assets/metadata_api/CustomObject.json
  • 相對於技能根目錄:./assets/metadata_api/CustomObject.json

技能會根據工作目錄自動解析路徑。

中繼資料檔案產生需求

產生 Salesforce 中繼資料 XML 檔案時,請遵循以下需求以確保檔案有效且可部署。

XML 結構需求

所有中繼資料檔案必須:

  1. 包含 XML 宣告

    <?xml version="1.0" encoding="UTF-8"?>
    
  2. 使用正確的命名空間

    <CustomObject xmlns="http://soap.sforce.com/2006/04/metadata">
    
  3. 根元素對應中繼資料類型

    • CustomObject → <CustomObject>
    • Flow → <Flow>
    • Profile → <Profile>
    • 等等

命名空間宣告

命名空間是必要的,且必須完全為:

http://soap.sforce.com/2006/04/metadata

正確

<CustomObject xmlns="http://soap.sforce.com/2006/04/metadata">

錯誤

<CustomObject>  <!-- 缺少命名空間 -->
<CustomObject xmlns="http://salesforce.com/metadata">  <!-- 錯誤的命名空間 -->

必要與選用欄位

每種中繼資料類型有不同的欄位需求:

  • Schema 必要(JSON 中 required: true):WSDL 將欄位標記為必要。
  • 實際必要(未標記但實務上需要):在許多情況下,WSDL 標記的必要欄位少於編寫合約實際要求的欄位。CustomObject 是典型範例 — JSON 僅將 externalDataSourceexternalNamenameField 標記為 required: true(前兩個是外部物件專用的怪癖),但一般的 __c CustomObject 也需要 labelpluralLabeldeploymentStatussharingModel 才能部署。請務必與 declarative_metadata_sample_definition 範例交叉檢查。
  • 條件必要:某些欄位僅在啟用特定功能時才需要。
  • 選用:大部分欄位若不需要可省略。

CustomObject 範例(注意:實際編寫需要比 required: true 標記的更多):

{
  "fields": {
    "nameField": {
      "type": "CustomField",
      "description": "The name field for the custom object",
      "required": true
    },
    "label": {
      "type": "string",
      "description": "The label for the custom object (effectively required for normal __c objects)",
      "required": false
    },
    "sharingModel": {
      "type": "SharingModel (enumeration)",
      "description": "The sharing model for the object (effectively required for normal __c objects)",
      "required": false
    },
    "enableHistory": {
      "type": "boolean",
      "description": "Enable field history tracking",
      "required": false
    }
  }
}

驗證提示

部署前:

  1. 驗證 XML 語法:確保 XML 格式正確(標籤配對、巢狀正確)
  2. 檢查必要欄位:確認所有必要欄位都存在
  3. 驗證命名空間:命名空間必須完全正確
  4. 測試欄位類型:確保欄位值符合預期類型
  5. 使用 Salesforce CLI:執行 sf project deploy validate 以捕捉錯誤

更多詳細資訊: 欄位類型→XML 對應表、檔案命名/雙檔案/子類型慣例,以及完整的格式正確檔案範例,位於 references/usage_guide.md

重複與模糊的類型名稱

某些 Metadata API 類型名稱也存在於 Enterprise/Data API 或 Tooling API 物件名稱中。範例包括 ApexClass、ApexTrigger、CustomField、CustomObject、EmailTemplate、Layout、Profile、PermissionSet、RecordType、StaticResource、WebLink、ValidationRule 和 Flow。

當提示模糊時(例如 "tell me about Profile" 或 "what fields are on ApexClass"),請詢問使用者是否想要:

  1. Metadata API XML 結構,用於來源/部署編寫(此技能,例如 .profile-meta.xml.cls-meta.xml)。
  2. Enterprise/Data API 執行時期 sObject/記錄參考(目前沒有專門技能 — 請回退至 Salesforce API 系列路由器)。
  3. Tooling API 開發工具記錄參考(目前沒有專門技能 — 請回退至 Salesforce API 系列路由器)。

可解決大部分模糊性的啟發式規則(無需詢問):

  • 提及 package.xmlforce-app/sfdx.meta.xml、"deploy"、"retrieve"、"authoring"、"blueprint"、"template"、"class definition" 或 "permissions"(在部署意義上)→ Metadata API(此技能)。
  • "What fields are on X" / "what columns" / "DML" / "SOQL" / "query" / "REST" / "sObject" / "record" / "runtime" → Enterprise/Data 或 Tooling API(其他技能)。
  • Tooling 特定訊號:"Tooling API"、ApexCodeCoverageEntityDefinitionTraceFlag、"code coverage"、"compile errors"、SymbolTable、偵錯記錄 → Tooling API。

無訊號時的預設規則:如果提示沒有上述任何訊號,且此技能(platform-metadata-api-context-get)是直接依名稱呼叫,則預設為 Metadata API 解讀,並明確向使用者揭露此假設(例如,「將此解讀為 .cls-meta.xml 編寫的 Metadata API 類型;如果您指的是 Tooling API 記錄或 Enterprise/Data sObject,請告知我」)。技能呼叫情境本身即為編寫/部署意圖的訊號。

疑難排解

找不到檔案

問題:找不到中繼資料類型檔案

解決方案

  • 檔案名稱是區分大小寫的 PascalCase,且沒有分隔符號(例如 CustomObject.json,不是 customobject.jsonCustom_Object.jsonCustom-Object.json)。
  • 在宣告「找不到」之前,請查閱 references/metadata_index_table.md。使用此兩階段復原演算法對照索引:
    1. 正規化並子字串比對(處理大小寫與分隔符號變體):移除非英數字元並將查詢與每個索引項目轉為小寫,然後尋找子字串相符。可解析:customobjectCustom_ObjectCustom-ObjectCustomObject
    2. 若未命中,進行模糊比對(處理缺字母的拼寫錯誤):使用 difflib.get_close_matches(query_normalized, index_normalized, n=3, cutoff=0.7) 或 Levenshtein 距離 ≤ 2。可解析:customfeldCustomFieldapxclassApexClass。純子字串比對無法復原字元刪除。
  • 多重命中平手規則:當正規化並子字串比對傳回多個相符(例如 customobject 同時符合 CustomObjectCustomObjectTranslation),優先選擇正規化長度等於正規化查詢長度的項目;否則優先選擇最短的相符。
  • 某些類型有非預期的命名慣例(無底線、無空格、無縮寫(例如 "OAuth"));索引是唯一真相來源。

SOAP 信封 / 標頭類型(設計上精簡)

兩個相關模式需辨識:

  1. 結果類型AsyncResultSaveResultDeleteResultUpsertResultErrorDescribeMetadataResult 等)— fields 為空,且 wsdl_segment 已填入。這些是 SOAP 回應包裝器;其 schema 完全位於 wsdl_segment。如果您需要其結構,請使用該區段。它們不是可部署的來源檔案。
  2. SOAP 請求標頭AllOrNoneHeaderSessionHeaderCallOptionsDebuggingHeaderOwnerChangeOptions 等)— fields 有 1-2 個最小項目,沒有 wsdl_segment。這些設定 SOAP 請求行為;它們是呼叫時選項,不是您編寫或部署的中繼資料。

在兩種情況下,精簡的 JSON 輸出是正確的。請勿嘗試編寫 .AsyncResult-meta.xml — 這些類型沒有來源檔案形式。

缺少區段

問題:JSON 檔案中沒有預期的區段

解決方案

  • 檢查 sections 陣列以查看可用的區段
  • 並非所有中繼資料類型都有所有區段
  • 某些區段是類型特定的(在索引表中註明)

欄位資訊不完整

問題:欄位定義缺少詳細資訊

解決方案

  • 檢查 wsdl_segment 以取得完整的 schema 定義
  • 某些欄位有在 WSDL 中定義的複雜類型
  • 與 Salesforce 文件交叉參考列舉值

追蹤子類型指標(例如 ProfileObjectPermissions[]

fields 區段給出複雜類型名稱(例如 ProfileObjectPermissions[]LayoutItem[]ApprovalStep[])時,該巢狀類型的子欄位不在 fields 區段中 — 它們位於該複雜類型的 wsdl_segment 中。技能的「預設略過 wsdl_segment」規則是用於簡單欄位路徑的 token 經濟性;對於巢狀類型,您需要深入鑽取。

實際範例 — 尋找 Profile 上 objectPermissions 的子欄位:

# 1. 從 fields 區段取得欄位類型名稱
jq '.fields.objectPermissions' assets/metadata_api/Profile.json
# → {"type": "ProfileObjectPermissions[]", ...}

# 2. 使用 grep -A 從 wsdl_segment 僅擷取相符的 complexType
jq -r '.wsdl_segment' assets/metadata_api/Profile.json   | grep -A 30 'complexType name="ProfileObjectPermissions"'

grep -A N 視窗可將 token 成本維持在約 150 token,而非載入整個 wsdl_segment(大型類型可能超過 5K token)。每當 fields 傳回 Foo[] 類型且您需要 Foo 的子欄位時,請使用此模式。

XML 產生錯誤

問題:產生的 XML 驗證失敗

解決方案

  • 驗證命名空間是否完全為:http://soap.sforce.com/2006/04/metadata
  • 檢查所有必要欄位是否存在
  • 確保欄位值符合預期類型
  • 驗證 XML 語法(結束標籤、巢狀正確)

部署失敗

問題:中繼資料檔案無法部署

解決方案

  • 先執行 sf project deploy validate
  • 檢查 Salesforce API 版本相容性
  • 驗證檔案命名符合慣例
  • 確保目錄結構符合 SFDX 格式

快速參考:常見中繼資料類型

以下是最常使用的中繼資料類型:

  • CustomObject:定義自訂 sObject 的 schema,包括欄位、關係與設定
  • Flow:使用視覺化畫布的元素與連接器自動化商業流程
  • ApexClass:已編譯的 Apex 伺服器端類別;包括主體、API 版本與狀態
  • ApexTrigger:在特定 sObject 的 DML 事件之前/之後執行的 Apex 程式碼
  • Profile:控制使用者設定檔的物件/欄位權限、應用程式可見性與登入設定
  • PermissionSet:獨立於設定檔授予使用者的附加權限集合
  • CustomField:定義標準或自訂物件上的欄位,包括類型、選擇清單值與公式
  • Layout:控制記錄詳細資料/編輯頁面上欄位與相關清單的排列
  • ValidationRule:當公式條件為 true 時防止儲存,以強制資料品質
  • ApexPage:Visualforce 頁面定義,包括控制器參考與標記
  • ApexComponent:可嵌入頁面的可重用 Visualforce 元件
  • CustomTab:定義指向自訂物件、Visualforce 頁面或 Web URL 的索引標籤
  • CustomApplication:定義應用程式的索引標籤列、導覽項目與品牌
  • LightningComponentBundle:LWC 套件,包括 JS、HTML 與中繼資料描述元
  • AuraDefinitionBundle:Aura(Lightning)元件套件,包含元件、控制器、輔助檔案
  • StaticResource:上傳的檔案(JS、CSS、圖片、ZIP),可從 Visualforce 與 LWC 存取
  • EmailTemplate:用於工作流程規則、Process Builder 或 Apex 的電子郵件範本
  • Report:已儲存的報表定義,包括篩選器、分組與欄位
  • Dashboard:由報表支援的儀表板元件集合

如需所有中繼資料類型的完整清單,請參閱索引表