根据自然语言描述构建完整的 Salesforce Lightning Experience 应用程序。当用户请求“完整应用”、“Lightning 应用”、“业务解决方案”、“管理系统”或描述需要多个相互关联的 Salesforce 组件(对象、字段、页面、选项卡、安全性)的场景时,使用此技能。按正确的依赖顺序编排所有必需的元数据类型,以生成可部署的应用程序。
生成 Lightning 应用
概述
通过定义 Lightning 自定义应用程序,并按正确的依赖顺序编排其依赖的元数据类型,从自然语言描述构建一个完整、可部署的 Salesforce Lightning Experience 应用程序。当有专门的元数据技能时调用它们;当没有技能时直接生成元数据。
何时使用此技能
使用场景:
- 用户请求“Lightning 应用”或“端到端解决方案”
- 用户说“构建一个应用”、“创建一个应用程序”、“构建一个[类型]应用”(项目管理、跟踪等)
- 工作产出包括自定义应用(CustomApplication)以及支持的元数据,而不仅仅是单独的对象、页面或选项卡
应触发此技能的示例:
- “构建一个项目管理 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 上下文(如果请求) |
| 流 | automation-flow-generate |
metadata-experts 管道 |
必须加载技能并运行管道。豁免于 salesforce-api-context。 |
| 权限集 | platform-permission-set-generate |
salesforce-api-context |
必须加载技能并调用 API 上下文 |
使用规则
技能规则:当某个元数据类型存在技能时,您必须加载该技能。不要在没有先加载技能的情况下直接生成元数据。
API 上下文规则:对于每种元数据类型(流除外),您必须在生成之前调用 salesforce-api-context 工具。不要在没有先调用 API 上下文的情况下生成元数据。技能提供结构和规则;API 上下文确认当前 API 版本的有效性。两者都必不可少。
回退规则:当您需要的元数据类型没有技能时,使用您对 Salesforce Metadata API 和最佳实践的知识直接生成元数据。仍然需要 API 上下文。
理由:技能包含经过验证的模式和约束。API 上下文提供版本特定的准确性。两者共同防止部署失败。
依赖图与构建顺序
阶段 1:数据模型(基础)
自定义对象(无依赖)
↓
自定义字段(依赖:对象存在)
↓
关系(依赖:父对象和子对象以及字段存在)
此阶段的元数据类型:
platform-custom-object-generate- 一次,包含所有对象platform-custom-field-generate- 一次,包含所有字段(包括主从关系、查找关系、汇总字段)
阶段 2:业务逻辑(可选 - 仅在请求时)
验证规则(依赖:字段存在)
↓
流(依赖:对象、字段存在)
此阶段的元数据类型(仅在用户请求时):
platform-validation-rule-generate- 一次,如果提到验证要求automation-flow-generate- 一次,如果提到自动化/工作流要求
阶段 3:用户界面
列表视图(依赖:对象、字段存在)
↓
自定义选项卡(依赖:对象存在)
↓
FlexiPages(依赖:对象、选项卡存在)
此阶段的元数据类型:
platform-list-view-generate- 一次,用于筛选的记录视图(如果请求)platform-custom-tab-generate- 一次,包含所有对象选项卡platform-flexipage-generate- 一次,包含所有记录/主页/应用程序页面
阶段 4:应用程序组装
自定义应用程序(依赖:选项卡存在)
此阶段的元数据类型:
platform-custom-application-generate- 一次,创建 Lightning 应用容器
阶段 5:安全与访问
权限集(依赖:对象、字段、选项卡、应用存在)
此阶段的元数据类型:
platform-permission-set-generate- 一次,包含所有权限集以及以下访问权限:- 对象(读取、创建、编辑、删除)
- 字段(读取、编辑)
- 选项卡(可见)
- 自定义应用程序(可见)
执行工作流
步骤 1:需求分析与规划
操作:
- 解析用户的自然语言请求
- 提取业务实体(成为自定义对象)
- 提取属性/特性(成为自定义字段)
- 识别关系(主从关系、查找关系)
- 检测验证要求(成为验证规则)
- 检测自动化要求(成为流)
- 识别用户角色(为权限集提供信息)
输出:构建计划
生成一个结构化计划,列出:
Lightning 应用构建计划:[应用名称]
数据模型:
- 自定义对象:[列出对象名称]
- 自定义字段:[按对象分组列出]
- 关系:[列出主从关系和查找关系]
业务逻辑(如果适用):
- 验证规则:[列出对象和规则名称]
- 流:[列出流名称和类型]
用户界面:
- 列表视图(如果请求):[列出对象和视图名称]
- 自定义选项卡:[列出对象]
- FlexiPages:[列出页面名称和类型]
- 自定义应用程序:[应用名称]
安全:
- 权限集:[列出用途]
按类型执行(每种类型使用技能 + API 上下文):
- CustomObject:加载 platform-custom-object-generate + 调用 salesforce-api-context
- CustomField:加载 platform-custom-field-generate + 调用 salesforce-api-context
- ValidationRule:加载 platform-validation-rule-generate + 调用 salesforce-api-context(如果请求)
- Flow:加载 automation-flow-generate + 运行 metadata-experts 管道(如果请求)
- ListView:加载 platform-list-view-generate + 调用 salesforce-api-context(如果请求)
- CustomTab:加载 platform-custom-tab-generate + 调用 salesforce-api-context
- FlexiPage:加载 platform-flexipage-generate + 调用 salesforce-api-context
- CustomApplication:加载 platform-custom-application-generate + 调用 salesforce-api-context
- PermissionSet:加载 platform-permission-set-generate + 调用 salesforce-api-context
在写入文件之前要发出的状态行:
- `type=<Type> skill=complete mcp=complete|unavailable mcp_tools=<tool-list|none>`
- 流例外:`type=Flow skill=complete pipeline=complete`
依赖顺序:
1. 阶段 1:数据模型(对象 -> 字段)
2. 阶段 2:业务逻辑(验证规则 -> 流)
3. 阶段 3:用户界面(列表视图 -> 选项卡 -> 页面)
4. 阶段 4:应用组装(应用程序)
5. 阶段 5:安全(权限集)
步骤 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_action3 步管道(豁免于salesforce-api-context) - ③ 状态:
type=Flow skill=complete pipeline=complete - ④ 生成 + 检查点:通过管道生成所有流文件,然后继续 #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/ # 自定义对象 (.object-meta.xml) ├── fields/ # 自定义字段 (.field-meta.xml) ├── tabs/ # 自定义选项卡 (.tab-meta.xml) ├── flexipages/ # Lightning 页面 (.flexipage-meta.xml) ├── applications/ # 自定义应用程序 (.app-meta.xml) ├── permissionsets/ # 权限集 (.permissionset-meta.xml) ├── flows/ # 流 (.flow-meta.xml) - 如果适用 └── objects/.../validationRules/ # 验证规则 (.validationRule-meta.xml) - 如果适用 -
部署清单 (
package.xml)- 列出所有组件,包含正确的 API 版本
- 按依赖顺序按元数据类型组织
- 可用于 Salesforce CLI 部署或 Metadata API 部署
-
构建摘要报告 - 一个 markdown 文件,列出:
- 创建的每个组件
- 组件类型和 API 名称
- 文件路径位置
- 依赖关系
- 任何警告或建议
示例摘要结构:
Lightning 应用构建完成:项目管理应用
生成的元数据:
1 自定义对象
- 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 自定义字段
- 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
[... 等等 ...]
3 自定义选项卡
- Project__c -> force-app/main/default/tabs/Project__c.tab-meta.xml
[... 等等 ...]
4 Lightning 记录页面
- Project_Record_Page -> force-app/main/default/flexipages/Project_Record_Page.flexipage-meta.xml
[... 等等 ...]
5 自定义应用程序
- Project_Management -> force-app/main/default/applications/Project_Management.app-meta.xml
6 权限集
- Project_Manager -> force-app/main/default/permissionsets/Project_Manager.permissionset-meta.xml
- Project_User -> force-app/main/default/permissionsets/Project_User.permissionset-meta.xml
警告:无
验证
在向用户呈现完成的构建之前,验证跨组件完整性:
- [ ] 对象-选项卡覆盖:每个自定义对象至少有一个自定义选项卡
- [ ] 关系完整性:关系中引用的每个自定义对象(父或子)都存在于构建中
- [ ] 页面中的字段引用:FlexiPage 中引用的每个字段都存在于相应的对象上
- [ ] 应用中的选项卡引用:自定义应用程序中引用的每个选项卡都已成功创建
- [ ] 权限集完整性:权限集授予对所有生成的对象、字段、选项卡和应用程序的访问权限
- [ ] 无孤立组件:没有无对象的选项卡,没有无相应选项卡的页面,没有无选项卡的应用
- [ ] 部署清单完整性:
package.xml包含所有生成的组件,并按正确的依赖顺序排列
验证失败处理(类别 2):
- 如果验证失败,在构建摘要报告的
VALIDATION WARNINGS部分包含失败的检查 - 这些是生成后的问题——不要阻止交付构建,但明确传达需要手动审查或更正的内容
- 为每个失败的验证检查提供具体的补救步骤
注意:单个组件验证(保留字、名称长度、字段类型等)由专门的元数据技能处理,此处无需重新验证。
错误处理
类别 1:停止并询问用户
在以下情况下停止执行并请求澄清:
- 用户请求过于模糊,无法提取任何对象或字段
- 检测到冲突的要求(例如,“设为私有”+“每个人都应该看到”)
- 检测到无效的 Salesforce 命名(保留字如
Order、Group)
类别 2:生成后警告(记录警告,继续)
在以下情况下记录警告并继续:
- 跨组件验证检查失败(例如,FlexiPage 中引用的字段在对象上不存在)
- 可选组件生成失败(例如,列表视图生成有轻微问题)
- 验证规则或流有轻微输出问题
警告模式:
警告:[组件类型] 生成遇到问题
组件:[名称]
问题:[描述]
影响:[什么将不起作用]
建议:[如何手动修复]
继续处理剩余组件...
最佳实践
1. 始终遵循依赖顺序
切勿按顺序调用技能。字段需要对象,页面需要选项卡,应用需要选项卡。
2. 在可用时使用技能
不要重新发明轮子。专门的技能具有字段特定的验证,可防止部署错误。
3. 生成合理的默认值
当用户未指定细节时:
- 对人工实体使用文本名称字段
- 对交易使用自动编号
- 为用户面向的对象启用搜索和报告
- 根据关系设置共享模型
4. 在构建前验证
检查:
- API 名称中的保留字
- 关系限制(每个对象最多 2 个主从关系)
- 名称长度限制
- 重复名称






