mcpField
G
generating-lightning-app

generating-lightning-app

github.com/forcedotcom开发1.1k3.9k 次安装1 天前更新
代码仓库

关于 generating-lightning-app

将自然语言需求转化为可部署的 Salesforce Lightning Experience 应用及配套元数据的技能。它规划组件与依赖关系,并指导按依赖顺序生成,同时检查 API 上下文。

主要功能

  1. 01从自然语言规划应用需求
  2. 02按类型协调元数据技能
  3. 03按依赖顺序构建组件
  4. 04根据 API 上下文检查元数据
  5. 05组装 SFDX 文件和 package.xml

适用场景

  1. 01构建多对象项目管理应用
  2. 02生成含页面和权限的 Lightning 应用
  3. 03生成前规划元数据依赖关系
  4. 04准备 Salesforce CLI 部署产物

MCP 相关

除 Flow 外,工作流要求在生成前调用 salesforce-api-context 工具检查元数据类型;Flow 使用 metadata-experts 流程。内容提到 API 上下文检查,但未说明 MCP 服务连接方式。

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/forcedotcom/sf-skills --skill generating-lightning-app

安装后在 Claude Code 中输入/generating-lightning-app确认已加载。

详细介绍

生成 Lightning 应用

概述

根据自然语言描述,通过定义 Lightning 自定义应用,并按正确的依赖顺序编排其依赖的元数据类型,构建完整且可部署的 Salesforce Lightning Experience 应用。有专用元数据技能时调用该技能;没有对应技能时直接生成元数据。

何时使用此技能

适用情况:

  • 用户请求“Lightning 应用”或“端到端解决方案”
  • 用户说“构建应用”“创建应用”或“构建一个[类型]应用”(例如项目管理、跟踪等)
  • 工作内容会生成自定义应用(CustomApplication)和支持元数据,而不是单独生成一个对象、页面或选项卡

应触发此技能的示例:

  • “构建一个包含 Tasks、Resources 和 Supplies 对象的项目管理 Lightning 应用”
  • “创建一个用于跟踪车辆的 LEX 应用,包含 Lightning 页面和权限集”
  • “我需要一个包含多个对象和关系的空间站管理系统”
  • “构建一个包含自定义 Lightning 记录页面的员工入职 Lightning 应用”

不适用情况:

  • 创建单个元数据组件(应改用对应的专用元数据技能)
  • 排查或调试现有元数据
  • 构建 Salesforce Classic 应用(而非 Lightning Experience)
  • 用户只要求一个对象、一个页面或一个权限集(没有其他内容)
  • 用户只需创建或配置应用容器(将现有选项卡分组),不需要其他元数据;请改用 generating-custom-application

元数据类型注册表

下表列出了 Lightning Experience 应用通常需要的元数据类型、对应技能是否可用,以及 API 上下文要求。

元数据类型技能名称API 上下文使用规则
自定义对象generating-custom-objectsalesforce-api-context必须加载技能并调用 API 上下文
自定义字段generating-custom-fieldsalesforce-api-context必须加载技能并调用 API 上下文
自定义选项卡generating-custom-tabsalesforce-api-context必须加载技能并调用 API 上下文
FlexiPagegenerating-flexipagesalesforce-api-context必须加载技能并调用 API 上下文
自定义应用generating-custom-applicationsalesforce-api-context必须加载技能并调用 API 上下文
列表视图generating-list-viewsalesforce-api-context必须加载技能并调用 API 上下文(如有请求)
验证规则generating-validation-rulesalesforce-api-context必须加载技能并调用 API 上下文(如有请求)
Flowgenerating-flowmetadata-experts pipeline必须加载技能并运行 pipeline。不需要 salesforce-api-context。
权限集generating-permission-setsalesforce-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)

本阶段的元数据类型:

  1. generating-custom-object — 一次,包含所有对象
  2. generating-custom-field — 一次,包含所有字段(包括主从关系、查找关系、汇总汇总字段)
阶段 2:业务逻辑(可选 — 仅在用户提出要求时)
Validation Rules (depends on: Fields exist)
    ↓
Flows (depends on: Objects, Fields exist)

本阶段的元数据类型(仅在用户提出要求时):

  1. generating-validation-rule — 一次,仅在提及验证要求时
  2. generating-flow — 一次,仅在提及自动化/工作流要求时
阶段 3:用户界面
List Views (depends on: Objects, Fields exist)
    ↓
Custom Tabs (depends on: Objects exist)
    ↓
FlexiPages (depends on: Objects, Tabs exist)

本阶段的元数据类型:

  1. generating-list-view — 一次,用于筛选记录视图(如有要求)
  2. generating-custom-tab — 一次,包含所有对象标签页
  3. generating-flexipage — 一次,包含所有记录/主页/应用页面
阶段 4:应用组装
Custom Application (depends on: Tabs exist)

本阶段的元数据类型:

  1. generating-custom-application — 一次,用于创建 Lightning 应用容器
阶段 5:安全与访问权限
Permission Sets (depends on: Objects, Fields, Tabs, App exist)

本阶段的元数据类型:

  1. generating-permission-set — 一次,包含所有权限集,以及以下访问权限:
    • 对象(读取、创建、编辑、删除)
    • 字段(读取、编辑)
    • 标签页(可见)
    • 自定义应用(可见)

执行工作流

步骤 1:需求分析与规划

操作:

  1. 解析用户的自然语言请求
  2. 提取业务实体(成为自定义对象)
  3. 提取属性/特性(成为自定义字段)
  4. 识别关系(主从关系、查找关系)
  5. 检测验证要求(成为验证规则)
  6. 检测自动化要求(成为流程)
  7. 识别用户角色(为权限集提供依据)

输出:构建计划

生成一份结构化计划,列出:

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 generating-custom-object + call salesforce-api-context
- CustomField: load generating-custom-field + call salesforce-api-context
- ValidationRule: load generating-validation-rule + call salesforce-api-context (if requested)
- Flow: load generating-flow + run metadata-experts pipeline (if requested)
- ListView: load generating-list-view + call salesforce-api-context (if requested)
- CustomTab: load generating-custom-tab + call salesforce-api-context
- FlexiPage: load generating-flexipage + call salesforce-api-context
- CustomApplication: load generating-custom-application + call salesforce-api-context
- PermissionSet: load generating-permission-set + 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. 自定义对象

  • ① 加载技能:阅读 generating-custom-object SKILL.md
  • ② API 上下文:针对 CustomObject 调用 salesforce-api-context
  • ③ 状态:type=CustomObject skill=complete mcp=complete|unavailable mcp_tools=<tool-list|none>
  • ④ 生成 + 建立检查点:生成所有自定义对象文件,然后继续执行 #2 2. 自定义字段
  • ① 加载技能:阅读 generating-custom-field SKILL.md
  • ② API 上下文:针对 CustomField 调用 salesforce-api-context
  • ③ 状态:type=CustomField skill=complete mcp=complete|unavailable mcp_tools=<tool-list|none>
  • ④ 生成 + 检查点:生成所有自定义字段文件,然后继续执行 #3

3. 验证规则(仅在请求时)

  • ① 加载技能:阅读 generating-validation-rule SKILL.md
  • ② API 上下文:针对 ValidationRule 调用 salesforce-api-context
  • ③ 状态:type=ValidationRule skill=complete mcp=complete|unavailable mcp_tools=<tool-list|none>
  • ④ 生成 + 检查点:生成所有验证规则文件,然后继续执行 #4

4. 流(仅在请求时)

  • ① 加载技能:阅读 generating-flow SKILL.md
  • ② 流水线:运行 metadata-experts/execute_metadata_action 三步流水线(无需执行 salesforce-api-context)
  • ③ 状态:type=Flow skill=complete pipeline=complete
  • ④ 生成 + 检查点:通过流水线生成所有 Flow 文件,然后继续执行 #5

5. 列表视图(仅在请求时)

  • ① 加载技能:阅读 generating-list-view SKILL.md
  • ② API 上下文:针对 ListView 调用 salesforce-api-context
  • ③ 状态:type=ListView skill=complete mcp=complete|unavailable mcp_tools=<tool-list|none>
  • ④ 生成 + 检查点:生成所有列表视图文件,然后继续执行 #6

6. 自定义选项卡

  • ① 加载技能:阅读 generating-custom-tab SKILL.md
  • ② API 上下文:针对 CustomTab 调用 salesforce-api-context
  • ③ 状态:type=CustomTab skill=complete mcp=complete|unavailable mcp_tools=<tool-list|none>
  • ④ 生成 + 检查点:生成所有自定义选项卡文件,然后继续执行 #7

7. FlexiPages

  • ① 加载技能:阅读 generating-flexipage SKILL.md
  • ② API 上下文:针对 FlexiPage 调用 salesforce-api-context
  • ③ 状态:type=FlexiPage skill=complete mcp=complete|unavailable mcp_tools=<tool-list|none>
  • ④ 生成 + 检查点:生成所有 FlexiPage 文件,然后继续执行 #8

8. 自定义应用程序

  • ① 加载技能:阅读 generating-custom-application SKILL.md
  • ② API 上下文:针对 CustomApplication 调用 salesforce-api-context
  • ③ 状态:type=CustomApplication skill=complete mcp=complete|unavailable mcp_tools=<tool-list|none>
  • ④ 生成 + 检查点:生成自定义应用程序文件,然后继续执行 #9

9. 权限集

  • ① 加载技能:阅读 generating-permission-set SKILL.md
  • ② API 上下文:针对 PermissionSet 调用 salesforce-api-context
  • ③ 状态:type=PermissionSet skill=complete mcp=complete|unavailable mcp_tools=<tool-list|none>
  • ④ 生成 + 检查点:生成所有权限集文件 — 所有类型均已完成
第 3 步:最终制品组装

所有阶段完成后,将输出整合为可供部署的结构。


输出

完成构建后将生成:

  1. Salesforce DX 项目目录,包含所有生成的元数据

    • 按标准 SFDX 结构组织:force-app/main/default/
  2. 元数据文件 — 每个组件对应一个文件,并按类型组织:

    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
    
  3. 部署清单(package.xml)

    • 列出所有组件,并指定正确的 API 版本
    • 按依赖顺序以元数据类型分类组织
    • 可用于 Salesforce CLI 部署或 Metadata API 部署
  4. 构建摘要报告 — 一个 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 个主从关系)
  • 名称长度限制
  • 重复名称

评论

支持 Markdown