关于 platform-lightning-app-coordinate
根据自然语言需求规划并生成可部署的 Salesforce Lightning Experience 应用。它按依赖顺序协调各类元数据,并在可用时调用专用生成技能和 API 上下文。
主要功能
- 01将应用需求整理为构建计划
- 02按依赖顺序生成元数据
- 03协调专用元数据生成技能
- 04使用 API 上下文验证元数据
- 05组装 Salesforce DX 项目文件
适用场景
- 01构建含自定义对象、字段和关系的应用
- 02创建含页面、选项卡和权限的应用
- 03添加所需的验证规则或 Flow
- 04准备可部署的生成元数据
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ forcedotcom/ sf-skills --skill platform-lightning-app-coordinate安装后在 Claude Code 中输入/platform-lightning-app-coordinate确认已加载。
详细介绍
生成 Lightning 应用
概述
根据自然语言描述,定义 Lightning 自定义应用,并按正确的依赖顺序编排其依赖元数据类型,以构建完整且可部署的 Salesforce Lightning Experience 应用。有专用元数据技能时,请调用这些技能;没有相应技能时,直接生成元数据。
何时使用此技能
适用场景:
- 用户请求“Lightning 应用”或“端到端解决方案”
- 用户说“构建应用”“创建应用程序”或“构建一个[类型]应用”(例如项目管理、跟踪等)
- 工作内容需要创建自定义应用(CustomApplication)及其支持元数据,而不是单独创建某个对象、页面或选项卡
以下示例应触发此技能:
- “构建一个包含 Tasks、Resources 和 Supplies 对象的项目管理 Lightning 应用”
- “创建一个用于跟踪车辆的 LEX 应用,包含 Lightning 页面和权限集”
- “我需要一个包含多个对象及其关系的空间站管理系统”
- “构建一个包含自定义 Lightning 记录页面的员工入职 Lightning 应用”
请勿用于以下场景:
- 创建单个元数据组件(请改用对应的元数据技能)
- 排查或调试现有元数据
- 构建 Salesforce Classic 应用(而非 Lightning Experience)
- 用户只要求创建一个对象、一个页面或一个权限集(且没有其他内容)
- 用户只需要创建或配置应用容器(将现有选项卡分组),不需要其他元数据;请改用
platform-custom-application-generate
元数据类型注册表
此表列出了 Lightning Experience 应用通常需要的元数据类型、对应技能,以及 API 上下文要求。
| 元数据类型 | 技能名称 | API 上下文 | 使用规则 |
|---|---|---|---|
| 自定义对象 | platform-custom-object-generate | salesforce-api-context | 必须加载技能并调用 API 上下文 |
| 自定义字段 | platform-custom-field-generate | salesforce-api-context | 必须加载技能并调用 API 上下文 |
| 自定义选项卡 | platform-custom-tab-generate | salesforce-api-context | 必须加载技能并调用 API 上下文 |
| FlexiPage | platform-flexipage-generate | salesforce-api-context | 必须加载技能并调用 API 上下文 |
| 自定义应用 | platform-custom-application-generate | salesforce-api-context | 必须加载技能并调用 API 上下文 |
| 列表视图 | platform-list-view-generate | salesforce-api-context | 必须加载技能并调用 API 上下文(如有请求) |
| 验证规则 | platform-validation-rule-generate | salesforce-api-context | 必须加载技能并调用 API 上下文(如有请求) |
| Flow | automation-flow-generate | metadata-experts pipeline | 必须加载技能并运行管道。无需使用 salesforce-api-context。 |
| 权限集 | platform-permission-set-generate | salesforce-api-context | 必须加载技能并调用 API 上下文 |
使用规则
技能规则:如果某种元数据类型有对应技能,必须先加载该技能。请勿在未加载技能的情况下直接生成元数据。
API 上下文规则:生成前,除 Flow 外,必须为每种元数据类型调用 salesforce-api-context 工具。请勿在未先调用 API 上下文的情况下生成元数据。技能提供结构和规则;API 上下文用于确认当前 API 版本支持哪些内容。两者缺一不可。
回退规则:如果所需元数据类型没有对应技能,请根据对 Salesforce Metadata API 的了解和最佳实践直接生成元数据。仍需使用 API 上下文。
原因:技能包含经过验证的模式和约束。API 上下文可提供特定版本的准确信息。两者结合可避免部署失败。
依赖关系图与构建顺序
阶段 1:数据模型(基础)
Custom Objects (no dependencies)
↓
Custom Fields (depends on: Objects exist)
↓
Relationships (depends on: Both parent and child objects + fields exist)
此阶段的元数据类型:
platform-custom-object-generate—— 一次,包含所有对象platform-custom-field-generate—— 一次,包含所有字段(包括主从关系、查找关系、汇总汇总字段)
阶段 2:业务逻辑(可选——仅在用户要求时)
Validation Rules (depends on: Fields exist)
↓
Flows (depends on: Objects, Fields exist)
此阶段的元数据类型(仅在用户要求时):
platform-validation-rule-generate—— 一次,在提及验证要求时automation-flow-generate—— 一次,在提及自动化/工作流要求时
阶段 3:用户界面
List Views (depends on: Objects, Fields exist)
↓
Custom Tabs (depends on: Objects exist)
↓
FlexiPages (depends on: Objects, Tabs exist)
此阶段的元数据类型:
platform-list-view-generate—— 一次,用于筛选记录视图(如有要求)platform-custom-tab-generate—— 一次,包含所有对象选项卡platform-flexipage-generate—— 一次,包含所有记录页/主页/应用页面
阶段 4:应用组装
Custom Application (depends on: Tabs exist)
此阶段的元数据类型:
platform-custom-application-generate—— 一次,用于创建 Lightning App 容器
阶段 5:安全与访问权限
Permission Sets (depends on: Objects, Fields, Tabs, App exist)
此阶段的元数据类型:
platform-permission-set-generate—— 一次,包含所有权限集以及以下访问权限:- 对象(读取、创建、编辑、删除)
- 字段(读取、编辑)
- 选项卡(可见)
- 自定义应用(可见)
执行工作流
步骤 1:需求分析与规划
操作:
- 解析用户的自然语言请求
- 提取业务实体(转化为自定义对象)
- 提取属性/特性(转化为自定义字段)
- 识别关系(主从关系、查找关系)
- 检测验证要求(转化为验证规则)
- 检测自动化要求(转化为流)
- 识别用户角色(为权限集提供依据)
输出:构建计划
生成一份结构化计划,列出:
Lightning App Build Plan: [App Name]
DATA MODEL:
- Custom Objects: [list with object names]
- Custom Fields: [list grouped by object]
- Relationships: [list M-D and Lookup relationships]
BUSINESS LOGIC (if applicable):
- Validation Rules: [list with object and rule name]
- Flows: [list with flow name and type]
USER INTERFACE:
- List Views (if requested): [list with object and view name]
- Custom Tabs: [list with object]
- FlexiPages: [list with page name and type]
- Custom Application: [app name]
SECURITY:
- Permission Sets: [list with purpose]
PER-TYPE EXECUTION (skill + API context for each):
- CustomObject: load platform-custom-object-generate + call salesforce-api-context
- CustomField: load platform-custom-field-generate + call salesforce-api-context
- ValidationRule: load platform-validation-rule-generate + call salesforce-api-context (if requested)
- Flow: load automation-flow-generate + run metadata-experts pipeline (if requested)
- ListView: load platform-list-view-generate + call salesforce-api-context (if requested)
- CustomTab: load platform-custom-tab-generate + call salesforce-api-context
- FlexiPage: load platform-flexipage-generate + call salesforce-api-context
- CustomApplication: load platform-custom-application-generate + call salesforce-api-context
- PermissionSet: load platform-permission-set-generate + call salesforce-api-context
STATUS LINES TO EMIT BEFORE FILE WRITES:
- `type=<Type> skill=complete mcp=complete|unavailable mcp_tools=<tool-list|none>`
- Flow exception: `type=Flow skill=complete pipeline=complete`
DEPENDENCY ORDER:
1. Phase 1: Data Model (Objects -> Fields)
2. Phase 2: Business Logic (Validation Rules -> Flows)
3. Phase 3: User Interface (List Views -> Tabs -> Pages)
4. Phase 4: App Assembly (Application)
5. Phase 5: Security (Permission Sets)
步骤 2:按类型执行
针对每种元数据类型,逐一执行以下四个步骤。完成当前类型的全部四个步骤后,再处理下一种类型。不得跳过任何步骤。
| 步骤 | 操作 | 原因 |
|---|---|---|
| ① 加载技能 | 搜索并阅读该类型的 SKILL.md | 提供 XML 结构、必需元素、命名规则和验证约束 |
| ② 调用 API 上下文 | 针对此元数据类型调用 salesforce-api-context 工具,可使用以下一个或多个工具:get_metadata_type_sections、get_metadata_type_context、get_metadata_type_fields、get_metadata_type_fields_properties、search_metadata_types | 提供当前有效值——允许的枚举值、必填字段与可选字段,以及此 API 版本的子类型。技能文件提供结构;API 上下文提供特定版本的准确性。 |
| ③ 记录状态 | 输出:type=<Type> skill=complete mcp=complete|unavailable mcp_tools=<tool-list|none> | 确认在写入任何文件前已尝试上述两个步骤,并记录使用了哪些 API 上下文工具 |
| ④ 生成文件 | 为此类型生成所有文件,然后创建检查点 | 仅在完成 ①②③ 后执行。验证后,再进入下一种类型。 |
不得将 ① 和 ② 合并为一个操作,也不得在完成 ① 后跳过 ②。 这是两个用途不同的独立步骤。加载技能后,你可能会觉得可以开始生成——请停下,先执行 ②。
如果经过实际尝试后 salesforce-api-context 仍不可用,请记录 mcp=unavailable,并仅依据技能知识生成。完全不尝试 ② 属于错误。
1. 自定义对象
- ① 加载技能:阅读
platform-custom-object-generateSKILL.md - ② API 上下文:针对 CustomObject 调用
salesforce-api-context - ③ 状态:
type=CustomObject skill=complete mcp=complete|unavailable mcp_tools=<tool-list|none> - ④ 生成并创建检查点:生成所有自定义对象文件,然后继续处理 #2 2. 自定义字段
- ① 加载技能:读取
platform-custom-field-generateSKILL.md - ② API 上下文:为 CustomField 调用
salesforce-api-context - ③ 状态:
type=CustomField skill=complete mcp=complete|unavailable mcp_tools=<tool-list|none> - ④ 生成 + 检查点:生成所有自定义字段文件,然后继续执行 #3
3. 验证规则(仅在请求时)
- ① 加载技能:读取
platform-validation-rule-generateSKILL.md - ② API 上下文:为 ValidationRule 调用
salesforce-api-context - ③ 状态:
type=ValidationRule skill=complete mcp=complete|unavailable mcp_tools=<tool-list|none> - ④ 生成 + 检查点:生成所有验证规则文件,然后继续执行 #4
4. 流(仅在请求时)
- ① 加载技能:读取
automation-flow-generateSKILL.md - ② 流水线:运行
metadata-experts/execute_metadata_action三步流水线(无需调用salesforce-api-context) - ③ 状态:
type=Flow skill=complete pipeline=complete - ④ 生成 + 检查点:通过流水线生成所有 Flow 文件,然后继续执行 #5
5. 列表视图(仅在请求时)
- ① 加载技能:读取
platform-list-view-generateSKILL.md - ② API 上下文:为 ListView 调用
salesforce-api-context - ③ 状态:
type=ListView skill=complete mcp=complete|unavailable mcp_tools=<tool-list|none> - ④ 生成 + 检查点:生成所有列表视图文件,然后继续执行 #6
6. 自定义选项卡
- ① 加载技能:读取
platform-custom-tab-generateSKILL.md - ② API 上下文:为 CustomTab 调用
salesforce-api-context - ③ 状态:
type=CustomTab skill=complete mcp=complete|unavailable mcp_tools=<tool-list|none> - ④ 生成 + 检查点:生成所有自定义选项卡文件,然后继续执行 #7
7. FlexiPages
- ① 加载技能:读取
platform-flexipage-generateSKILL.md - ② API 上下文:为 FlexiPage 调用
salesforce-api-context - ③ 状态:
type=FlexiPage skill=complete mcp=complete|unavailable mcp_tools=<tool-list|none> - ④ 生成 + 检查点:生成所有 FlexiPage 文件,然后继续执行 #8
8. 自定义应用
- ① 加载技能:读取
platform-custom-application-generateSKILL.md - ② API 上下文:为 CustomApplication 调用
salesforce-api-context - ③ 状态:
type=CustomApplication skill=complete mcp=complete|unavailable mcp_tools=<tool-list|none> - ④ 生成 + 检查点:生成自定义应用文件,然后继续执行 #9
9. 权限集
- ① 加载技能:读取
platform-permission-set-generateSKILL.md - ② API 上下文:为 PermissionSet 调用
salesforce-api-context - ③ 状态:
type=PermissionSet skill=complete mcp=complete|unavailable mcp_tools=<tool-list|none> - ④ 生成 + 检查点:生成所有权限集文件 — 所有类型均已完成
步骤 3:最终构件组装
所有阶段完成后,将输出整合为可用于部署的结构。
输出
完成的构建会生成:
-
Salesforce DX 项目目录,包含所有生成的元数据
- 按标准 SFDX 结构组织:
force-app/main/default/
- 按标准 SFDX 结构组织:
-
元数据文件 — 每个组件对应一个文件,按类型组织:
force-app/main/default/ ├── objects/ # Custom Objects (.object-meta.xml) ├── fields/ # Custom Fields (.field-meta.xml) ├── tabs/ # Custom Tabs (.tab-meta.xml) ├── flexipages/ # Lightning Pages (.flexipage-meta.xml) ├── applications/ # Custom Applications (.app-meta.xml) ├── permissionsets/ # Permission Sets (.permissionset-meta.xml) ├── flows/ # Flows (.flow-meta.xml) - if applicable └── objects/.../validationRules/ # Validation Rules (.validationRule-meta.xml) - if applicable -
部署清单(
package.xml)- 列出所有组件并包含正确的 API 版本
- 按依赖顺序,依元数据类型组织
- 可用于 Salesforce CLI 部署或 Metadata API 部署
-
构建摘要报告 — 一个列出以下内容的 Markdown 文件:
- 创建的每个组件
- 组件类型和 API 名称
- 文件路径位置
- 依赖关系
- 任何警告或建议
摘要结构示例:
Lightning App Build Complete: Project Management App
METADATA GENERATED:
1 Custom Objects
- Project__c -> force-app/main/default/objects/Project__c/Project__c.object-meta.xml
- Task__c -> force-app/main/default/objects/Task__c/Task__c.object-meta.xml
- Resource__c -> force-app/main/default/objects/Resource__c/Resource__c.object-meta.xml
2 Custom Fields
- Project__c.Name -> force-app/main/default/objects/Project__c/fields/Name.field-meta.xml
- Project__c.Status__c -> force-app/main/default/objects/Project__c/fields/Status__c.field-meta.xml
[... etc ...]
3 Custom Tabs
- Project__c -> force-app/main/default/tabs/Project__c.tab-meta.xml
[... etc ...]
4 Lightning Record Pages
- Project_Record_Page -> force-app/main/default/flexipages/Project_Record_Page.flexipage-meta.xml
[... etc ...]
5 Custom Application
- Project_Management -> force-app/main/default/applications/Project_Management.app-meta.xml
6 Permission Sets
- Project_Manager -> force-app/main/default/permissionsets/Project_Manager.permissionset-meta.xml
- Project_User -> force-app/main/default/permissionsets/Project_User.permissionset-meta.xml
WARNINGS: None
验证
向用户提交已完成的构建之前,请验证跨组件完整性:
- 对象与选项卡覆盖情况:每个自定义对象至少有一个自定义选项卡
- 关系完整性:关系中引用的每个自定义对象(父对象或子对象)都存在于构建中
- 页面中的字段引用:FlexiPage 中引用的每个字段都存在于相应对象上
- 应用中的选项卡引用:自定义应用中引用的每个选项卡都已成功创建
- 权限集完整性:权限集已授予对所有生成的对象、字段、选项卡和应用的访问权限
- 无孤立组件:没有缺少对象的选项卡、没有缺少对应选项卡的页面、没有缺少选项卡的应用
- 部署清单完整性:
package.xml按正确的依赖顺序包含所有生成的组件
验证失败处理(类别 2):
- 如果验证失败,请在构建摘要报告的
VALIDATION WARNINGS部分列出未通过的检查 - 这些属于生成后的问题——不要因此阻止交付构建,但要清楚说明哪些内容需要人工审查或修正
- 针对每项未通过的验证检查,提供具体的修复步骤
注意:单个组件的验证(保留字、名称长度、字段类型等)由专门的元数据技能处理,无需在此重新验证。
错误处理
类别 1:停止并询问用户
遇到以下情况时,停止执行并请求用户澄清:
- 用户请求过于模糊,无法提取任何对象或字段
- 检测到相互冲突的要求(例如,“设为私有”+“所有人都应能看到”)
- 检测到无效的 Salesforce 命名(如
Order、Group等保留字)
类别 2:生成后警告(记录警告,继续执行)
遇到以下情况时,记录警告并继续执行:
- 跨组件验证检查未通过(例如,FlexiPage 中引用的字段在对象上不存在)
- 可选组件生成失败(例如,列表视图生成存在轻微问题)
- 验证规则或 Flow 的输出存在轻微问题
警告格式:
Warning: [Component Type] generation encountered issue
Component: [Name]
Issue: [Description]
Impact: [What won't work]
Recommendation: [How to fix manually]
Continuing with remaining components...
最佳实践
1. 始终遵循依赖顺序
切勿按错误顺序调用技能。字段需要对象,页面需要选项卡,应用需要选项卡。
2. 有可用技能时使用技能
不要重复造轮子。专用技能具有针对字段的验证,可避免部署错误。
3. 生成合理的默认值
用户未指定详细信息时:
- 对实体使用 Text 类型的名称字段
- 对交易使用 AutoNumber
- 为面向用户的对象启用 Search 和 Reports
- 根据关系设置 sharingModel
4. 构建前进行验证
检查以下内容:
- API 名称中是否包含保留字
- 关系限制(每个对象最多 2 个主从关系)
- 名称长度限制
- 重复名称